Brevo n8n integrationAutomate Brevo with n8n.
Every transactional email leaves a trace, and n8n can read it. The Brevo n8n integration exposes 15 operations across 4 resources: contacts, contact attributes, emails and senders. The Brevo Trigger listens to 12 email events. It fits teams that run their sending from a workflow.
Verified Trustpilot reviews · AI, automation & growth agency
What does the Brevo n8n integration actually do?
Two nodes ship with n8n for Brevo. The Brevo node calls the Brevo API for you: 15 operations spread over contacts, contact attributes, transactional emails and senders. The Brevo Trigger starts a workflow when Brevo reports something about an email, across 12 events. A trigger is simply the node that decides when a workflow runs, and the credential you create for one of the two works for the other.
Three shapes of workflow cover most of what gets built around this node.
The first is sending. A workflow picks up an order, a signup or a support ticket, then email.sendTemplate fires the Brevo template that matches, with Template Parameters filled from the incoming item. Next to a plain mailbox node such as Gmail, the difference is where the design lives: the layout stays in Brevo, n8n only supplies the values.
The second is list hygiene. contact.upsert writes the contact whether it exists yet or not, so a website form, a Google Sheets row and a CRM record all land as one clean record instead of three near duplicates. attribute.create declares the fields those records need before anything tries to fill them.
The third is reaction. The 12 trigger events say what happened to each transactional email, and the workflow answers. A hard bounce clears the address, a click bumps a score, an unsubscribe propagates to whatever else holds the same contact, such as ActiveCampaign or SendGrid.
Now the edges. The node covers 4 resources and nothing else: contact lists, marketing campaigns, SMS and reporting are outside it. When one of those comes up, the HTTP Request node calls any Brevo endpoint directly and reuses the same credential through predefined authentication, so the API key is never copied twice. That fallback is the normal way to extend the node, not a workaround.
One more thing worth knowing before building: the mechanism behind the Brevo Trigger is not documented, so plan for the workflow to be active for it to listen at all, and keep a manual path for replays. If n8n is the new part of the equation rather than Brevo, the n8n training covers credentials, expressions and error handling in the same order this page uses them.
How do you connect Brevo to n8n?
- 01
Generate the API key in Brevo
Start from a Brevo developer account, which is the prerequisite listed in the n8n credential documentation. From there, create a new key by following Brevo's API quick start guide. That key is the only secret the integration needs: the Brevo credential in n8n supports one authentication method, API key, with no OAuth flow, no scope picker and no redirect URL to register anywhere.
- 02
Store the key as an n8n credential
In n8n, open the Credentials menu and create a Brevo credential. A credential is a saved set of secrets that nodes borrow at runtime, so the key lives in one place rather than inside each workflow. The form asks for a single field, API Key: paste the value generated in Brevo, save, and give the credential a name you will recognize in a dropdown six months from now.
- 03
Pick the credential in the node
Drop a Brevo node on the canvas, or a Brevo Trigger, and select the credential you just saved from its list. The same entry serves both nodes and every future workflow, so this step never has to be repeated. On the node, choose a resource then an operation; on the trigger, pick the Resource and tick the events under Trigger On, then activate the workflow.
What starts a workflow from Brevo ?
Brevo Trigger is the node that starts a workflow when something happens in Brevo. It covers 12 events, listed below by family. Activate the workflow and every event it receives becomes one execution.
What you see in n8n
Every event, by family
One row per object, one chip per action. The event to tick in the node is object.action; hover a chip to read exactly when it fires.
blocked.*1blocked.blocked
click.*1click.click
deferred.*1deferred.deferred
delivered.*1delivered.delivered
hard.*1invalid.*1invalid.invalid
opened.*1opened.opened
request.*1request.request
soft.*1spam.*1spam.spam
unique.*1unsubscribed.*1unsubscribed.unsubscribed
Configuration notes
01Set Up the Brevo Trigger
Two parameters configure the Brevo Trigger, and both matter more than they look.
Key parameters
- Resource: required, and it decides what the trigger watches before any event is picked.
- Trigger On: the list of events the workflow reacts to, ticked one by one. There is no wildcard entry, so an event nobody ticked never reaches the canvas, and adding one later means editing the trigger rather than the workflow after it.
02Email Sent, Delivered and Deferred
Delivery has three checkpoints, and each one answers a different question about the same message.
Key parameters
- Trigger On: tick
requestfor Email Sent, which fires when the transactional email is sent,deliveredfor Email Delivered, which fires when it reaches the inbox, anddeferredfor Email Deferred, which fires when the receiving server postpones it.
request event to a sheet, so the trail exists whatever the customer claims later. A deliverability review leans on deferred instead, because a message that keeps getting postponed points at the sending domain rather than at the recipient. Pairing sent and delivered in the same workflow also gives a simple gap check: anything sent that never showed up as delivered deserves a look.03Email Opened, Unique Open and Clicked
Engagement arrives in three flavors, and confusing two of them inflates every report built on top.
Key parameters
- Trigger On:
openedfires when the transactional email is opened,uniqueOpenedwhen it is opened for the first time by that recipient, andclickwhen a link inside it is clicked.
uniqueOpened to count people and opened to count reads, because one recipient reopening a receipt four times is one person, not four. Send click somewhere that acts on it: a lead scoring column, a follow-up sequence, a notification in Slack for the sales rep who owns the account. Clicks on a transactional email tend to signal intent, which makes them the most actionable of the three.04Hard Bounce, Soft-Bounce, Blocked and Invalid
Four events report that the message did not land, and the right reaction differs for each.
Key parameters
- Trigger On:
hardBouncefor a hard bounce,softBouncefor a soft bounce,blockedwhen the transactional email is blocked, andinvalidwhen the address is invalid.
contact.update and stops writing to it. A soft bounce is temporary and deserves a counter rather than a deletion: three in a row on the same address is a signal, one is noise. Blocked emails are worth routing to a human, because the cause usually sits on the sending side and no amount of retrying fixes it. Keeping the four events in one workflow, with a switch on the event name, saves maintaining four near identical flows.05Email Marked Spam and Unsubscribed
A complaint and an opt-out both end the conversation, and both need to be respected everywhere at once.
Key parameters
- Trigger On:
spamfires when a transactional email is marked as spam,unsubscribedwhen the recipient unsubscribes.
What can the Brevo node do?
The Brevo node exposes 15 operations across 4 resources. For each one: the node as you configure it in n8n, the required fields, and our field notes.
| Resource | Create | Get | Get Many | Update | Delete | Send | Send Template | Create or Update |
|---|---|---|---|---|---|---|---|---|
| Contact | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||
| Contact Attribute | ✓ | ✓ | ✓ | ✓ | ||||
| ✓ | ✓ | |||||||
| Sender | ✓ | ✓ | ✓ |
Operations index
Contact
6 operationsCreate a contact
contact.createWhat you see in n8n
Notes & use cases
Adds a contact to Brevo and returns the record that was just created. Nothing is marked required on this operation, so an empty call still goes through and leaves you with a contact that has no address attached.
Key parameters
- Email: the contact address, in the
name@email.comshape the field suggests, usually{{ $json.email }}when the address comes from a form or an earlier node. - Contact Attributes: the array of attributes added along with the contact, one name and one value per entry.
Upsert a contact
contact.upsertWhat you see in n8n
Notes & use cases
Looks for the address first, then creates the contact or updates the existing one. This is the operation that stops a list from filling with near duplicates when the same person submits two forms.
Key parameters
- Email: required here, unlike on Create. It identifies the contact, so an empty value blocks the execution of the node instead of writing an anonymous record.
- Contact Attributes: the array of attributes to update, applied whether the contact was created or already existed.
Delete a contact
contact.deleteWhat you see in n8n
Notes & use cases
Removes the contact from Brevo. There is no soft delete and no undo, so this belongs at the end of a branch that has already decided, not in the middle of a cleanup run.
Key parameters
- Contact Identifier: the email in urlencoded form, the numeric ID of the contact, or the value of its SMS attribute. Any of the three works, which is handy when the deletion request arrives with a phone number rather than an address.
Get a contact
contact.getWhat you see in n8n
Notes & use cases
Reads one contact and returns its attributes, which makes it the usual second node after a trigger that only hands over an address.
Key parameters
- Contact Identifier: required. Accepts the urlencoded email, the contact ID or its SMS attribute value, commonly written as an expression such as
{{ $json.email }}so the value follows the item through the workflow.
Get many contacts
contact.getAllWhat you see in n8n
Notes & use cases
Pulls a batch of contacts out of Brevo, one item per contact, for exports and audits rather than for single lookups.
Key parameters
- Return All: on, n8n walks the API pages until every contact is back. Off, Limit caps how many come through.
- Filters: narrows the set before it reaches the canvas.
- Sort: orders results by record creation, ascending or descending.
- Modified Since: keeps only contacts modified after a UTC date-time, urlencoded, in
YYYY-MM-DDTHH:mm:ss.SSSZformat.
Update a contact
contact.updateWhat you see in n8n
Notes & use cases
Changes attribute values on a contact that already exists, and fails rather than creating one if the identifier matches nothing. That strictness is the point: use it when the record must be there.
Key parameters
- Contact Identifier: required. The urlencoded email, the contact ID or the SMS attribute value.
- Attributes: the array of attributes to update, each with its name and its new value.
Contact Attribute
4 operationsCreate an attribute
attribute.createWhat you see in n8n
Notes & use cases
Declares a new contact attribute in the account, which is the field the contact operations will later fill. Four values are required, more than on any other operation of the node.
Key parameters
- Category: required, one of
normal,transactional,calculated,categoryorglobal. - Name: required, the attribute name.
- Type: required,
text,date,floatorboolean. - Value: required, the value of the attribute.
Update an attribute
attribute.updateWhat you see in n8n
Notes & use cases
Edits an attribute that already exists in the account. The interesting detail sits in the categories: only three of the five are offered here, so a normal or transactional attribute cannot be reshaped this way.
Key parameters
- Category:
calculated,categoryorglobal. - Name: the name of the existing attribute, which has to match exactly.
- Value: the value to update.
- Contact Attributes: under Update Fields, the list of values and labels the attribute can take.
Delete an attribute
attribute.deleteWhat you see in n8n
Notes & use cases
Drops an attribute from the contact model. Every contact loses that field, so it is worth exporting first and deleting second.
Key parameters
- Category: which family the attribute belongs to, among
normal,transactional,calculated,categoryandglobal. The five categories are all available here, unlike on the update operation. - Name: the attribute to remove.
Get many attributes
attribute.getAllWhat you see in n8n
Notes & use cases
Lists the attributes declared in the account, which is how a workflow checks what exists before trying to write into it.
Key parameters
- Return All: on, every attribute comes back across as many API pages as needed. Off, Limit sets the maximum number returned.
Send a transactional email
email.sendWhat you see in n8n
Notes & use cases
Sends a transactional email composed inside the node, so the content lives in the workflow rather than in Brevo.
Key parameters
- Sender and Receipients: both required, and an empty one stops the execution.
- Send HTML: switches the body between Text Content and HTML Content.
- Subject: the subject line.
- Receipients CC and Receipients BCC: extra recipients, under Additional Fields.
- Email Tags: labels a message for later retrieval, next to Attachments in the same collection.
Send an email with an existing Template
email.sendTemplateWhat you see in n8n
Notes & use cases
Uses a template designed in Brevo instead of HTML typed into n8n, which keeps the layout with the people who own the brand.
Key parameters
- Receipients: required, the only field the node insists on.
- Template ID: a dropdown fed by the account, so there is no ID to memorize.
- Template Parameters: under Additional Fields, the set of attributes that customize the template, typically expressions like
{{ $json.order_id }}. - Attachments and Email Tags: files to join and labels for retrieval.
Sender
3 operationsCreate a sender
sender.createWhat you see in n8n
Notes & use cases
Registers a sender in the account, the identity transactional emails will go out under. Both fields are required, which makes this the simplest operation of the node to get right.
Key parameters
- Name: required, the display name recipients see next to the address.
- Email: required, the sender address, in the
name@email.comshape.
Delete a sender
sender.deleteWhat you see in n8n
Notes & use cases
Removes a sender from the account. Anything still pointing at that identity has to be updated first, since the send operations name a sender explicitly.
Key parameters
- Sender ID: the ID of the sender to delete, not its address. Get Many Senders is the usual way to find that ID, often chained as
{{ $json.id }}straight into this field.
Get many senders
sender.getAllWhat you see in n8n
Notes & use cases
Returns the senders available in the account, with their IDs, which is what makes the delete operation practical.
Key parameters
- Return All: on, the node pages through the API until the full list is back. Off, Limit caps the number of senders returned.
Need help automating Brevo with n8n?
A person reads every message.
