DEV Community

Pirate Prentice
Pirate Prentice

Posted on

n8n Brevo Integration: Automate Email Campaigns, Triggers, and Lead Nurturing

When you're scaling an SMB, email isn't just a channel — it's the backbone of retention. But manual email management drowns you. Brevo (formerly Sendinblue) handles the send, but n8n bridges the gap: sync contacts from your form, trigger campaigns based on workflows, track opens/clicks, and nurture leads without leaving your automation.

Let me show you how to build this.

The Brevo + n8n Foundation

Brevo (the platform):

  • Contacts API — create/update/delete contacts; manage lists
  • Campaigns API — send one-time campaigns or trigger based on data
  • Automations API — create buyer journeys; assign contacts to sequences
  • Tracking API — read opens, clicks, bounces (helpful for segmentation)

n8n (the connector):

  • Brevo Node — native n8n integration with full API coverage
  • HTTP Request Node — fallback for advanced Brevo API endpoints not yet in the native node

Getting Started: Brevo API Setup

  1. Get your API key:

    • Log in to Brevo → Settings → SMTP & API → API Keys
    • Copy the v3 API key (looks like xkeysib-...)
  2. Test connectivity in n8n:

    • Add a Brevo Node to your workflow
    • Select Get Account operation
    • Paste your API key into the credentials field
    • Run the node — you should see your account details (email, name, subdomain)

If the node doesn't exist in your n8n version, use the HTTP Request Node as a fallback:

  • URL: https://api.brevo.com/v3/account
  • Headers: api-key: YOUR_KEY
  • Method: GET

Pattern 1: Form Submission → Brevo Contact + Auto-Email

Real scenario: A Typeform lead capture form (or Webflow form) submits data. You want to:

  1. Create a contact in Brevo
  2. Assign them to a "Lead Nurture" automation sequence
  3. Trigger a welcome email

Workflow:

[Webhook Trigger] 
  ↓ (receives form submission: name, email, industry, company size)
[Brevo: Create/Update Contact]
  ↓ (create contact if new; update if exists)
[Brevo: Assign to Campaign or Automation]
  ↓ (add contact to "SMB Nurture" journey)
[End]
Enter fullscreen mode Exit fullscreen mode

Brevo Node Setup:

  1. Create/Update Contact:

    • Operation: Create/Update Contact
    • Email: {{ $json.email }}
    • First Name: {{ $json.firstName }}
    • Last Name: {{ $json.lastName }}
    • Custom Attributes (if enabled):
      • COMPANY_SIZE: {{ $json.companySize }}
      • INDUSTRY: {{ $json.industry }}
  2. Assign to Automation:

    • Operation: Assign to Campaign or Add to List
    • List ID: 123 (find your automation list ID in Brevo → Automations)
    • Email: {{ $json.email }}

Gotcha: Brevo automations require the contact to be added to a list first. If you're using buyer journeys, add them to the trigger list, then the automation will take over.

Pattern 2: E-Commerce Order → Brevo Segmentation → Trigger Upsell Campaign

Real scenario: Stripe payment webhook fires. You want to:

  1. Tag the customer in Brevo based on purchase value
  2. Trigger a "Premium Upsell" campaign for high-value buyers
  3. Skip the upsell for low-value buyers (send them a "thank you" email instead)

Workflow:

[Stripe Payment Webhook]
  ↓ (receives event: amount, customer_email)
[Brevo: Get Contact]
  ↓ (retrieve existing contact)
[Switch Node: Branch by Amount]
  ├─ If amount > $100 → [Brevo: Update Contact Tag] → "high_value_buyer"
  │                    → [Brevo: Add to Upsell Campaign]
  └─ Else → [Brevo: Add to Thank You Campaign]
[End]
Enter fullscreen mode Exit fullscreen mode

Implementation:

  1. Brevo: Get Contact

    • Email: {{ $json.customer_email }}
    • Operation: Get Contact by Email
  2. Switch Node:

    • Condition: {{ $json.amount }} > 100
  3. High-Value Path:

    • Brevo: Update Contact → Add attribute LIFETIME_VALUE = {{ $json.amount }}
    • Brevo: Add to List → "VIP High-Value Buyers" list (triggers your upsell automation)
  4. Standard Path:

    • Brevo: Add to List → "Standard Thank You" list

Gotcha: Brevo's Tags are different from Attributes. Tags are free-text labels (good for segments). Attributes are structured fields (good for personalization). Use attributes for data you'll reference in templates; use tags for quick segmentation.

Pattern 3: Daily Lead Digest → Brevo Campaigns → Sales Team

Real scenario: You have 50+ leads in your database (Airtable, Pipedrive, Zapier table). Every morning, you want to send your sales team a digest email of high-intent leads (e.g., from the last 24h, in specific industries).

Workflow:

[Schedule Trigger] (8 AM daily)
  ↓
[Airtable: Read Records] (filter: created_date > 24h ago, industry = "e-commerce")
  ↓
[Code Node: Format HTML Email Body]
  ↓ (loop over leads, build a 2-column table with name, email, company, budget)
