Customer.io's Salesforce Sync Got Easier on 15 June. It Also Got a 17 August Deadline That Can Break It
Two dates landed in your calendar this month, whether you noticed them or not.
On 15 June 2026, Customer.io made its Salesforce integration quicker to set up. Sync templates for contacts, leads and accounts, each with common field mappings ready to go, plus an Agent that suggests fields from a plain-English goal like "segment accounts by company type". It's a real improvement, and worth adopting.
The second date matters more. The same Salesforce documentation, updated 17 June 2026, carries a migration notice in the middle of the setup guide. If you connected Salesforce before 17 June, you have until 17 August 2026 to move that connection to Salesforce's new External Client App authentication. Miss it and the integration stops working.
So the order of operations for this month is simple. Migrate first, then use the new templates to rebuild your syncs cleanly, then make the data-model decisions the templates don't make for you. Templates are a fast start, not a data model... the same trap teams fall into when they port their Klaviyo flows one-for-one instead of re-modelling the schema. This post walks all three, in order, for anyone running Salesforce alongside Customer.io. One caveat before you read on: the Salesforce integration is a Premium and Enterprise feature, so if you're on a lower plan, none of this applies to you yet.
The 15 June update buried a 17 August deadline
The templates are the headline. The deadline is the thing that can break you.
Salesforce changed how outside tools authenticate to it, and integrations now have to use what Salesforce calls an External Client App, or ECA. Customer.io's setup guide states the consequence plainly: connections made before 17 June must move "to the new 'External Client App' setup before August 17, 2026 or your integration will stop working."
Read "source or destination" carefully, because it covers both directions of data flow. A source is Salesforce sending data into Customer.io. A destination is Customer.io pushing data back out to Salesforce. If you have either, and you set it up before 17 June, it's on the clock. Teams who only think of this as an inbound sync can easily forget the destination side that writes activity back to their CRM.
Does this apply to you? The one-question check
One question decides it: was your Salesforce connection created before 17 June 2026?
If yes, you need to migrate before 17 August. If you built the connection on or after 17 June, you're already on the new authentication and there's nothing to do. Customer.io makes the check easy. Until you migrate, it shows a banner inside the Salesforce connection prompting you to upgrade, so you don't have to dig through settings to find out where you stand.
The migration, role by role
Migrating reuses the same External Client App setup as a brand-new connection, so it has the same prerequisites. The reason migrations stall is rarely the software. It's that the work spans two systems and the right people aren't in the room.
Four things need to be true before you start. You need a qualifying Salesforce account (Salesforce Data Cloud, sometimes called Sales Cloud, at Professional or Enterprise level or higher, or one that includes Web Services API access). You need a Salesforce admin who can install the Customer.io External Client App package into your Salesforce org. You need a Customer.io admin who can upgrade the connection's authentication. And you need a Salesforce user for Customer.io to log in as, which should be a dedicated integration user rather than a real person's account.
The sequence itself is short. A Salesforce admin opens the install link from the connection's banner and installs the ECA package, choosing which Salesforce users or profiles get access. Then a Customer.io admin returns to the connection, clicks Upgrade authentication from the Settings tab or the banner, logs in with the integration user, and grants the app access when Salesforce asks. Customer.io's own note is worth heeding: the whole thing is easier when the person doing it is both a Salesforce admin and a Customer.io admin, because nobody is waiting on a handover.
One step looks alarming and isn't. During installation, Salesforce warns you that the Customer.io app is installed from a direct package URL rather than the AppExchange. That's expected. Customer.io is still working on its AppExchange listing, so for now you acknowledge the warning about the AppExchange Partner Program and continue. It isn't a sign anything has gone wrong.
While you're in there, set your syncs up properly with templates
Once you're on the new authentication, the 15 June templates are the fast way to rebuild. This is the part that genuinely got easier.
When you connect Salesforce, you pick a template for contacts, leads or accounts. Each one arrives with common identifiers, mappings and filters already configured, so a sync that used to mean hand-picking identifiers and fields is now mostly review-and-adjust. Customer.io recommends starting with contacts, because contacts map to people, and people are the unit everything else in Customer.io hangs off.
Two AI helpers sit alongside the templates, and both save real time. Click Add fields and you can describe your goal in plain English, like "send email campaigns to contacts based on lead status", and the Agent suggests fields from your Salesforce schema. Fields it adds carry a sparkle badge so you can see what came from the suggestion before you commit. For filtering, you don't have to write Salesforce's SOQL query language by hand. Describe the records you want in plain text, click Generate query, and Customer.io drafts the filter for you, which you then validate before saving.
Whatever route you take, preview before you enable. Customer.io shows the fields you're about to bring in and the total number of records the sync will add. That's how you catch a sync about to import ten times more than you expected, before it runs. Remember this is one of several ways to feed Customer.io: if you're weighing it against other options, our guide to integrating data sources with Customer.io covers APIs, webhooks and reverse ETL alongside CRM syncs. The Salesforce source feeds Customer.io through its own CDP, Data Pipelines, which is also worth understanding in its own right if you're still paying Segment for a job Data Pipelines may already do.
This isn't a one-off for Salesforce, either. Customer.io gave HubSpot the same treatment two weeks earlier, on 2 June 2026, with templates for contacts and companies and the same AI field suggestions. The template approach to CRM syncs is the direction, not a single feature.
The decisions templates don't make for you
Here's the part the templates quietly leave to you. They pre-fill field mappings. They don't decide your data model, and the data model is where account-level messaging lives or dies.
Contacts and leads become people; accounts and opportunities become objects
Customer.io maps Salesforce records to four shapes: people, events, custom objects, and relationships. Getting each one right is the difference between messaging that works and segments that quietly return nobody.
Contacts become people. Leads almost always become people too, identified by email address, because a lead and the contact they become should resolve to one person in Customer.io rather than two. Salesforce gives someone a lead ID and then a different contact ID when they qualify, so Customer.io uses email as the steady identifier across that change and stores the Salesforce IDs as attributes. Tasks usually become events, since they represent things people do.
Accounts and opportunities are different, and this is where the picture most teams carry in their head is wrong. Both become custom objects, not relationships. An account is a custom object. An opportunity is also a custom object, and unlike contacts, leads and accounts, it has no template, so you build that sync by hand. Modelling accounts and opportunities as objects is what makes account-level messaging for B2B and multi-seat SaaS possible: messaging around a company or a deal rather than one inbox at a time.
Relationships are the piece people miss. In Customer.io a relationship isn't a kind of record... it's the link between two records, a person and an object. Sync your accounts as custom objects and your people as people, and they sit in your workspace unconnected until you add a separate relationship sync, like Account-Contact Relationships, that ties each person to their account. Skip it and your account-level segments have no idea who belongs to which account. If you're deciding how to hold this data at all, our piece on Customer.io collections versus custom objects covers the question that should drive the choice. It comes down to whether the link between a person and the data needs to survive after the workflow ends.
Deletions and resync behaviour
Two behaviours surprise people after the first sync runs, and both are about keeping data current rather than getting it in.
Deletions don't fully take care of themselves. When you delete a record in Salesforce, Customer.io receives a deletion event automatically. But you may still need to set up delete actions, so the data is actually removed from Customer.io and anywhere downstream you've sent it. Left unconfigured, you can keep messaging people who no longer exist in your CRM.
Edits to a sync apply to new data, not to records already imported. Change a sync to add or remove a field and the change takes effect at the next sync interval, affecting only data that flows after that. Records already in Customer.io keep their old shape. To push your change across everything you've already imported, use Resync all data from the sync's menu, which sends the full set through again with your updates applied.
The 30-minute migration checklist
If your connection predates 17 June, work through this before 17 August.
First, confirm the deadline applies: open the Salesforce connection and look for the upgrade banner. Second, line up the people, because this is the slow part: a Salesforce admin to install the package and a Customer.io admin to upgrade authentication, ideally the same person, plus the integration user's login. Third, have the Salesforce admin install the Customer.io External Client App package from the banner's link, granting access to the right users or profiles, and acknowledge the AppExchange warning. Fourth, back in Customer.io, click Upgrade authentication, log in as the integration user, and allow access. Fifth, confirm data is still flowing on the Syncs tab. Then, and only then, treat the new templates as your moment to rebuild any sync that was held together with manual mappings, and to add the relationship syncs you've been missing.
Frequently asked questions
What is the Customer.io Salesforce External Client App, and why do I have to migrate?
The External Client App (ECA) is Salesforce's newer way for outside tools to authenticate to it, and Customer.io now connects as an ECA package you install in your Salesforce org. You have to migrate because Salesforce changed how integrations connect, and the older authentication your connection used is being retired. Customer.io's setup guide documents the change and the package install.
What happens on 17 August 2026 if I don't migrate my Salesforce connection?
Your integration stops working. Customer.io's documentation states that connections set up before 17 June 2026 must move to the External Client App setup before 17 August 2026 "or your integration will stop working". That applies to data coming in from Salesforce and data going back out to it, so both directions go dark until you upgrade.
How do I know whether my Salesforce connection needs migrating?
Ask one question: was the connection created before 17 June 2026? If yes, it needs migrating before 17 August. If it was created on or after 17 June, it already uses the new authentication. Customer.io also shows a banner inside any connection that still needs the upgrade, so you don't have to work it out from memory.
Does the migration deadline apply to data I send out to Salesforce too?
Yes. The notice covers "source or destination", meaning both an inbound Salesforce source that feeds Customer.io and an outbound destination that writes data back to Salesforce. If you set up either before 17 June 2026, migrate it before the deadline.
Which Customer.io plans include the Salesforce integration?
Premium and Enterprise plans only. The Salesforce data-in integration is documented as available on those plans, so accounts on lower tiers won't see it. If you're on a lower plan and need CRM sync, that's a plan conversation before it's a setup one.
Do the Salesforce sync templates cover accounts and opportunities, or just contacts?
Templates exist for contacts, leads and accounts, each with common mappings ready to use. Opportunities aren't templated. To bring opportunities in, you configure a custom sync and set its Data Pipelines format yourself, which Customer.io defaults to a custom object for opportunities.
How should I map Salesforce opportunities to Customer.io?
Map an opportunity to a custom object, not a relationship. In Customer.io's typical mappings, opportunities are custom objects, the same shape as accounts. If you want to connect people to those opportunities, add a separate Opportunity-Contact Relationship sync. Relationships are a distinct sync that links a person to an object, not a record type of their own.
Should I connect Salesforce with my own login or an integration user?
Use a dedicated integration user. Connecting as a real person's account ties the integration to that individual and exposes whatever data they can see. An integration user lets you limit both the record types and the specific fields Customer.io can read, and it survives staff changes without breaking the sync. Customer.io recommends this pattern in its setup guide.
How fresh is synced Salesforce data, and is it real-time?
It isn't real-time. You choose a sync interval of 1 hour, 6 hours, 24 hours, or a custom schedule. The first run imports every matching record, and later runs bring in only what changed since the previous interval, which keeps things current without re-importing everything each time. If you need a value to act on instantly, the interval is the constraint to design around.
Why is Salesforce warning me the Customer.io app isn't from the AppExchange?
That warning is expected and not a problem. Customer.io is still working on listing its app in the Salesforce AppExchange, so for now the package installs from a direct URL. Salesforce flags any app installed that way and notes it isn't part of the AppExchange Partner Program. Acknowledge it and continue the install.
I changed a sync's fields but the data isn't updating. Why?
Field changes take effect at the next sync interval and apply only to data that flows after that point. Records already in Customer.io keep their previous fields. To apply the change across everything you've already imported, open the sync's menu and choose Resync all data, which sends the full set through again with your update applied.
Do the Agent field suggestions use up my AI credits?
No. In Customer.io, only LLM actions consume AI credits. Other AI features, including the Agent that suggests sync fields, the segment builder and content analysis, don't draw on your credit balance. So the field suggestions in Salesforce setup cost you nothing in credits.
What happens to records I delete in Salesforce?
Customer.io receives a deletion event automatically when you delete a Salesforce record, but you may still need to set up delete actions to remove that data from Customer.io and any destinations you forward it to. Without those actions configured, deleted Salesforce records can linger in Customer.io and keep matching your segments.
Sources
- Salesforce data-in integration: Getting Started. Customer.io Docs, updated 17 June 2026.
- Set up Salesforce faster with sync templates and Agent field suggestions. Customer.io release notes, 15 June 2026.
- Map Salesforce data to Customer.io. Customer.io Docs, updated 15 June 2026.
- Simplified HubSpot integration setup. Customer.io release notes, 2 June 2026.
- AI credits. Customer.io Docs, updated 8 June 2026.


