Prerequisites
- A Salesforce org (Developer Edition, Sandbox, or Production)
- Salesforce admin access (System Administrator profile or equivalent)
- A Customer.io account with:
- Pipelines CDP API write key
- App API bearer token
- A workspace in either US or EU region
If you don't have a Customer.io account yet, start a free trial — the integration works on every plan that includes API access.
Step 1 — Install the package
Install the managed package via the AppExchange listing or via the Salesforce CLI:
(Substitute the actual package version ID from the AppExchange listing.)
Step 2 — Configure your Customer.io credentials
- Open the App Launcher and search for CIO Pipelines
- Click the Settings tab
- Enter:
- API Key — your Customer.io Pipelines CDP write key (encrypted at rest)
- App API Key — your Customer.io App API bearer token (encrypted at rest)
- Site ID — your Customer.io Site ID
- Region — US or EU (must match your Customer.io workspace)
- Enabled — check this to activate the integration
- Click Save
- Click Test Connection to verify
Step 3 — Build your first event trigger
A common first config: sync Contact identifies on insert and update.
- Click the Triggers tab
- Click New Trigger
- Configure:
- Label: "Contact identify"
- Object: Contact
- After Insert: checked
- After Update: checked
- Event Type: identify
- User ID Field: Email
- Active: checked
- Click Save
- Add field mappings (Email → email, FirstName → first_name, LastName → last_name, plus any custom Customer.io traits)
- Click Save Mappings
Common patterns
| Salesforce trigger | Customer.io event | Why |
|---|---|---|
| Lead after insert/update, identify | identify | Sync new leads as Customer.io people |
| Opportunity after update, track "Stage Changed" | track | Trigger Customer.io journeys on stage change |
| Account after update, group | group | Sync company traits |
| Case after insert, track "Case Opened" | track | Drive support communications |
Step 4 — Drop the recruiter widgets on your Lightning pages
Contact Activity Panel
- Open Setup > Lightning App Builder
- Edit a Contact record page
- Drag CIO Pipelines: Contact Activity onto the layout
- (Optional) Drag CIO Pipelines: Engagement Banner (Contact) above the standard layout
- Save and Activate
Recruiter dashboard
- In Lightning App Builder, edit (or create) the home page for the CIO Pipelines app
- Drag onto the canvas:
- CIO Pipelines: My Active Candidates
- CIO Pipelines: Team Active Candidates
- CIO Pipelines: Pipeline Active Candidates
- CIO Pipelines: My / Team / Pipeline Candidates Banners
- Save and Activate
Step 5 — Configure recruiter scoping
Back in CIO Pipelines: Settings, scroll to Recruiter Configuration:
- Candidate Owner Field — keep
OwnerId(default), or pick a custom user-lookup likeRecruiter__c - Team Scope Strategy — Manager Hierarchy, Public Group, Queue, or All Users
- Team Group/Queue ID — required only for Public Group or Queue
- Unassigned Pool Owner ID — optional; surfaces unclaimed candidates in the Pipeline widget
Step 6 — Tune the messaging (optional)
In CIO Pipelines: Settings, scroll to Banner Templates. Each per-state message has a textarea. Edit any of them with your domain language. Example freight-broker rewrite of HOT_JOB:
The Settings page lists every supported {placeholder} and what it means.
Step 7 — Schedule the activity-log purge
One-time. Run this in Anonymous Apex:
This runs daily at 2:00am org time and deletes log records older than the configured retention window (30 days default).
Verification
- Outbound — make a Contact change and watch the Activity Log tab show the API call
- Inbound (Contact Activity) — open a Contact whose email exists in your Customer.io workspace; the panel should populate
- Inbound (Recruiter dashboard) — open the CIO Pipelines app home page; the My Active Candidates widget should populate
Troubleshooting
Integration not firing
- Settings > Enabled is checked
- The Event Trigger's Active checkbox is on
- Trigger DML events match the operation (After Insert for new records)
Connection test fails
- API Key and Site ID are correct
- Region matches your Customer.io workspace
- Remote Site Settings for
cdp.customer.io/cdp-eu.customer.ioare active
Widgets show no data
- The Contact's email matches a Customer.io customer
- The App API key is configured (separate from CDP write key)
- The
Customer_IO_App_APINamed Credential URL matches your region
Need help with a production rollout? We do white-glove setup at the Growth and Enterprise tiers.
Talk to us