Ingesting leads into Customer.io without Salesforce
Cold leads from events arrive in bulk and convert slowly. Pushing them straight into Salesforce fills your CRM with records nobody is working, skews your pipeline reporting, and in most orgs costs you license seats. The alternative is to land them somewhere else, nurture them there, and promote only the ones that earn it.
Customer.io works well as that holding environment. This guide covers how to get leads in, how to keep them from leaking into Salesforce, and when to let them through.
How to ingest leads directly into Customer.io
Depending on how cold leads are collected, there are several ways to bypass Salesforce and ingest them directly:
Automated webhook or middleware. If you use webinar platforms like Zoom or a form builder, connect those tools to Zapier or Make, or send a direct webhook to Customer.io's Track or Pipelines API. This creates or updates profiles immediately, which matters when a nurture sequence should start the same day.
Direct form integrations. Customer.io's native form integrations, including Typeform and Google Forms, capture sign-ups without middleware. Custom web forms work through the JavaScript snippet.
CSV or Google Sheet uploads. For batch lists from conferences, import directly. Customer.io's people import type upserts profiles with their attributes — it creates new people and updates existing ones rather than duplicating them — and can add everyone in the file to a segment in the same operation. A connected Google Sheet pulls in new rows as they are added, which is useful when a sales team is still typing in badge scans.
The import lives in the People section of your workspace. (If you are following an older guide, note that Customer.io renamed this area: what the API still calls profiles, the UI now calls People.)
Preventing unwanted syncing to Salesforce
Two guardrails keep these leads where you put them.
Tag them at creation. Assign standard attributes on the way in:
Setting these at ingestion rather than later is the part teams get wrong. A profile created without them is a profile your sync rules cannot see.
Keep lead_source values generic enough to survive the calendar. conference_2026 is useful for one year; conference plus a separate event-name attribute stays useful indefinitely and segments just as well.
Audit your outbound sync. If you use a Data-Out integration or webhooks to push data back to Salesforce, confirm the outbound triggers exclude profiles where sync_to_salesforce = false, or profiles missing a salesforce_id.
Worth knowing: a standard inbound Salesforce integration only pulls from Salesforce into Customer.io. It will not push a newly uploaded Customer.io profile back to Salesforce unless something has been explicitly configured to do so. The risk is not the default behavior — it is a Data-Out rule someone set up for a different purpose that happens to match your new records.
Using Customer.io as a nurturing ground
Treat the workspace as a nursery. Cold leads enter, receive a sequence built for people who have never spoken to sales, and sit in a segment that no Salesforce rule touches.
The promotion logic is where this earns its keep. Define what qualification looks like as an event rather than as a time delay — a demo booking, a pricing page visit, a reply, a threshold of email clicks — and trigger a campaign on it. That campaign does two things: flips sync_to_salesforce to true, and creates the lead in Salesforce via the integration or a webhook.
The result is that Salesforce only ever receives leads that have already demonstrated intent, with their full engagement history attached rather than a bare email address and an event name.
Frequently asked questions
Will importing to Customer.io create duplicate Salesforce records? Not on its own. A standard inbound Salesforce integration reads from Salesforce into Customer.io, not the reverse. Duplicates come from Data-Out rules or webhooks that push outbound, which is why auditing those is the second guardrail.
What attributes should I set on a cold lead? At minimum a source, a stage, and an explicit sync flag. The sync flag matters most: it lets you exclude by a positive condition rather than relying on the absence of a salesforce_id, which is easier to reason about and harder to break.
When should a lead graduate to Salesforce? On a behavioral trigger, not a timer. A lead that books a demo on day two should go immediately; a lead that opens nothing for ninety days should not go at all.
Getting the data model right first
The hard part of this setup is rarely the import. It is deciding which attributes you need before you have 4,000 profiles created without them, and agreeing with sales on what qualification means.
If you want help mapping that layer, our Customer.io practice covers implementation and data modeling, and our lifecycle marketing services cover the nurture program that runs on top of it.



