Salesforce data-in integration
PremiumThis feature is available for Premium plans. EnterpriseThis feature is available for Enterprise plans. UpdatedThe Salesforce source lets you send data from your CRM to destinations where you can activate it. For example, you can send Salesforce data to Customer.io where you can automatically message people—follow up with leads, message contacts when it’s time to renew their contracts, and so on. This makes Salesforce a part of your larger marketing stack without needing developers to write a complicated integration.
Before you begin
Customer.io gets data from Salesforce through syncs. Each sync brings in one kind of Salesforce record, maps it to a Customer.io data type, and runs on an interval that you control.
The first time a sync runs, it brings in the complete set of records that match your sync settings. Later syncs bring in records that changed since the previous sync interval. This keeps your Salesforce data up to date in Customer.io without importing the complete data set every time.
or configure a custom sync] mapping[Map records to Customer.io data] settings[Select fields, identifiers,
filters, and an interval] initial[Initial sync imports
all matching records] updates[Later syncs import
changed records] salesforce --> template --> mapping --> settings --> initial --> updates
Sync templates handle common mappings for contacts, leads, and accounts. For other Salesforce data, see Mapping Salesforce data to Customer.io to decide whether your data should become people, custom objects, events, or relationships. If you’re sending Salesforce data outside Customer.io, see Mapping Salesforce data to destinations.
Prerequisites
To connect Salesforce to Customer.io, you need:
- A Salesforce Data Cloud (sometimes called Sales Cloud) account that is either:
- At the Professional or Enterprise level, or higher.
- Includes Web Services API access.
- A Salesforce user with access to the data you want to send from Salesforce to Customer.io. In general, we suggest that you set up a user specifically for your syncs, making it easy to limit the data Customer.io can access and control your integration independently of your day-to-day Salesforce users.
- A Salesforce admin who can install the Customer.io External Client App in Salesforce.
- A Customer.io admin who can connect Customer.io to Salesforce using that Salesforce user.
If your Salesforce account restricts access by IP address, allow the following IP addresses so Customer.io can connect to Salesforce and refresh OAuth tokens. Make sure you use the correct IP addresses for your account region.
| US Region | EU Region |
|---|---|
| 34.29.50.4 | 34.22.168.136 |
| 35.222.130.209 | 34.78.194.61 |
Set up your Salesforce integration
When you connect Salesforce, we provide sync templates for common data types—contacts, leads, and accounts—with pre-configured field mappings, identifiers, and filters. We recommend starting with a template to get your first sync running quickly.
Go to Integrations. In the Directory tab, pick the Data In Salesforce integration.
Set up your Salesforce connection:
- Give the integration a friendly Name so you’ll recognize it in Customer.io.
- If you’re logging in with your Salesforce Sandbox account, enable the Sandbox setting to test your integration.
Install the Customer.io External Client App in Salesforce.
Click Connect Salesforce and log in to Salesforce. While you can log in with any Salesforce user, you might want to log in with an integration user—an account made specifically for this integration that helps you manage and limit the data available to Customer.io.
Choose the kind of Salesforce data you want to sync to Customer.io. In general, we recommend starting with Contacts because they map to people.


Click Add fields to determine the data you want to bring in for each Salesforce record. When you’re done, click Save and preview. From here you can:
- Manually select the fields you want to add.
- Add a prompt under How do you want to use this sync? (if AI is enabled) and Customer.io will suggest fields based on your goals. For example, you might want to “send email campaigns to contacts based on lead status” or “segment accounts by company type.” We try to exclude fields that are usually not useful for segmentation, campaign targeting, or personalization. Fields added by AI show a sparkle badge in the field list.


(Optional) Click Filter data to sync a subset of records. This gives you a way to filter out records you know won’t be useful in Customer.io. See Filter incoming data for more information. When you’re done, click Save and preview.
Review your sync. We’ll show you which fields you’re going to sync and the total number of records your sync will add. Make sure you’re syncing the right data and that the total number of records looks right to you.
Click Enable sync and choose a sync interval: 1 hour, 6 hours, 24 hours, or a custom interval.
The Syncs tab shows the status of your sync. If you go into , you should begin seeing your Salesforce data—though it may take a few minutes to populate all your people, especially if you have millions of records.
Install Customer.io as an External Client App
Before you can use your Salesforce integration, you (or another Salesforce admin) need to install the Customer.io External Client App (ECA) package in your Salesforce org. We’ll give you a direct installation link during setup.
Salesforce may show a warning during installation
- In Customer.io, open the External Client App installation link for your Salesforce connection.
- Determine who should access the app.
- Acknowledge the warning about the app not being a part of the AppExchange Partner Program and click Upgrade.
- Return to Customer.io.


Migrate an existing Salesforce connection
Salesforce made changes around how integrations connect to Salesforce. If you set up your Salesforce integration before June 17, 2026, you need to migrate Salesforce source or destination to the new “External Client App” setup before August 17, 2026 or your integration will stop working.
If you haven’t migrated yet, we’ll show a banner in your Salesforce connection. Migrating uses the same External Client App setup as a new connection, so you need to meet the same prerequisites. A Salesforce admin installs the Customer.io External Client App package, then a Customer.io admin upgrades authentication from the connection’s Settings tab or the upgrade banner. This may be easier if the person doing the migration is both a Salesforce admin and a Customer.io admin.


