Sendy n8n integrationAutomate Sendy with n8n.
Can a self-hosted newsletter tool run inside an automated workflow? The Sendy n8n integration covers 6 operations across 2 resources, campaigns and subscribers, so signups, unsubscribes and list counts stop being manual work. Sendy ships no trigger, the node that starts a workflow, so a schedule does it.
Verified Trustpilot reviews · AI, automation & growth agency
What does the Sendy n8n integration actually cover?
Sendy runs on a server you host yourself, and the n8n node talks to its API from any workflow. Six operations, spread over two resources, Campaign and Subscriber: create a campaign, add someone to a list, count a list, read a status, unsubscribe, delete. Point n8n at your Sendy URL once, save the API key, and list management stops being an export-and-paste job.
Take a lead magnet. Someone fills a form, the row lands in Google Sheets, and a Schedule Trigger picks up the new rows every morning. The node runs subscriber.add with the Email and the List ID, and the person is subscribed before anyone opens a browser tab. Switch GDPR on when the signup comes from the EU.
Second one: the newsletter itself. A workflow gathers the week's articles, assembles the HTML, then campaign.create writes it into Sendy under a Brand ID. Leave Send Campaign off and what you get is a draft to proofread, while a message to Slack tells the editor it is waiting for a read.
Third: list hygiene. A request to stop receiving emails arrives in Gmail, the workflow reads the address, calls subscriber.status to see where it stands, then subscriber.remove to unsubscribe it. Nobody logs into Sendy, and the reply goes out in the same run.
The node stops at what it exposes: 6 operations, 2 resources. For anything else in the Sendy API, the HTTP Request node calls the endpoint directly and reuses the same credential through predefined authentication, so the key still lives in one place and you only build that one step by hand.
Two practical points before you start. There is no Sendy trigger, so every workflow begins elsewhere, most often a Schedule Trigger or an n8n Webhook, which is a URL another service calls to wake the workflow up. And List ID is not the list name: Sendy shows a hashed identifier under View all lists, and that is the value the node wants. For the wider picture on the platform itself, the n8n review and the n8n training go further than this page does.
How do you connect Sendy to n8n?
- 01
Grab the API key inside Sendy
Sendy has to be hosted somewhere before any of this works, so start from a running install. Open your user profile, go to Settings, and copy the value shown under Your API Key. That single key authenticates every call the node makes, which is why it belongs in a credential and never in a field of the workflow itself.
- 02
Create the Sendy credential in n8n
In n8n, open the Credentials menu and add a Sendy credential. It asks for two things: a URL, the URL of your Sendy application, meaning the address where your own install answers, and an API Key, the value you just copied. A credential is saved once and reused by every workflow in the instance, so this step happens a single time.
- 03
Select it on the node and run a test
Drop the Sendy node into a workflow. Its credential dropdown lists what you saved, so pick it, choose the Subscriber resource and the Count operation, paste a List ID, and run the node alone. A number coming back means the URL and the key are both correct. Nothing coming back points at the connection, not at the logic around it.
What can the Sendy node do?
The Sendy node exposes 6 operations across 2 resources. For each one: the node as you configure it in n8n, the required fields, and our field notes.
Operations index
Campaign
1 operationCreate a campaign
campaign.createWhat you see in n8n
Notes & use cases
Writes a campaign into Sendy and, if you ask for it, sends it instead of leaving a draft behind.
Key parameters
- Brand ID: the only required field, the brand the campaign belongs to, often
{{ $json.brandId }}when an earlier node supplies it. - Subject and HTML Text: the subject line and the HTML version of the email.
- List IDs: which lists receive it, single or comma-separated, with Exclude List IDs in the same format for the ones to leave out.
- Send Campaign: false by default, so the run creates a draft; set it to true to send as well.
Subscriber
5 operationsAdd a subscriber
subscriber.addWhat you see in n8n
Notes & use cases
Puts an address on one list, which is the operation behind every automated signup.
Key parameters
- Email: the address to subscribe, usually
{{ $json.email }}from the form or row that triggered the run. - List ID: the list to subscribe to, the encrypted and hashed identifier found under View all lists in the column named ID.
- Name and Country: the person's name and a two letter country code, useful when the campaign is segmented later.
- GDPR: signs EU users up in a GDPR compliant manner; Silent bypasses double opt-in and treats the signup as single opt-in.
Count a subscriber
subscriber.countWhat you see in n8n
Notes & use cases
Returns how many subscribers a list currently holds, as a value the rest of the workflow can compare or store.
Key parameters
- List ID: the list to count, that same encrypted and hashed identifier from View all lists. Point it at the wrong list and the number is still valid, just about something else.
Delete a subscriber
subscriber.deleteWhat you see in n8n
Notes & use cases
Removes the subscriber record from a list entirely. The address is gone, not flagged, which makes this the operation for erasure requests.
Key parameters
- Email: the address to delete, matched exactly as it was stored.
- List ID: the list holding the record, since deletion applies to one list at a time.
Remove a subscriber
subscriber.removeWhat you see in n8n
Notes & use cases
Unsubscribes someone from a list without erasing the record, exactly what an unsubscribe link does when a reader clicks it.
Key parameters
- Email: the address to unsubscribe.
- List ID: the list it should stop receiving. Other lists carry on, so a reader can leave the newsletter and keep the product updates.
Get subscriber's status
subscriber.statusWhat you see in n8n
Notes & use cases
Reads back where an address stands on a list and returns the status, which gives the workflow something to branch on.
Key parameters
- Email: the address to look up.
- List ID: the list to check it against, because status is per list and not global.
Need help automating Sendy with n8n?
A person reads every message.


