On This Page
Submit one test signup twice. You should still have one subscriber, one confirmation request and a record of what happened. If the second delivery sends another welcome sequence, the connection needs more work.
A useful Webflow-to-Brevo integration has to handle the second delivery as carefully as the first. This guide gives you a field map, a confirmation boundary and a small acceptance test you can use with an automation service or your own backend.
Choose the shortest route
| What you need | Start here | What to check |
|---|---|---|
| A newsletter signup | Embed a Brevo form | Double confirmation, required fields and the destination list |
| Native Webflow submission records | Keep the Webflow form and connect an automation service | Field mapping, confirmation handling and replay behavior |
| Custom routing or controlled recovery | Receive Webflow events on your backend | Authentication, pending state, deduplication and failure records |
Brevo’s form builder supports double confirmation. New subscribers must click the emailed link before they are added to the contact database. That is a good default when a newsletter form is all you need.
“We already designed the form in Webflow.” Keep it if its layout or submission records matter. Webflow’s integration guide describes automation and API routes. Check the effect of a custom form action before changing it: bypassing Webflow’s handling also changes where submissions are stored.
Decide what each field means
Use a dedicated newsletter form, or a separate, unticked marketing choice on a general enquiry form. A request for a sales reply should not silently become a newsletter signup.
Here is an example map for a business newsletter. The required first name and business email are this form’s policy, not universal requirements imposed by Webflow or Brevo.
| Source field | Destination | Rule |
|---|---|---|
| Work email | Contact email | Required; validate on the server |
| First name | FIRSTNAME attribute | Required; trim surrounding spaces |
| Company | COMPANY attribute | Optional; do not erase a saved value with an empty submission |
| Marketing choice | Consent record | Recognize explicit values; unknown means stop |
| Submission ID | Processing record | Use it to recognize the same delivery again |
| Submission time and form ID | Processing record | Keep enough context to explain the source |
Create matching Brevo attributes with the correct types before sending data. Brevo’s contact API accepts an attributes object and supports updating an existing contact with updateEnabled. Those fields move data; they do not establish permission to send marketing.
If you restrict the form to business addresses, enforce that policy on the server as well as in the interface. A business domain does not prove consent or guarantee that a mailbox belongs to a real customer.
Keep confirmation ahead of audience entry
For new subscribers, use this sequence:
- Validate the form and the explicit marketing choice.
- Save the request as pending, with its source and submission ID.
- Start one double opt-in request.
- Accept confirmation through the chosen confirmation system.
- Admit the confirmed subscriber to the marketing audience.
Brevo provides a dedicated double opt-in API endpoint, POST /v3/contacts/doubleOptinConfirmation, with a template, destination lists and a redirect URL. A regular POST /v3/contacts call is a different operation. Do not create a new contact first if your requirement is confirmation before contact creation.
Choose one system to own the confirmation. Connecting a Brevo form, a separate automation and your own confirmation sender to the same submission can produce duplicate messages. A successful API response also is not evidence that the person clicked the link.
For the broader subscription design, see our double opt-in guide. Test an existing unsubscribed address separately from a new address.
Receive events on a server
Keep the Brevo API key out of Webflow page code. The receiving backend, or your automation service’s credential store, should hold it.
Webflow documents the form_submission webhook, including the submitted fields, form identity and submission time. Verify the webhook according to the method used to create it. Webflow notes that dashboard-created webhooks do not include the signature headers described for its signed integration path.
Record a valid delivery durably before acknowledging it. If the destination is unavailable, retry the saved work. Track “received,” “pending confirmation,” “synced,” “skipped” and “failed” separately so an accepted webhook cannot masquerade as a completed sync.
Preserve a later unsubscribe
Reprocessing an old signup must not override a newer opt-out. Compare the event time and current subscription authority before updating the destination. An absent checkbox or an unrecognized value must not become a new opt-in. A new form submission alone must not unblock or resubscribe someone who opted out; Brevo treats blocklisting as a separate subscription status.
Be careful with identity changes too. Brevo’s update documentation warns that changing a blocklisted contact’s email can remove the blocklisting and resubscribe that contact. Treat an email-address change as a separate reviewed operation, rather than ordinary field mapping.
For a currently subscribed contact, updating a matching record can avoid another record. Still deduplicate the event itself: one contact can receive two messages even when no duplicate contact exists.
Run these six acceptance checks
| Test | Expected result |
|---|---|
| New valid signup | Pending until confirmation; no marketing before it |
| Same submission delivered twice | One processing outcome; no duplicate confirmation |
| Missing or ambiguous marketing choice | No subscription inferred |
| Old signup replayed after an unsubscribe | The later opt-out remains effective |
| Brevo temporarily unavailable | Visible retryable failure; no false success |
| Company omitted on a later submission | Existing company remains unless clearing it was intentional |
Run these against an isolated test list with addresses you control. Check both systems and the actual received messages. A green automation step alone is insufficient evidence.
Where Tajo fits
Tajo is in early access. Bring the source form, destination list, field map and the six expected outcomes to your integration review. Confirm that the chosen flow supports them before enabling it.
To compare a native form, an automation service and custom code, use the Brevo connector guide.
For a store rather than a website form, use the Shopify-to-Brevo setup guide. For a custom implementation, the Brevo API guide provides additional context.
Tell us which systems need to connect. Start with one form that survives a retry.
Frequently Asked Questions
What is the simplest way to connect Webflow to Brevo?
For a newsletter form, embed a Brevo sign-up form and enable double confirmation. Keep a native Webflow form when you need its submission records or custom routing, then use an automation service or a server-side integration.
Does creating a Brevo contact confirm their subscription?
No. A regular contact create or update call does not complete double opt-in. Use a confirmation flow and add a new subscriber to the marketing audience only after confirmation.
How do I stop retries from creating duplicates?
Record the Webflow submission ID and the processing result. Replaying that submission should not repeat its side effects. For an already confirmed contact, update the matching record rather than creating a second identity.