Contact Activity Panel
A Lightning record-page panel that gives every rep, AE, recruiter, broker, or CSM a real-time view of a single Contact's Customer.io engagement — without leaving the Contact record.
Engagement banner
A prominent colored banner at the top of the panel, driven by the strongest available signal for this Contact. Priority is page views first, then email engagement, then quiet states.
| State | Trigger | Example message |
|---|---|---|
| HOT | Key page viewed in the last hour | Back on pricing — viewed /pricing/enterprise 12 minutes ago |
| WARM | Key pages viewed today (1–24h ago) | Browsing your site — 4 key pages today |
| ENGAGED | Key page viewed in the last 7 days | Recently active — viewed /case-studies 4 days ago |
| WARM | Email opened or clicked in the last 24h | Email engagement — opened your last campaign 3 hours ago |
| QUIET | Anything older | Low engagement — last activity 14 days ago |
| NONE | No activity at all | No recent Customer.io activity |
Five KPI cards
- Last Sent — most recent campaign or transactional email delivered
- Last Opened — most recent open event
- Last Clicked — most recent click event
- Key Pages Today — count of page views matching your configurable key-page URL pattern in the last 24h
- Last Page View — most recent page view, with URL and timestamp
Recently Viewed Key Pages
A list of the URLs the contact hit on your site, ordered most-recent
first. Pages are classified as "key pages" by a configurable substring
list. Defaults include broad terms like
pricing, demo, contact, signup, trial, job, career, listing, product, plan
— admins extend or replace the list per industry.
Email activity datatable
Sent, delivered, opened, clicked, bounced, failed, unsubscribed — the most recent activities, in a sortable table.
Where it lives
Drag the CIO Pipelines: Contact Activity component onto any Contact Lightning Record Page in the Lightning App Builder. Save and activate. No code, no profile assignment.
Team Dashboard Widgets
Three list widgets and four engagement banners that surface aggregate Customer.io signal across users, teams, and the entire pipeline. Master labels below are the package defaults — every label is admin-editable in five minutes.
Three list widgets
| Widget | Default label | Scope |
|---|---|---|
cioMyActiveCandidates | CIO Pipelines: My Active Contacts | Contacts owned by the running user with recent Customer.io engagement |
cioTeamActiveCandidates | CIO Pipelines: Team Active Contacts | Contacts owned by the user's team |
cioPipelineActiveCandidates | CIO Pipelines: Pipeline Active Contacts | Every Contact the user can see via sharing |
Four engagement banners
| Banner | Default label | Where it lives |
|---|---|---|
cioContactBanner | CIO Pipelines: Engagement Banner (Contact) | Contact record page (full-width above layout) |
cioMyEngagementBanner | CIO Pipelines: My Contacts Banner | App / Home page |
cioTeamEngagementBanner | CIO Pipelines: Team Contacts Banner | App / Home page |
cioPipelineEngagementBanner | CIO Pipelines: Pipeline Contacts Banner | App / Home page |
Team scoping
The Team widget supports four strategies, configurable in CIO Pipelines: Settings:
- Manager Hierarchy (default) — uses
User.ManagerId - Public Group — pass any group's ID
- Queue — pass any queue's ID
- All Users — every user in the org
Engagement scoring
Contacts rank by recency × intensity × frequency, weighted so page views (especially key-page views) outrank pure email engagement. Teams care most about prospects in active evaluation, so that's what surfaces first.
Outbound CDP Integration
Every Salesforce DML event you care about — record creation, field changes, ownership transfers, deletions — flows into Customer.io's Pipelines CDP API in real time. Configurable per object, per event, per field, per filter.
What gets sent
| CDP event | Salesforce trigger | Use case |
|---|---|---|
identify | After insert / update on Contact, Lead, Account | Sync person/company traits to Customer.io |
track | After insert / update / delete / undelete on supported objects | Send custom events (Status changed, Stage moved, Case opened) |
group | After insert / update on Account-related records | Associate people with companies (B2B) |
Configuration without code
Admins build the integration in the CIO Pipelines Lightning app:
- Configure credentials (Pipelines CDP write key, Site ID, Region — both endpoints ship pre-registered)
- Build event triggers (object, DML events, Customer.io event type, filter conditions, batch mode)
- Map fields (Salesforce field → Customer.io payload field, with DIRECT, UPPERCASE, LOWERCASE, DATE_FORMAT transforms)
- Add filters (visual filter builder, JSON-stored, evaluated by
CIO_FilterEvaluator)
Async, governor-safe execution
All HTTP callouts run in Queueable
context — never in the trigger transaction. Failed callouts publish
CIO_Retry_Event__e, which
CIO_RetryHandler consumes with
configurable backoff.
Audit trail
Every API call (success or failure) writes a
CIO_Activity_Log__c record with the
trigger that fired it, the Salesforce record ID, sanitized request and
response bodies, HTTP status, and timestamp. Bodies are retained for
30 days by default (admin-tunable, 7-day floor).
Inbound webhooks (bonus)
CIO Pipelines also exposes a hardened inbound webhook receiver at
/services/apexrest/ciopipelines/cio/webhook/.
Signatures are HMAC-SHA256, verified with constant-time comparison.
Customization & Per-Widget Settings
Every user-facing label, every banner message, every KPI label, every URL pattern, every team scope — admin-controlled. CIO Pipelines ships with sensible defaults, and the same code runs verticals from B2B sales and recruiting to freight brokerage, real estate, e-commerce, and financial services.
Per-widget settings
The CIO Pipelines: Settings page exposes a configuration panel for every widget — time window, max items, included engagement states, refresh cadence, and per-widget toggles. All settings are persisted in a single JSON blob; admins never edit JSON.
Banner template editing
Every banner has per-state message templates exposed as plain-text
textareas. Supported placeholders include
{name},
{minutes},
{hours},
{pageTitle},
{pageUrl},
{count}, and
{state}.
Industry-agnostic defaults
The package ships with sensible, broad defaults, and every label is rewritable in five minutes. A B2B SaaS AE might rewrite the HOT_KEY template to:
{name} is back on pricing — viewed {pageTitle} {minutes} min ago — reach out now.
A freight broker rewrites it to:
{name} is reviewing freight options — viewed {pageTitle} {minutes} min ago — quote them now.
A real estate broker:
{name} is browsing listings — viewed {pageTitle} {minutes} min ago.
How it works
CIO Pipelines is a Salesforce-native managed package. There's no middleware, no external server, no proxy. Outbound flows from Apex triggers to Customer.io's CDP API. Inbound flows from Customer.io's App API into Lightning Web Components. Both directions respect Salesforce sharing, FLS, and platform limits.
What's in the box
- 40 production Apex classes, 36 test classes, comprehensive coverage
- 17 Lightning Web Components covering admin and end-user UIs
- 5 custom objects: Settings, Event Trigger, Field Mapping, Activity Log, Retry Event (Platform Event)
- 2 permission sets:
CIO_Admin(full configuration),CIO_ReadOnly(end-user-facing)
API regions
| Region | CDP URL | App API URL |
|---|---|---|
| US | https://cdp.customer.io/v1 | https://api.customer.io |
| EU | https://cdp-eu.customer.io/v1 | https://api-eu.customer.io |
Ready to put Customer.io's signal where your Salesforce team works?
Install in Sandbox