Resources · n8n integration

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

Why automate

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.

Connect

How do you connect Customer.io to n8n?

  1. 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 at https://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.

  2. 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-eu and the App API subdomain to api-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.

  3. 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.

Triggers

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.*10
  • email.
    • attempted
    • bounced
    • clicked
    • converted
    • delivered
    • drafted
    • failed
    • opened
    • sent
    • spammed
push.*8
  • push.
    • attempted
    • bounced
    • clicked
    • delivered
    • drafted
    • failed
    • opened
    • sent
sms.*7
  • sms.
    • attempted
    • bounced
    • clicked
    • delivered
    • drafted
    • failed
    • sent
slack.*5
  • slack.
    • attempted
    • clicked
    • drafted
    • failed
    • sent
customer.*2
  • customer.
    • subscribed
    • unsubscribed

Configuration notes

01Configure the Customer.io TriggerThe Customer.io Trigger starts a workflow when something happens inside Customer.io. It carries a single setting, and everything depends on it.

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.
When to use it
whenever the workflow has to react to messaging activity rather than to a schedule. n8n registers the webhook URL with Customer.io when you activate the workflow, so the trigger stays silent while the workflow is in draft. The node is at version 1 and n8n still labels it Beta, which is worth a line in your runbook.
02Email EventsEmail is the largest family in the catalogue with 10 events, and it covers the full life of a message from queue to complaint.

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.sent and email.delivered to follow a send through its stages, then email.opened, email.clicked and email.converted for what the recipient did with it.
  • Events: the three failure signals are email.bounced, email.failed and email.spammed, and they deserve their own workflow rather than a shared branch.
Use cases
route 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 EventsMobile push notifications carry 8 events, and their names mirror the email family closely enough that one workflow can often handle both channels.

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.sent and push.delivered trace the send, while push.opened and push.clicked report what the device did with the notification.
  • Events: push.bounced and push.failed point at a delivery problem, typically a device token that no longer works.
When to use it
when the mobile app is a real channel and not an afterthought. A workflow listening on 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 EventsTwo smaller families sit next to each other in the Events list: 7 events for SMS and 5 for Slack, which makes 12 between them.

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, plus sms.bounced and sms.failed when the number rejects the message.
  • Events: the Slack side gives slack.drafted, slack.attempted, slack.sent, slack.clicked and slack.failed. There is no delivered or bounced signal in that family.
Use cases
on the SMS side, a workflow on 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 EventsThe 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.

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.subscribed to catch every new opt-in, whatever the form or import it came from.
  • Events: tick customer.unsubscribed to catch every opt-out at the moment it happens.
Use cases
consent rarely lives in one tool only. A workflow on 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.
Actions

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.

Resources × operations matrix
ResourceGetGet ManyDeleteAdd CustomerRemove CustomerGet MetricsTrackTrack AnonymousCreate or Update
Customer✓✓
Event✓✓
Campaign✓✓✓
Segment✓✓

Customer

2 operations
01

Create or update a customer

customer.upsert

What 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.
Use cases
replay a signup form into Customer.io without ever checking first whether the person is already known.
02

Delete a customer

customer.delete

What 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.
Use cases
a deletion request arrives through your support desk, a workflow finds the identifier in your own database and removes the profile here in the same run. Put a manual approval node in front of it: there is no undo, and a wrong identifier deletes someone else.

Event

2 operations
03

Track a customer event

event.track

What 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 page for a page view.
Use cases
a payment lands in your billing tool, the workflow tracks an order event with the amount in the attributes, and the receipt campaign fires on it.
04

Track an anonymous event

event.trackAnonymous

What 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.
Use cases
an abandoned checkout where only the email was captured, or an invite event sent before the invited person has any profile at all.

Campaign

3 operations
05

Get a campaign

campaign.get

What 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.
Use cases
an alert built on 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.
06

Get many campaigns

campaign.getAll

What 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.

Use cases
a weekly report starts here, then loops over each item to call the metrics operation and builds one row per campaign. It also works as an audit: compare the list against what your team believes is live, and the forgotten campaign that has been sending for months finally shows up.
07

Get metrics for a campaign

campaign.getMetrics

What 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.
Use cases
a Monday export of the last 7 days for every campaign, one line per channel.

Segment

2 operations
08

Add a customer to a segment

segment.add

What 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.
Use cases
a new signup enters the onboarding segment right after the upsert. A yearly cohort built from your own database enters the renewal segment the same way, all identifiers in one call.
09

Remove a customer from a segment

segment.remove

What 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.
Use cases
the moment someone buys, they should stop receiving the campaign that was pushing them to buy. A workflow on your payment event removes them from the prospect segment. Same logic after a complaint, where the profile leaves every promotional segment while staying reachable for service messages.
Need help

Need help automating Customer.io with n8n?

A person reads every message.

FAQ

Customer.io and n8n, the questions that come next

01Is the Customer.io n8n integration free?
Yes on the n8n side. Both the Customer.io node and the Customer.io Trigger ship with n8n, so there is nothing to install and no extra licence to buy for them. That holds on n8n Cloud, the hosted offer run by n8n, and on a self-hosted instance under the Community Edition and its Sustainable Use licence. A workflow behaves the same way in both places, and the credential you create is reused by every workflow that needs it. What a Customer.io account costs is a separate question, and this page does not cover it.
02What credentials do you need to connect Customer.io to n8n?
One credential, built on an API key, and it needs four things. A Tracking API Key for the Track API at https://track.customer.io/api/v1/, the Tracking Site ID that goes with it, an App API Key for the App API at https://api.customer.io/v1/api/, and a Region. The Track API requires the Site ID while the App API does not, and n8n picks the right key and endpoint based on the operation you selected. Region Global keeps the default URLs for non-EU workspaces. Region EU moves the Track API to track-eu and the App API to api-eu.
03What are the limits of the Customer.io node in n8n?
The node covers 9 operations across 4 resources: customers, events, campaigns and segments. Nothing outside that list is available, and no operation in the node sends a message, since sending stays the job of Customer.io campaigns. For any other endpoint in the Customer.io API, the HTTP Request node calls it directly and reuses the same credential through predefined authentication, so the keys stay in one place. On the trigger side, there is no wildcard option: each of the 32 events has to be ticked individually in the Events list, and n8n still labels the trigger Beta at version 1.
04Does the Customer.io Trigger react in real time?
Yes. The trigger works by webhook, meaning Customer.io calls an n8n URL the moment an event happens, and n8n registers that URL when you activate the workflow. There is no polling and no interval to configure, so each event lands within seconds. Two practical consequences. A workflow left in draft receives nothing, because the webhook is only registered on activation. And since the Events list has no catch-all option, an event nobody ticked simply never arrives, which looks exactly like a broken trigger. Check that list first when a workflow stays quiet.
05n8n or Make for Customer.io?
It depends on where you want the data and how you want to pay. Make is hosted only, with no self-hosting option, and it bills per operation, so a Customer.io workflow that fires on every email event has a cost that grows with your sending volume. n8n runs on its own Cloud or on your servers, which matters when messaging data and consent records should stay under your control. Make is often faster to pick up on a first visual scenario. n8n gives more room once a workflow needs real branching, custom code or a call the dedicated node does not cover.