- Open your Salesforce integration in Customer.io.
- In the banner, click the External Client App link.
- Follow the instructions to install the package and give the Salesforce users or profiles that should use Customer.io access to the app.
- Return to Customer.io and click Upgrade authentication.
- Log in to Salesforce with the Salesforce user you want Customer.io to use for this connection. We recommend using an integration user.
- When Salesforce prompts you to grant access to the app, click Allow.
Add syncs
After initial setup, you can add more syncs to import other kinds of data from Salesforce.
Go to your Salesforce integration’s Syncs tab and click Add Sync. From here you can choose a template if one fits, or configure the fields and identifiers yourself in the full sync editor. To learn more about whether your data types are people, objects, or events, see Mapping Salesforce data to destinations.
Configure a sync with a template
Today we offer simple templates to bring in Contacts, Leads, and Accounts from Salesforce. To bring in other types of Salesforce data, you’ll need to configure a custom sync.
- Go to your Salesforce integration’s Syncs tab and click Add Sync.
- Select your sync template.


- Click Add fields to determine the data you want to bring in for each Salesforce record. From here you can manually select the fields you want to add or enter a prompt we can use to suggest fields based on your goals. When you’re done, click Save and preview.


- (Optional) Click Filter data to sync a subset of records. This gives you a way to filter out records you know won’t be useful in Customer.io. If you’re not comfortable with SOQL, you can enter a prompt and click Generate query to help you write a filter. Click Validate query when you’re done to make sure your query works the way you expect. When you’re done, click Save and preview.
- Review your sync. We’ll show you which fields you’re going to sync and the total number of records your sync will add. Make sure you’re syncing the right data and that the total number of records looks right to you.
- Click Enable sync and choose a sync interval: 1 hour, 6 hours, 24 hours, or a custom interval.
Configure a custom sync
When you’re configuring a sync manually:
Pick the kind of Salesforce record you want to send to Customer.io in the Sync dropdown.


Give your sync a Name—something that describes the data you’re importing and what you’re mapping it to.
Click Edit next to Unique identifiers to map your identifier—the field that uniquely identifies each person or object. For example, if you sync Opportunities, you might want to use the Opportunity ID as the identifier


Go to the Fields tab and pick the fields you want to capture in Customer.io. Salesforce contains a lot of data, not all of which is useful in Customer.io.


Go to the Pipelines format tab and tell us what kind of data you’re sending. For popular Salesforce data types, we set these fields for you. For example, for Opportunities, we automatically set the Data Pipelines format to Custom Object and the Custom Object Name to Opportunities.
If your Data Pipelines format is set to Custom Object or Relationship, you need to map them to a custom objectAn object is a non-person entity that you can associate with one or more people—like a company, account, or online course. in Customer.io. In most cases, this is the same name as the Salesforce object you want to sync (or relate people to). If the object doesn’t exist yet, click New Object Type and set the singular and plural forms—like Account and Accounts. See Mapping Salesforce data to Customer.io for more information.


(Optional) Go to the Advanced filtering tab and write a query to filter the records you want to bring into Customer.io. You can also enter a prompt and use AI to generate a filter. See Filter incoming data for more information.
Go to the Preview tab to see a preview of the data you’ll be syncing. If everything looks good, click Save changes.
Configure your sync schedule. This is how often you want to sync data from Salesforce to Customer.io.
When you’re done, click Configure destinations and select places you want to connect your Salesforce data to. The destinations you connect to might depend on how you model your data. See Mapping data to destinations for more information.


Click Enable sync.
The Syncs tab shows the status of your new sync. It may take a few minutes to populate all your data, especially if you have millions of records.
Filter incoming data
When you set up a sync, we bring all data of the selected type from Salesforce by default. For example, if you sync your Salesforce contacts, we’ll bring all your contacts into Customer.io. But you might not want all of your contacts—maybe you qualify your contacts or you only want to bring in contacts who meet certain thresholds.
That’s what the Add optional data filters button does: it lets you provide criteria for data you want to bring into Customer.io.


If you’re not comfortable writing your own query, you can use AI to generate a filter for you! Provide a plain-text description of the data you want to capture or exclude, and we’ll try to generate a filter for you.
If you write your own query, note that you don’t have to write the SELECT, FROM, or WHERE clauses. The filter acts as criteria for the WHERE clause of a Salesforce SOQL query, and the other sync settings cover the SELECT and FROM clauses. For example, if you only want to bring contacts into Customer.io if they have an email address, you could write a filter like this:
Email != null
Salesforce capitalizes field names
FirstName). While you can change field names when you bring them into Customer.io, you’ll use the original field name from Salesforce for your filter.Deleted records
We handle deletions differently from create and update operations!
identify event from your sources adds or updates a person in our Customer.io Journeys destination. to delete data!Updating syncs
When you update a sync to add or remove fields, your updates take effect at the next sync interval. This means that your changes don’t affect data that you’ve already sent from Salesforce (or any syncs in progress).
To update all data you’ve passed from Salesforce to Customer.io (and other places you send your Salesforce data to), you can Resync all data. This sends all of your corresponding Salesforce data through Customer.io again, updating all of your records with the changes you made to your sync.
On the Syncs tab, click next to the sync you updated and click Resync all data.


Manage access to Salesforce data with an “Integration User”
When you connect to Salesforce, you don’t need to use your own credentials. You can set up an Integration User in Salesforce with limited access to the data you want to send to Customer.io. This helps you secure and limit the data that you expose to Customer.io—both the types of data you can sync and the fields within each data type that Customer.io can access.
See Salesforce’s documentation for more about Integration Users.
