Customer.io
Sync customer profiles and funnel events to Customer.io for automated email and push notification workflows. AppFunnel uses the Customer.io CDP (Customer Data Platform) API to identify users, track events, and keep subscription data in sync.
What It Does
- Identifies users via the CDP API when an email is captured (or on any subsequent event). Customer profiles include name, email, location, funnel data, and subscription status.
- Tracks events for triggering workflows. Every AppFunnel event is forwarded as a Customer.io event, so you can build automations like onboarding sequences, purchase confirmations, or renewal reminders.
- Syncs subscription data as customer attributes, including active subscription count, subscription status, and plan details.
- Syncs marketing consent so your Customer.io segments respect opt-in status.
Setup
Navigate to Settings > Integrations > Customer.io in your project.
- Region: Select US or EU based on your Customer.io account region. This determines the API endpoint (
cdp.customer.iovs.cdp-eu.customer.io). - CDP Pipelines Write Key: Found in your Customer.io workspace under Settings > Workspace > API & Webhook Credentials > CDP Pipelines. This is the write key for the Pipelines source, not the Tracking API key.
Insert image: The Customer.io integration settings page showing the Region selector (US/EU) and CDP Pipelines Write Key input field
AppFunnel uses the CDP API (not the Tracking API). Make sure you copy the Pipelines Write Key, not the Site ID or Tracking API Key.
How It Works
Customer Identification
When a visitor provides their email (user.registered event), AppFunnel sends an identify call to Customer.io with the following attributes:
| Attribute | Description |
|---|---|
email | Customer email address |
name | Customer name (if provided) |
date_of_birth | Date of birth (if provided) |
gender | Gender (if provided) |
country, city, state | Location data |
project_id | Your AppFunnel project ID |
first_campaign_slug | The campaign where this customer was first seen |
campaign_base_url | Full URL of the customer’s first campaign |
marketing_consent | Whether the customer has opted in to marketing |
created_at | Unix timestamp of when the customer was created |
last_session_id | ID of the most recent session |
funnelData | All session variable data (quiz answers, selections, etc.) |
On every subsequent event, AppFunnel re-identifies the customer to keep attributes up to date.
Subscription Sync
When a subscription.created event fires, AppFunnel additionally syncs subscription attributes:
| Attribute | Description |
|---|---|
has_active_subscription | Boolean: whether the customer has any active subscription |
active_subscription_count | Number of active subscriptions |
subscriptions | Array of subscription objects with id, status, priceId, currentPeriodStart, currentPeriodEnd, createdAt |
Event Tracking
All AppFunnel events are forwarded to Customer.io as track calls. The event name matches the AppFunnel event type (e.g., purchase.complete, subscription.renewal), and the event payload is passed as properties.
You can use these events in Customer.io to trigger campaigns, segment users, or build reporting workflows.
Events are only sent for identified customers (those with an email address). Anonymous page views are not forwarded to Customer.io.
Event Mapping
Customer.io receives all AppFunnel event types. Unlike Meta Ads, events are forwarded with their original AppFunnel event names by default:
| AppFunnel Event | Customer.io Event |
|---|---|
page.view | page.view |
user.registered | user.registered |
checkout.start | checkout.start |
checkout.payment_added | checkout.payment_added |
purchase.complete | purchase.complete |
customer.first_purchase | customer.first_purchase |
subscription.created | subscription.created |
subscription.renewal | subscription.renewal |
marketing.consent_given | marketing.consent_given |