Customer.io + Salesforce

Connect Customer.io and Salesforce to Unify Marketing and Sales Data

Automate contact sync, campaign triggers, and lead lifecycle management between your messaging platform and CRM.

Why integrate Customer.io and Salesforce?

Customer.io and Salesforce sit at opposite ends of most revenue teams' tech stacks — one driving personalized, behavior-based messaging, the other holding the authoritative record of every customer relationship. When the two run independently, marketing teams lack CRM context and sales teams can't see how prospects actually engage with campaigns. Connecting Customer.io with Salesforce on tray.ai closes that gap, so data moves freely between the systems and both teams work from the same picture.

Automate & integrate Customer.io & Salesforce

Use case

Sync New Salesforce Leads into Customer.io Campaigns

When a lead is created or updated in Salesforce, automatically add or update that contact in Customer.io and enroll them in the right onboarding or nurture campaign. No lead slips through after entering the CRM, and marketing campaigns stay current with fresh lead data without manual imports.

Use case

Update Salesforce Records Based on Customer.io Email Engagement

When a contact opens an email, clicks a link, or completes a conversion event in Customer.io, automatically log that activity on the matching Salesforce Lead or Contact record. Sales reps can see exactly which campaigns drove engagement before they make a call — behavioral intent data that makes follow-up faster and more relevant.

Use case

Trigger Customer.io Campaigns from Salesforce Opportunity Stage Changes

As deals move through pipeline stages in Salesforce, automatically trigger targeted Customer.io campaigns matched to each stage — from early evaluation content to contract-close nurture sequences. Prospects stay engaged with relevant material throughout the sales cycle without marketing manually managing every enrollment.

Use case

Suppress Salesforce Contacts from Customer.io Campaigns After Won or Lost Deals

When a Salesforce opportunity closes — won or lost — automatically update or suppress the associated contact in Customer.io to stop irrelevant prospect messages from going out. Won customers move into onboarding sequences; lost deals exit active nurture tracks. Nothing damages a relationship faster than a sales email landing the day after someone signs a contract.

Use case

Create or Update Salesforce Contacts from Customer.io Form Submissions

When a visitor submits a form tracked through Customer.io or a connected tool, automatically create or update a Lead or Contact in Salesforce with the submitted data and engagement context. Web and in-app lead captures enter the sales pipeline immediately — no lag, no lost leads between the marketing platform and CRM.

Use case

Sync Salesforce Account Attributes to Customer.io for Personalization

Push Salesforce Account fields — industry, company size, contract tier, renewal date — into Customer.io as contact or company attributes. Marketing can then build precisely targeted segments and send personalized messages based on real account data, not guesswork. Account-level CRM intelligence actually reaches the people sending campaigns.

Use case

Alert Sales Reps in Salesforce When High-Value Prospects Engage in Customer.io

When a high-priority lead or opportunity contact opens a campaign email, clicks a pricing page link, or hits a behavioral threshold in Customer.io, automatically create a Salesforce task or activity log for the assigned rep. Buying signals surface at the right moment rather than getting buried in a dashboard nobody checks. Reps can reach out when prospects are actually paying attention.

Get started with Customer.io & Salesforce integration today

Customer.io & Salesforce Challenges

What challenges are there when working with Customer.io & Salesforce and how will using Tray.ai help?

Challenge

Keeping Contact Records in Sync Across Both Platforms

Customer.io and Salesforce each maintain their own contact and person records, and without automation they fall out of sync fast. Email addresses change, contacts get merged, new fields get added — and suddenly you've got duplicate profiles, missed campaigns, and reporting that disagrees with itself on both sides.

How Tray.ai Can Help:

Tray.ai runs bidirectional sync workflows that listen for changes in either system and push updates in real time. Deduplication logic, field mapping, and conditional rules make sure changes in Salesforce appear in Customer.io and vice versa — without creating duplicates or overwriting valid data.

Challenge

Mapping Salesforce Field Structures to Customer.io Attributes

Salesforce has a deeply customized data model — custom objects, picklists, lookup relationships — that doesn't map cleanly to Customer.io's flat attribute structure. Translating opportunity or account data into Customer.io-compatible person or company attributes requires transformation logic that's painful to maintain by hand.

How Tray.ai Can Help:

Tray.ai's visual data mapper and built-in helper functions let teams transform, flatten, and reformat Salesforce data before it goes to Customer.io. Custom field mappings are set up without code, and conditional logic handles edge cases like null values, picklist translations, and multi-object lookups.

Challenge

Handling Salesforce API Rate Limits During Bulk Syncs

Salesforce enforces strict API call limits per organization per day. Bulk sync operations — importing thousands of contact updates from Customer.io events, for example — can burn through those limits quickly, causing failed syncs, incomplete data, and problems for other Salesforce integrations sharing the same quota.

How Tray.ai Can Help:

Tray.ai has built-in rate limit handling, request throttling, and retry logic that automatically paces API calls within Salesforce's allowed thresholds. Bulk operations are batched intelligently, and failed requests are queued and retried without manual intervention — protecting both integration reliability and your overall API health.

