How to Add New Subscribers to Brevo (Sendinblue) with n8n — listIds Explained
Use this guide to add new subscribers to Brevo (formerly Sendinblue) from n8n with a single webhook. In short: capture the signup event in n8n, send the contact data to the Brevo/Sendinblue node, and pass the listIds field (an array of list IDs) so the contact is added to one or more lists immediately.
This page includes a copy‑ready n8n node example, common listIds pitfalls, troubleshooting tips, and quick tests you can run in under 10 minutes to fix low search visibility for queries like n8n Brevo listids and n8n Brevo node listIds.
How the n8n → Brevo flow works (quick overview)
At a high level the workflow is: a signup trigger → capture subscriber fields → map required properties (email, name) → call Brevo node to create or update contact → include listIds to place the contact on one or more lists.
- Trigger: form, webhook, or CRM event
- Format: ensure email is normalized (lowercase, trimmed)
- Brevo node: resource = contact, operation = create/update
- listIds: send as an array of integers (e.g., [2, 5]) or per-node accepted format
Step-by-step: Build the “Add subscriber” workflow in n8n
1. Trigger: Webhook or Form
Create an n8n webhook node that listens for new signups. Use your form provider (Typeform, Webflow, Stripe Checkout, or your own frontend) to POST the subscriber payload to this webhook.
2. Normalize fields
Add a Set or Function node to normalize email and prepare payload keys the Brevo node expects (email, attributes, listIds). This prevents duplicates caused by case differences or whitespace.
3. Brevo / Sendinblue node: create or update contact
Use the Brevo (Sendinblue) node in n8n. Choose resource contact and operation createOrUpdate (or create/update depending on your node version). Map email and attributes, and set listIds to the list IDs you want the user added to.
Example: if your onboarding list has ID 2 and a newsletter list is 5, pass both so the new user is added to both lists.
{
"nodes": [
{
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"parameters": { "path": "signup-webhook", "httpMethod": "POST" }
},
{
"name": "Set",
"type": "n8n-nodes-base.set",
"parameters": {
"values": {
"email": "={{ $json["email"].toLowerCase().trim() }}",
"FIRSTNAME": "={{ $json["firstName"] || $json["name"] }}",
"listIds": [2, 5]
}
}
},
{
"name": "Brevo",
"type": "n8n-nodes-builtin.brevo",
"parameters": {
"resource": "contact",
"operation": "createOrUpdate",
"email": "={{ $json.email }}",
"attributes": { "FIRSTNAME": "={{ $json.FIRSTNAME }}" },
"listIds": "={{ $json.listIds }}"
}
}
],
"connections": { "Webhook": { "main": [[{ "node": "Set" }]] }, "Set": { "main": [[{ "node": "Brevo" }]] } }
}
How to pass multiple list IDs (common question)
Most Brevo/Sendinblue APIs expect listIds as an array of integers (e.g., [2,5]). Some n8n node versions accept a comma-separated string (“2,5”). Always check the node UI. If in doubt, send an array — it is the API-native format and prevents parsing issues.
Troubleshooting: Why listIds may not work
- Wrong data type: listIds sent as string when the node expects an array — convert with a Set node.
- Invalid IDs: verify the list exists in Brevo and use numeric IDs (not names).
- Authentication errors: check API key, OAuth scopes, and that the credential is stored securely in n8n.
- Duplicate contacts: use createOrUpdate to avoid duplicates and enable deduping by email.
Testing and verification
After wiring the workflow, test with a sandbox email and inspect the Brevo dashboard to confirm the contact appears in the target list(s). Use n8n’s execution log to review the request/response payloads and identify mapping errors or API responses with error details.
Best practices to improve deliverability and avoid failures
- Authenticate sending domain (SPF, DKIM) in Brevo before mass sends.
- Normalize and validate emails at capture time to reduce bounces.
- Use rate limiting / delays if you batch-add many subscribers to avoid API throttling.
- Log API responses and create alerts for failed contact creations.
Internal links and further reading
Related guides to help extend this workflow:
- How to build your first n8n workflow (beginner tutorial)
- n8n API integration services
- n8n vs Zapier vs Make — when to use a workflow platform
- Automate Zendesk ticket creation with n8n (example)
FAQ
What is the Brevo “listIds” parameter?
listIds tells Brevo which contact list(s) to add the subscriber to. It is typically an array of numeric list IDs (for example, [2,5]). Use the Brevo dashboard to confirm the correct list IDs before sending.
How do I pass multiple list IDs in n8n?
Pass an array like [2,5] from a Set node or JSON body. If a node expects a string, use a comma-separated value “2,5” — but prefer arrays where possible to avoid parsing issues.
Why isn’t my contact added to the list?
Check the API response in n8n execution logs. Common causes include invalid list ID, missing email, or authentication errors. Confirm credentials and the Brevo list configuration.
Quick checklist before you deploy
- Validate email format at capture
- Use createOrUpdate to dedupe by email
- Pass listIds as an array of integers
- Test with a sandbox contact and verify in Brevo dashboard
- Monitor n8n execution logs for API errors
If you want, I can save this as a draft on the post and include a short meta title and description optimized for queries like n8n brevo listids. Ready for me to save the draft to Post ID 2983?