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
-
Get your API key:
- Log in to Brevo → Settings → SMTP & API → API Keys
- Copy the v3 API key (looks like
xkeysib-...)
-
Test connectivity in n8n:
- Add a Brevo Node to your workflow
- Select
Get Accountoperation - 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:
- Create a contact in Brevo
- Assign them to a "Lead Nurture" automation sequence
- 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]
Brevo Node Setup:
-
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 }}
-
- Operation:
-
Assign to Automation:
- Operation:
Assign to CampaignorAdd to List - List ID:
123(find your automation list ID in Brevo → Automations) - Email:
{{ $json.email }}
- Operation:
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:
- Tag the customer in Brevo based on purchase value
- Trigger a "Premium Upsell" campaign for high-value buyers
- 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]
Implementation:
-
Brevo: Get Contact
- Email:
{{ $json.customer_email }} - Operation:
Get Contact by Email
- Email:
-
Switch Node:
- Condition:
{{ $json.amount }} > 100
- Condition:
-
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)
-
Brevo: Update Contact → Add attribute
-
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]
Brevo Node Setup:
-
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)
- Operation:
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>
`
}];
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:
- Pull open/click data from Brevo
- Tag high-engagement contacts in your CRM
- 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]
Brevo Node Setup:
-
Get Campaign Stats:
- Operation:
Get Campaign ReportorGet Campaign Stats - Campaign ID:
123(your campaign ID) - Returns: opens, clicks, bounces, unsubscribes
- Operation:
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
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.
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.
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.
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.
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
- n8n Brevo Node Docs — full API reference
- Brevo API Docs — comprehensive guide
- Email Deliverability 101 — sender reputation, SPF/DKIM setup
Next Steps
-
Set up your first Brevo node — test
Get Accountoperation (takes 2 min) - Build Pattern 1 — form submission → contact creation (takes 15 min)
- Extend with automations — add email triggers and campaigns (takes 30 min)
- 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
- n8n Mailchimp Integration: Sync Contacts and Trigger Automations
- n8n Google Sheets: Your Email Database
- n8n Stripe Webhooks: Charge on Purchase, Refund on Return
- n8n HubSpot Integration: Lead Qualification and Follow-up Automation
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)