Challenge

Making Sure Unsubscribes and Suppressions Are Respected Across Systems

When a contact unsubscribes from Customer.io emails or is marked opted out in Salesforce, that preference needs to be honored in both systems immediately. Failing to sync opt-out signals means continued messaging to unsubscribed contacts — a real compliance problem under CAN-SPAM, GDPR, and other regulations.

How Tray.ai Can Help:

Tray.ai workflows listen for unsubscribe and opt-out events in either system and immediately update the corresponding record in the other. Customer.io unsubscribe webhooks trigger instant Salesforce field updates, and Salesforce opt-out flags suppress contacts in Customer.io — compliance stays current in both places, automatically.

Challenge

Linking Customer.io Events to the Correct Salesforce Record Type

Salesforce may hold the same individual as both a Lead and a Contact depending on where they are in the sales process. Routing Customer.io engagement events to the right record type — and handling the Lead-to-Contact conversion — is logic that breaks easily when managed through manual processes or simple point-to-point tools.

How Tray.ai Can Help:

Tray.ai workflows query Salesforce to check whether an email address exists as a Lead, Contact, or both, then route accordingly. When a Lead converts to a Contact, tray.ai automatically updates the linked Customer.io profile with the new record ID and relationship context, so engagement history stays attached and accurate.

Start using our pre-built Customer.io & Salesforce templates today

Start from scratch or use one of our pre-built Customer.io & Salesforce templates to quickly solve your most common use cases.

Customer.io & Salesforce Templates

Find pre-built Customer.io & Salesforce solutions for common use cases

Browse all templates

Template

New Salesforce Lead to Customer.io Contact Sync

Automatically creates or updates a Customer.io person record whenever a new Lead is created in Salesforce, then enrolls them in a designated nurture campaign based on lead source or status.

Steps:

  • Trigger: New Lead created or updated in Salesforce
  • Map Salesforce Lead fields (name, email, company, lead source, status) to Customer.io person attributes
  • Create or update the person in Customer.io and add them to the appropriate campaign segment

Connectors Used: Salesforce, Customer.io

Template

Customer.io Email Event Logger for Salesforce

Listens for email open, click, and unsubscribe events in Customer.io and automatically logs activity records on the matching Salesforce Lead or Contact, keeping CRM records current with engagement history.

Steps:

  • Trigger: Customer.io webhook fires on email open, click, bounce, or unsubscribe event
  • Look up the matching Lead or Contact in Salesforce by email address
  • Create an Activity or Task record in Salesforce with event type, campaign name, timestamp, and link clicked

Connectors Used: Customer.io, Salesforce

Template

Salesforce Opportunity Stage to Customer.io Campaign Enrollment

Monitors Salesforce opportunity stage changes and automatically enrolls or moves the associated contact into the matching Customer.io campaign, delivering stage-relevant content throughout the sales cycle.

Steps:

  • Trigger: Salesforce Opportunity stage field is updated
  • Identify the primary contact on the opportunity and look them up in Customer.io
  • Add the contact to the campaign mapped to the new opportunity stage and remove them from any previous stage campaign

Connectors Used: Salesforce, Customer.io

Template

Closed Won Deal to Customer.io Onboarding Campaign

When a Salesforce opportunity is marked Closed Won, automatically moves the contact in Customer.io from a prospect nurture campaign into a customer onboarding sequence, so the handoff from sales to success happens without anyone having to remember to do it.

Steps:

  • Trigger: Salesforce Opportunity StageName changes to 'Closed Won'
  • Retrieve contact details from the opportunity and update their attributes in Customer.io (e.g., set customer_status to 'active')
  • Remove contact from all prospect campaigns and enroll them in the onboarding broadcast or triggered campaign

Connectors Used: Salesforce, Customer.io

Template

Customer.io High-Engagement Alert to Salesforce Task

Detects when a tracked contact crosses a defined engagement threshold in Customer.io — such as clicking a pricing or demo link — and automatically creates a follow-up task in Salesforce assigned to the contact owner.

Steps:

  • Trigger: Customer.io webhook fires when a contact clicks a high-intent tracked link or meets a custom event threshold
  • Look up the contact in Salesforce by email and retrieve the record owner
  • Create a Salesforce Task assigned to the owner with subject, due date, priority, and engagement context from Customer.io

Connectors Used: Customer.io, Salesforce

Template

Salesforce Account Attribute Sync to Customer.io

Periodically pulls updated Account fields from Salesforce and pushes them to matching Customer.io person records, keeping segmentation and personalization attributes current without manual data management.

Steps:

  • Schedule: Run on a defined interval (e.g., hourly or nightly) or trigger on Salesforce Account field update
  • Query Salesforce for Accounts with recent modifications and retrieve linked Contact records
  • Update corresponding Customer.io person attributes with latest account data including industry, tier, and renewal date

Connectors Used: Salesforce, Customer.io