[Brevo: Send Campaign]
  ↓ (send to your sales team list)
[End]
Enter fullscreen mode Exit fullscreen mode

Brevo Node Setup:

  1. Send Campaign:
    • Operation: Send Transactional Email (or create a one-time campaign first, then send)
    • Recipient Email: sales@mycompany.com
    • Subject: Daily Lead Digest — {{ new Date().toLocaleDateString() }}
    • HTML Body: {{ $json.emailHTML }} (from Code Node output)

Code Node Example:

let leads = $json.airtableRecords; // Array from Airtable node
let rows = leads.map(lead => `
  <tr>
    <td>${lead.fields.name}</td>
    <td>${lead.fields.email}</td>
    <td>${lead.fields.company}</td>
    <td>$${lead.fields.budget}</td>
  </tr>
`).join('');

return [{
  emailHTML: `
    <table border="1" cellpadding="10">
      <tr><th>Name</th><th>Email</th><th>Company</th><th>Budget</th></tr>
      ${rows}
    </table>
  `
}];
Enter fullscreen mode Exit fullscreen mode

Gotcha: Brevo's Send Campaign operation sends one email per recipient. For a digest to your entire sales team, either (a) send to a single team email address, or (b) loop the Brevo node once per team member, or (c) use Brevo's "campaign" feature to create a one-time campaign and schedule it.

Pattern 4: Brevo Open/Click Tracking → Segment Engaged Leads

Real scenario: You sent a campaign to 500 SMBs about your $99 automation audit. Some opened it, some clicked the link, some did nothing. You want to:

  1. Pull open/click data from Brevo
  2. Tag high-engagement contacts in your CRM
  3. Prioritize follow-up

Workflow:

[Schedule Trigger] (daily, 9 PM)
  ↓
[Brevo: Get Campaign Stats] (fetch opens/clicks for last 24h)
  ↓
[Code Node: Extract Engaged Contacts]
  ↓ (parse opens/clicks, build email list of openers + clickers)
[Brevo: Add to List] (add engaged contacts to "Hot Leads" list)
  ↓
[End]
Enter fullscreen mode Exit fullscreen mode

Brevo Node Setup:

  1. Get Campaign Stats:
    • Operation: Get Campaign Report or Get Campaign Stats
    • Campaign ID: 123 (your campaign ID)
    • Returns: opens, clicks, bounces, unsubscribes

Note: Brevo's API returns aggregate stats, not individual contact data. For granular tracking (which email addresses opened), use Brevo's native analytics dashboard or a more advanced integration.

Critical Gotchas

  1. Double Opt-In Requirement: If your Brevo account has double opt-in enabled, new contacts will receive a confirmation email before being added to lists. Your automation will proceed, but they won't appear in campaigns until confirmed.

  2. List vs. Automation Segmentation: Lists are static; automations are dynamic. Add a contact to a list first, then the automation triggers based on list membership. Don't rely on attributes alone to trigger automations.

  3. API Key Rotation: Brevo rotates API keys periodically. If your workflow starts failing with 401 errors, regenerate your API key in the Brevo dashboard and update n8n credentials.

  4. Transactional vs. Marketing Emails: Brevo separates transactional (receipts, confirmations) from marketing (campaigns, newsletters). Transactional emails bypass unsubscribe checks. Use the correct operation for your use case.

  5. Rate Limits: Brevo has a 300 requests per minute rate limit on the API. If you're mass-updating contacts or sending hundreds of campaigns, add delays or batch operations.

Why This Matters for SMBs

Email automation is the lowest-cost, highest-ROI channel for SMBs. A roofing company I know automated their follow-up sequences and picked up $4K/month in new revenue without hiring anyone. A bookkeeping firm cut manual email time by 8 hours/week.

Brevo + n8n gives you:

  • No vendor lock-in — self-hosted n8n, portable workflows
  • Unlimited customization — not trapped by Zapier's pre-built templates
  • Contact ownership — your data lives in Brevo (you own it), not a third-party platform
  • Real-time automation — webhooks trigger instantly, no 15-min delays

Free Resources

Next Steps

  1. Set up your first Brevo node — test Get Account operation (takes 2 min)
  2. Build Pattern 1 — form submission → contact creation (takes 15 min)
  3. Extend with automations — add email triggers and campaigns (takes 30 min)
  4. Monitor and iterate — track open rates, clicks, and adjust your sequences

Need a pre-built workflow for this? Check the link in my profile for my $99 done-for-you automation audit and templates.


Related Articles

Key Takeaway: Brevo + n8n bridges the gap between your forms and your email database. Once set up, it runs hands-off. Add it to your stack today.


Lead Magnet

Get my n8n Workflow Starter Pack — 12 pre-built workflows for Stripe, HubSpot, Airtable, and more. Ready to copy-paste into your n8n instance: https://pirateprentice.gumroad.com/l/sxcoe?via=devto-article-brevo

Want a custom $99 workflow build tailored to your business? Book an automation audit.

Top comments (0)