IntegrationsCDPSalesforce CDP

Salesforce CDP

Salesforce Customer Data Platform (Data Cloud) for unifying customer data, building segments, and activating audiences across the Salesforce ecosystem.

Why route Salesforce CDP through Datafly Signal

  • Profiles are updated from the server, not the browser. Events reach Salesforce CDP even when a tracker blocker or a failed page unload would have dropped a client-side call, so the profile reflects what actually happened.
  • Delivery is batched, rate-limited, and retried. Signal buffers to Kafka, respects the Salesforce CDP rate limit, and retries on 429 or transient failure rather than dropping the event.
  • One consent decision governs every destination. Salesforce CDP is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.

Prerequisites

Complete these steps in Salesforce Data Cloud before configuring Signal.

Create an Ingestion API connector

In Data Cloud Setup > Ingestion API, create a connector (for example Datafly_Signal) and upload a schema whose object (for example signal_events) declares the fields listed under Event Mapping: EventId (text), EventType (text), EventDateTime (datetime), identity, page and property fields.

Create a data stream

Create an Ingestion API data stream from the connector and object, with EventId as the primary key and EventDateTime as the event time field, and map it to your data model objects.

Obtain a Data Cloud access token

With a Connected App that has the cdp_ingest_api and api scopes, get a Salesforce token and exchange it at /services/a360/token for a Data Cloud token. The response gives the access_token and the Data Cloud instance_url Signal needs.

Configuration

FieldTypeRequiredDescription
instance_urlstringYesThe Data Cloud tenant host returned as instance_url by the Data Cloud token exchange (for example abc123xyz.c360a.salesforce.com), without https://.
source_api_namestringYesThe API name of the Ingestion API connector (source) in Data Cloud Setup.
object_namestringYesThe object name from the schema uploaded to the Ingestion API connector.
access_tokensecretYesA Data Cloud access token (cdp_ingest_api scope) from the Data Cloud token exchange.
client_idstringNoThe Connected App consumer key. Not used until Signal performs the token exchange itself.
client_secretsecretNoThe Connected App consumer secret. Not used until Signal performs the token exchange itself.
⚠️

The Data Cloud access token expires. Signal cannot yet perform Salesforce’s two-step token exchange (#1534), so the token must be refreshed and updated on the integration outside Signal; once it expires, deliveries fail with 401 until it is replaced.

Signal Setup

Quick Setup

  1. Navigate to Integrations in the sidebar.
  2. Open the Integration Library tab.
  3. Find Salesforce CDP under the CDP category.
  4. Click Install, and fill in the required fields with the credentials gathered above.
  5. Click Install Integration to create the integration with a ready-to-use default configuration.

API Setup

curl -X POST http://localhost:8084/v1/admin/integration-catalog/salesforce_cdp/install \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Salesforce CDP",
    "variant": "default",
    "config": {
      "instance_url": "abc123xyz.c360a.salesforce.com",
      "source_api_name": "Datafly_Signal",
      "object_name": "signal_events",
      "access_token": "xxxxxxxxxxxxxxxxxxxx"
    },
    "delivery_mode": "server_side"
  }'

Event Mapping

Events are streamed to POST https://{instance_url}/api/v1/ingest/sources/{source_api_name}/{object_name} as records in a data array (at most 200 KB per request). Every field is inside its own record:

FieldValue
EventIdThe Signal event ID (use it as the primary key)
EventTypeThe Signal event name (web_page_view for page views)
EventDateTimeISO 8601 event time (use it as the event time field)
IndividualId, AnonymousId, ContactPointEmailAddressIdentity
PageUrl, PageTitle, PageReferrerPage views
documented propertiesPascalCase: OrderId, TotalAmount, CurrencyIsoCode (upper-cased), Tax, Shipping, Coupon, …; line items as comma-joined ItemIds and ItemNames

Upload an Ingestion API schema whose object declares these fields (text, number and datetime types). Presets: Retail, Default, Insurance, B2B / SaaS and Travel.

Identity

FieldSourceNotes
IndividualIddatafly.identify() user IDThe authenticated customer identifier.
ContactPointEmailAddressidentify traitsTrimmed and lower-cased, sent as it is: Data Cloud Identity Resolution matches on the contact point.
AnonymousIdDatafly anonymous identifierPresent on every record, so anonymous engagement joins the profile later.

Salesforce CDP events should typically be sent under the marketing category. Data Cloud has its own Consent API which can be populated separately; Signal forwards the visitor’s CMP consent state in every event so Data Cloud-side consent enforcement can be configured to honour it.

Delivery

Events are delivered server-side from your Datafly Signal infrastructure directly to the Salesforce Data Cloud Ingestion API. No client-side scripts are loaded for this integration.

Verify it’s working

  1. After installing the integration, trigger a test event from your website or via the Signal event API.
  2. In Salesforce, navigate to Data Cloud > Data Explorer and query the dataset you configured to verify records were ingested.
  3. Check Data Cloud > Identity Resolution to verify the test user was matched or created.
  4. In Signal, check Live Events to confirm delivery with a 200 response status.

Troubleshooting

SymptomPossible CauseResolution
401 UnauthorizedExpired or invalid Data Cloud access tokenObtain a new token through the Data Cloud token exchange and update the integration
403 ForbiddenMissing OAuth scopesEdit the Connected App and add cdp_ingest_api and api scopes
404 Not FoundWrong instance, connector or object nameVerify the instance URL from the token exchange and the connector and object names in Data Cloud Setup > Ingestion API
Token refresh failureConnected App deactivatedEnsure the Connected App status is Active in Salesforce Setup > App Manager
Schema validation errorData format mismatchEnsure the event properties match the schema defined in the Data Cloud Ingestion API source

Visit Salesforce Data Cloud documentation for full API reference and Ingestion API setup details.

See also

  • Pardot — Salesforce marketing automation
  • HubSpot — alternative CRM platform
  • ActionIQ — enterprise CDP alternative