Resources · n8n integration

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

Why automate

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.

Connect

How do you connect Brevo to n8n?

  1. 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.

  2. 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.

  3. 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.

Triggers

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.*1
  • blocked.
    • blocked
click.*1
  • click.
    • click
deferred.*1
  • deferred.
    • deferred
delivered.*1
  • delivered.
    • delivered
hard.*1
    invalid.*1
    • invalid.
      • invalid
    opened.*1
    • opened.
      • opened
    request.*1
    • request.
      • request
    soft.*1
      spam.*1
      • spam.
        • spam
      unique.*1
        unsubscribed.*1
        • unsubscribed.
          • unsubscribed

        Configuration notes

        01Set Up the Brevo TriggerTwo parameters configure the Brevo Trigger, and both matter more than they look.

        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.
        When to use it
        whenever the starting point is something Brevo observed about an email rather than something your own system did. The node documentation does not state the mechanism behind the trigger, so the honest rule is the simple one: the workflow has to be active for the trigger to listen, and a deactivated workflow hears nothing at all. Version 1 of the trigger covers 12 events, and picking only the two or three you act on keeps executions readable.
        02Email Sent, Delivered and DeferredDelivery has three checkpoints, and each one answers a different question about the same message.

        Delivery has three checkpoints, and each one answers a different question about the same message.

        Key parameters

        • Trigger On: tick request for Email Sent, which fires when the transactional email is sent, delivered for Email Delivered, which fires when it reaches the inbox, and deferred for Email Deferred, which fires when the receiving server postpones it.
        Use cases
        a logistics team writes every 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 ClickedEngagement arrives in three flavors, and confusing two of them inflates every report built on top.

        Engagement arrives in three flavors, and confusing two of them inflates every report built on top.

        Key parameters

        • Trigger On: opened fires when the transactional email is opened, uniqueOpened when it is opened for the first time by that recipient, and click when a link inside it is clicked.
        When to use it
        pick 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 InvalidFour events report that the message did not land, and the right reaction differs for each.

        Four events report that the message did not land, and the right reaction differs for each.

        Key parameters

        • Trigger On: hardBounce for a hard bounce, softBounce for a soft bounce, blocked when the transactional email is blocked, and invalid when the address is invalid.
        Use cases
        a hard bounce or an invalid address is permanent, so the workflow marks the contact with 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 UnsubscribedA complaint and an opt-out both end the conversation, and both need to be respected everywhere at once.

        A complaint and an opt-out both end the conversation, and both need to be respected everywhere at once.

        Key parameters

        • Trigger On: spam fires when a transactional email is marked as spam, unsubscribed when the recipient unsubscribes.
        When to use it
        these two are the events to wire first, before any of the engagement ones. The contact who unsubscribed in Brevo is often still active in a CRM, a spreadsheet and an ads audience, and the workflow is what keeps those in step. A spam complaint deserves more than a flag: log it, look at what was sent, and treat a cluster of them as a problem with the campaign rather than with the recipients. These two are also the cheapest insurance against a deliverability problem that builds up quietly over months.
        Actions

        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.

        Resources × operations matrix
        ResourceCreateGetGet ManyUpdateDeleteSendSend TemplateCreate or Update
        Contact✓✓✓✓✓✓
        Contact Attribute✓✓✓✓
        Email✓✓
        Sender✓✓✓

        Contact

        6 operations
        01

        Create a contact

        contact.create

        What 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.com shape 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.
        Use cases
        a webinar signup lands in Brevo with first name and company already filled, ready for the sequence that follows.
        02

        Upsert a contact

        contact.upsert

        What 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.
        Use cases
        a daily sync from a spreadsheet where some rows are new customers and some are edits to old ones.
        03

        Delete a contact

        contact.delete

        What 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.
        Use cases
        an erasure request from a customer, handled end to end by a workflow that also clears the same contact from the tools downstream.
        04

        Get a contact

        contact.get

        What 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.
        Use cases
        a click event arrives with an address and nothing else, so the workflow fetches the contact to find out which plan that person is on before deciding who gets notified.
        05

        Get many contacts

        contact.getAll

        What 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.SSSZ format.
        Use cases
        a nightly incremental export that uses Modified Since so the workflow only carries what changed.
        06

        Update a contact

        contact.update

        What 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.
        Use cases
        a bounce event flips a deliverability attribute to false, so the next campaign skips that address without anyone reviewing a list by hand.

        Contact Attribute

        4 operations
        07

        Create an attribute

        attribute.create

        What 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, category or global.
        • Name: required, the attribute name.
        • Type: required, text, date, float or boolean.
        • Value: required, the value of the attribute.
        Use cases
        a setup workflow that prepares a fresh Brevo account with the attributes a template expects.
        08

        Update an attribute

        attribute.update

        What 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, category or global.
        • 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.
        Use cases
        a calculated attribute whose formula changes when the pricing model does.
        09

        Delete an attribute

        attribute.delete

        What 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, category and global. The five categories are all available here, unlike on the update operation.
        • Name: the attribute to remove.
        Use cases
        retiring a field left over from an old tool after a migration, once nothing in the templates references it any more.
        10

        Get many attributes

        attribute.getAll

        What 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.
        Use cases
        a guard at the top of an import: fetch the attributes, compare them with the columns of the incoming file, and stop the run with a clear message when a column has no matching attribute rather than losing the data silently.

        Email

        2 operations
        11

        Send a transactional email

        email.send

        What 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.
        Use cases
        an internal alert whose wording changes with the workflow, not worth a template.
        12

        Send an email with an existing Template

        email.sendTemplate

        What 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.
        Use cases
        an order confirmation where marketing owns the design and the workflow owns the values.

        Sender

        3 operations
        13

        Create a sender

        sender.create

        What 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.com shape.
        Use cases
        an agency spinning up a new client workspace creates the client's sender from the same workflow that seeds the attributes, so nobody sends the first campaign from a leftover address.
        14

        Delete a sender

        sender.delete

        What 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.
        Use cases
        an offboarding routine that clears the departing employee's personal sender while the shared one stays untouched.
        15

        Get many senders

        sender.getAll

        What 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.
        Use cases
        a monthly audit that lists the senders and compares them with the addresses still in use, so the account does not accumulate identities nobody recognizes. The same list feeds a dropdown when a workflow lets a human pick who a campaign goes out as.
        Need help

        Need help automating Brevo with n8n?

        A person reads every message.

        FAQ

        Brevo and n8n: frequent questions

        01Is the Brevo n8n integration free?
        Yes, on the n8n side. The Brevo node and the Brevo Trigger ship with n8n, so there is nothing to install and no extra cost, whether you run n8n Cloud, the hosted offer, or your own instance under the Community Edition and its Sustainable Use license. A workflow behaves the same in both places, which means you can build on a laptop and move to Cloud without rewriting anything. What a Brevo account itself costs is a separate matter that this page does not cover. The only setup effort is the credential: one API key, saved once, reused by both nodes in every workflow you build afterwards.
        02What credentials do you need to connect Brevo to n8n?
        One API key, and nothing else. The Brevo credential in n8n supports a single authentication method and asks for a single field, API Key. The prerequisite is a Brevo developer account; the key itself is generated by following Brevo's API quick start documentation. Save it once under the Credentials menu and it covers both the Brevo node and the Brevo Trigger, so the trigger needs no separate setup. There is no OAuth flow to approve, no scope list to pick through and no redirect URL to register. When the key is rotated, editing that one credential updates every workflow that borrows it.
        03What are the limits of the Brevo node in n8n?
        The node covers 15 operations on 4 resources: contacts, contact attributes, transactional emails and senders. Anything outside that, contact lists, marketing campaigns, SMS or reporting, is not part of the node. The HTTP Request node closes the gap: it calls any Brevo endpoint and reuses the same credential through predefined authentication, so the key stays in one place. On the read operations, watch Return All. Left off, the node stops at Limit and a workflow that looks complete is quietly working on a slice of the data. Turn it on for exports, leave it off for spot checks.
        04Does the Brevo Trigger react in real time?
        That cannot be stated honestly, because the mechanism behind this trigger is not documented on the node. What is certain: the Brevo Trigger listens to the 12 events you tick under Trigger On, version 1 of the node, and it only listens while the workflow is active. Deactivate the workflow and nothing reaches the canvas. So build for it rather than around it: keep the events you actually act on, log what arrives, and pair the trigger with a scheduled read through Get Many Contacts when a process must not miss anything. Test with a real send before trusting it in production.
        05n8n or Make for Brevo?
        It depends on where you want the workflow to run and how you want to pay for it. Make is hosted by Make, with no self-hosting option, and billed per operation, so a workflow that loops over thousands of contacts has a cost that grows with the volume. n8n runs on Cloud or on your own server, which matters when contact data should not leave your infrastructure. On the Brevo side both reach the same API. The real deciding factors are hosting, control over the data, the cost model and which visual logic your team reads faster. Try a single workflow on both before committing.