Skip to content
Setup guide

From sandbox install to live widgets — in ten minutes.

Every step uses standard Salesforce tooling. No command-line builds beyond sf, no external services beyond Customer.io itself.

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:

# Authenticate to your org sf org login web --alias my-org # Install the package sf package install --package "04t..." --target-org my-org --wait 10 # Assign the admin permission set sf org assign permset --name CIO_Admin --target-org my-org # Open the org sf org open --target-org my-org

(Substitute the actual package version ID from the AppExchange listing.)

Step 2 — Configure your Customer.io credentials

  1. Open the App Launcher and search for CIO Pipelines
  2. Click the Settings tab
  3. 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
  4. Click Save
  5. Click Test Connection to verify

Step 3 — Build your first event trigger

A common first config: sync Contact identifies on insert and update.

  1. Click the Triggers tab
  2. Click New Trigger
  3. Configure:
    • Label: "Contact identify"
    • Object: Contact
    • After Insert: checked
    • After Update: checked
    • Event Type: identify
    • User ID Field: Email
    • Active: checked
  4. Click Save
  5. Add field mappings (Email → email, FirstName → first_name, LastName → last_name, plus any custom Customer.io traits)
  6. Click Save Mappings

Common patterns

Salesforce triggerCustomer.io eventWhy
Lead after insert/update, identifyidentifySync new leads as Customer.io people
Opportunity after update, track "Stage Changed"trackTrigger Customer.io journeys on stage change
Account after update, groupgroupSync company traits
Case after insert, track "Case Opened"trackDrive support communications

Step 4 — Drop the recruiter widgets on your Lightning pages

Contact Activity Panel

  1. Open Setup > Lightning App Builder
  2. Edit a Contact record page
  3. Drag CIO Pipelines: Contact Activity onto the layout
  4. (Optional) Drag CIO Pipelines: Engagement Banner (Contact) above the standard layout
  5. Save and Activate

Recruiter dashboard

  1. In Lightning App Builder, edit (or create) the home page for the CIO Pipelines app
  2. 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
  3. Save and Activate

Step 5 — Configure recruiter scoping

Back in CIO Pipelines: Settings, scroll to Recruiter Configuration:

  1. Candidate Owner Field — keep OwnerId (default), or pick a custom user-lookup like Recruiter__c
  2. Team Scope Strategy — Manager Hierarchy, Public Group, Queue, or All Users
  3. Team Group/Queue ID — required only for Public Group or Queue
  4. 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:

{name} is reviewing freight options — viewed {pageTitle} {minutes} min ago — quote them now.

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:

System.schedule( 'CIO Activity Log Purge', '0 0 2 * * ?', new ciopipelines.CIO_LogPurgeBatch() );

This runs daily at 2:00am org time and deletes log records older than the configured retention window (30 days default).

Verification

  1. Outbound — make a Contact change and watch the Activity Log tab show the API call
  2. Inbound (Contact Activity) — open a Contact whose email exists in your Customer.io workspace; the panel should populate
  3. 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.io are 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_API Named 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