- Home
- Resources
- Integrations
- Customer.io
Customer.io n8n integrationAutomate Customer.io with n8n.
Where does a click on a Customer.io email go once it has happened? A Customer.io n8n integration exposes 9 node operations across 4 resources: customers, events, campaigns, segments. The trigger listens to 32 events in 5 families. Built for teams that already run the messaging.
Verified Trustpilot reviews · AI, automation & growth agency
What does a Customer.io n8n integration actually give you?
A Customer.io n8n integration puts two things side by side: the profile data Customer.io holds about each person, and every other system a workflow touches. The node writes customers, tracks events, reads campaigns and moves people in and out of segments. The trigger works the other way round and reacts to what happens after a message goes out, so the reporting and the follow-up stop being manual steps.
Start with a signup. A form drops a row in Google Sheets, n8n picks it up, customer.upsert creates the profile with its email address, and segment.add puts the person in the onboarding segment so the campaign starts on its own. That is exactly the shape of the Customer.io template published on n8n.io as workflow 646, and it is the shortest route from a raw signup to a running sequence.
Now the other direction. The trigger fires on email.clicked, n8n filters on the campaign that sent the message, and the account owner gets a note in Slack while the interest is fresh. Same wiring with email.spammed: the profile leaves the nurture segment through segment.remove before the next send goes out.
Third pattern, reporting. A Schedule node runs early Monday, campaign.getAll lists the campaigns, campaign.getMetrics pulls the counts for each one, and the result lands in a sheet or in an inbox through Gmail. Nobody has to open a dashboard to know what last week did.
The node covers 4 resources and stops there. For anything else in the Customer.io API, the HTTP Request node calls the endpoint directly and reuses the same credential through predefined authentication, which keeps the keys in one place. Worth knowing before you plan a workflow: no operation in this node sends a message. Customer.io campaigns do the sending, and if you need a raw transactional email straight out of a workflow that is a job for SendGrid or a mail node.
The trigger is labelled Beta by n8n and sits at version 1, so treat it as something to watch rather than something to forget. It has no wildcard option either: every event you want has to be ticked in the Events list, one by one. If you are still weighing the platform itself, the n8n review covers hosting, cost model and where the tool gets uncomfortable.
How do you connect Customer.io to n8n?
- 01
Generate both API keys in Customer.io
Customer.io exposes two separate APIs and n8n needs a key for each. The Tracking API Key works against the Track API at
https://track.customer.io/api/v1/, and the App API Key works against the App API athttps://api.customer.io/v1/api/. Both are created from the credentials screen of your Customer.io account, on the page their documentation calls finding and managing your API credentials. - 02
Pick the region that matches your workspace
The Region field changes the subdomains n8n calls. Global keeps the default URLs for both APIs and covers every non-EU country. EU switches the Track API subdomain to
track-euand the App API subdomain toapi-eu, and it should only be selected if your workspace really sits in the EU. A wrong region here is the reason a key that looks valid never authenticates. - 03
Create the credential once in n8n
In n8n, open the Credentials menu and add a Customer.io credential, which is a stored set of authentication details. Paste the Tracking API Key, the Tracking Site ID that goes with it, the App API Key and the region. The same credential serves both the Customer.io node and the Customer.io Trigger, and every later workflow picks it from the dropdown list without retyping anything.
What can start a workflow from Customer.io ?
Customer.io Trigger is the node that starts a workflow when something happens in Customer.io. It listens to 32 events, listed below by family. Pick one or several, activate the workflow: n8n registers the webhook on your Customer.io account.
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.
email.*10email.attemptedbouncedclickedconverteddelivereddraftedfailedopenedsentspammed
push.*8push.attemptedbouncedclickeddelivereddraftedfailedopenedsent
sms.*7sms.attemptedbouncedclickeddelivereddraftedfailedsent
slack.*5slack.attemptedclickeddraftedfailedsent
customer.*2customer.subscribedunsubscribed
Configuration notes
01Configure the Customer.io Trigger
The Customer.io Trigger starts a workflow when something happens inside Customer.io. It carries a single setting, and everything depends on it.
Key parameters
- Events: the list of events the webhook will forward. A webhook is a URL that Customer.io calls the moment something happens, so nothing is polled and each event reaches n8n within seconds. There is no catch-all option, so tick every event you actually want among the 32 available.
02Email Events
Email is the largest family in the catalogue with 10 events, and it covers the full life of a message from queue to complaint.
Key parameters
- Events: tick
email.drafted,email.attempted,email.sentandemail.deliveredto follow a send through its stages, thenemail.opened,email.clickedandemail.convertedfor what the recipient did with it. - Events: the three failure signals are
email.bounced,email.failedandemail.spammed, and they deserve their own workflow rather than a shared branch.
email.converted to the owner of the account, and pipe email.spammed straight into a cleanup workflow that pulls the profile out of every nurture segment. A third workflow on email.delivered writes each send back to your own database, which leaves you a message history that does not depend on what any single tool keeps.03Push Events
Mobile push notifications carry 8 events, and their names mirror the email family closely enough that one workflow can often handle both channels.
Key parameters
- Events:
push.drafted,push.attempted,push.sentandpush.deliveredtrace the send, whilepush.openedandpush.clickedreport what the device did with the notification. - Events:
push.bouncedandpush.failedpoint at a delivery problem, typically a device token that no longer works.
push.failed can flag the profile in your own database, so the next campaign falls back to email instead of shouting into a dead token. The reverse is just as useful: recording push.opened next to the profile stops a sequence from repeating a notification that already did its job.04SMS and Slack Events
Two smaller families sit next to each other in the Events list: 7 events for SMS and 5 for Slack, which makes 12 between them.
Key parameters
- Events: the SMS side gives
sms.drafted,sms.attempted,sms.sent,sms.delivered,sms.clicked, plussms.bouncedandsms.failedwhen the number rejects the message. - Events: the Slack side gives
slack.drafted,slack.attempted,slack.sent,slack.clickedandslack.failed. There is no delivered or bounced signal in that family.
sms.failed that stops retrying a bad number keeps the next send from hammering a dead line. On the Slack side, slack.clicked tells you an internal alert was actually read. Both families also report a drafted and an attempted state before anything leaves the building, which lets a workflow log the intent even when the send never completes.05Customer Subscription Events
The smallest family holds 2 events and they are the ones with legal weight: customer.subscribed fires when a subscriber is added to a list, customer.unsubscribed when a member opts out.
Key parameters
- Events: tick
customer.subscribedto catch every new opt-in, whatever the form or import it came from. - Events: tick
customer.unsubscribedto catch every opt-out at the moment it happens.
customer.unsubscribed can write the opt-out back to your CRM and to your billing system in the same run, so nobody rebuilds a list from a stale export three months later. The opt-in side feeds a welcome sequence through segment.add. Between them, the two events also build an audit trail on their own, since every membership change lands in the same place with the moment it happened attached.What can the Customer.io node do in a workflow?
The Customer.io node exposes 9 operations across 4 resources. For each one: the node as you configure it in n8n, the required fields, and our field notes.
| Resource | Get | Get Many | Delete | Add Customer | Remove Customer | Get Metrics | Track | Track Anonymous | Create or Update |
|---|---|---|---|---|---|---|---|---|---|
| Customer | ✓ | ✓ | |||||||
| Event | ✓ | ✓ | |||||||
| Campaign | ✓ | ✓ | ✓ | ||||||
| Segment | ✓ | ✓ |
Operations index
Customer
2 operationsCreate or update a customer
customer.upsertWhat you see in n8n
Notes & use cases
One call covers both cases. If the identifier already exists in Customer.io the profile is updated, otherwise it is created, which is what upsert means.
Key parameters
- ID: the unique identifier for the customer, usually
{{ $json.id }}taken from the node before. Reuse the same value everywhere or one person ends up as two profiles. - Additional Fields: holds Email, Created At as a UNIX timestamp in seconds, and Custom Properties for your own attributes.
- JSON Parameters: switch it on to paste a whole payload as JSON instead of filling fields one by one.
Delete a customer
customer.deleteWhat you see in n8n
Notes & use cases
Erasing a profile needs a single field, and the operation leaves nothing behind in Customer.io.
Key parameters
- ID: the unique identifier for the customer, the same value used when the profile was created, often
{{ $json.id }}from an upstream lookup rather than an email address typed by hand.
Event
2 operationsTrack a customer event
event.trackWhat you see in n8n
Notes & use cases
Sends a named event attached to a known profile, which is how a campaign gets something to react to.
Key parameters
- Customer ID: the unique identifier for the customer the event belongs to.
- Event Name: the name of the event to track, the label your campaign conditions will match on.
- Additional Fields: Custom Attributes carries the payload, and Type changes the event type, set to
pagefor a page view.
Track an anonymous event
event.trackAnonymousWhat you see in n8n
Notes & use cases
Same idea, minus the identity. Useful when the visitor has done something interesting before ever becoming a known profile.
Key parameters
- Event Name: required here, since it is the only thing identifying what happened.
- Additional Fields: Custom Attributes carries whatever context you have, an email typed in a form or a product reference.
- JSON Parameters: on, the payload goes in as raw JSON in Additional Fields.
Campaign
3 operationsGet a campaign
campaign.getWhat you see in n8n
Notes & use cases
Reads one campaign and returns its details, which is the quick way to resolve an identifier into something readable.
Key parameters
- Campaign ID: the unique identifier for the campaign, a number rather than the campaign name, most often
{{ $json.campaign_id }}carried by an event from the trigger.
email.bounced reads better with the campaign name in it. This operation turns the raw identifier in the webhook payload into the label your team recognises before the message is posted anywhere.Get many campaigns
campaign.getAllWhat you see in n8n
Notes & use cases
Returns the campaigns of the workspace in one go. No field to fill, which makes it the natural first node of any reporting workflow.
Get metrics for a campaign
campaign.getMetricsWhat you see in n8n
Notes & use cases
Returns the counters of one campaign over a period, ready to be written into a sheet or a database.
Key parameters
- Campaign ID: the numeric identifier of the campaign to measure.
- Period: hours, days, weeks or months, which sets the granularity of the series.
- Steps: how many periods to return. It defaults to the maximum available, or 12 with months. The ceilings are 24 hours, 45 days, 12 weeks and 120 months.
- Type: narrows the metric to email, push, slack, twilio, urbanAirship, webhook or empty.
Segment
2 operationsAdd a customer to a segment
segment.addWhat you see in n8n
Notes & use cases
Pushes one or several profiles into a manual segment, which is usually what actually starts a campaign.
Key parameters
- Segment ID: the numeric identifier of the segment, taken from Customer.io and worth storing in the workflow notes.
- Customer IDs: a list of customer identifiers to add, so a batch of profiles goes in with a single node instead of a loop.
Remove a customer from a segment
segment.removeWhat you see in n8n
Notes & use cases
Takes profiles back out of a manual segment. The profiles themselves stay in Customer.io, only their membership ends.
Key parameters
- Segment ID: the numeric identifier of the segment the profiles are leaving.
- Customer IDs: the list of customer identifiers to pull out.
Need help automating Customer.io with n8n?
A person reads every message.

