Salesforce Customer Data Platform (CDP) is a data management tool designed to unify and centralize customer data from various sources across an organization. It helps create a comprehensive, single view of each customer by consolidating data such as demographic information, interactions, purchase history, and preferences. Salesforce CDP supports powerful segmentation and audience targeting, enabling personalized marketing and engagement at scale. Built on Salesforce’s robust platform, it integrates seamlessly with other Salesforce products, allowing businesses to leverage customer insights across sales, service, and marketing channels. The platform emphasizes data privacy and compliance, ensuring customer data is securely managed and used responsibly.
- Enhanced Data Control: Greater control over data transformations and routing, optimizing data quality and relevance in Salesforce CDP.
- Improved Data Privacy Compliance: MetaRouter provides control over data handling and routing, helping organizations meet privacy regulations like GDPR and CCPA when integrating with Salesforce CDP.
- Event-Based Data Mapping: Supports a variety of event types (e.g.,
identify, page, order_completed, product_added), ensuring data is directed to the Salesforce CDP Ingestion API endpoint.
- Automated Data Consistency: Ensures that data is formatted consistently across various events, improving data quality and segmentation capabilities in Salesforce CDP.
- Batch Data Ingestion: Processes data in batches of 100, optimizing for efficient handling of large data volumes.
- Data Transformation Constraints: The integration relies on specific data mappings. Data not aligned with these mappings might result in errors or data loss.
- Asynchronous Data Processing: Salesforce CDP processes data ingestion asynchronously, typically every three minutes, so data might not be immediately available for real-time use.
To configure your Salesforce Customer Data Platform (CDP) integration, you'll need to set up a connected app and obtain specific parameters. Here's how to acquire each:
- Client Identifier: This is a unique identifier for your Salesforce CDP instance. It's typically assigned during the setup of your CDP environment. If you're unsure of this value, consult your Salesforce administrator or refer to your organization's Salesforce setup documentation.
- Ingestion API Name: This is the name assigned to your ingestion API within Salesforce CDP. It's defined when you create an Ingestion API data stream. For guidance on setting up data streams, refer to Salesforce's documentation on Get Started with Ingestion API.
- Client ID: This is generated when you create a connected app in Salesforce. To set up a connected app and obtain the client ID, follow Salesforce's instructions on Enable OAuth Settings for API Integration.
- User Name: This is the username of the Salesforce account used for API access. Ensure that this user has the necessary permissions to interact with Salesforce CDP APIs. For information on user roles and permissions, see User Roles and Permission Sets in Data Cloud.
- Here are the key roles recommended for users interacting with CDP APIs:
- Data Cloud Admin: This role grants full access to Data Cloud, allowing the user to configure and manage ingestion processes, create datasets, and control data mappings. This role is ideal for administrators who need full control over data ingestion and management.
- Data Cloud Integrator: This role is suitable for users responsible for data integration. It provides access to data ingestion APIs, enabling the user to connect and send data to Salesforce CDP. This role is recommended for users who will be setting up and maintaining data connections with MetaRouter.
- Login URL: This URL depends on your Salesforce environment:
- Production:
https://login.salesforce.com
- Sandbox (test environment):
https://test.salesforce.com
Use the URL corresponding to your environment.
- Private Key: This is part of the certificate used for secure authentication. You'll need to generate a private key and a digital certificate, then upload the certificate when setting up your connected app. Salesforce provides guidance on creating a private key and certificate in their Private Key Certificate Documentation.
From the integration library, add a Salesforce CDP integration. Then, fill out the Connection Parameters:
| Connection Parameter | Description |
|---|
CLIENT_IDENTIFIER | A unique identifier for the client’s environment. |
INGESTION_API_NAME | The specific name for the ingestion API being used. |
CLIENT_ID | The client ID for Salesforce CDP authentication. |
USER_NAME | The username associated with the Salesforce CDP account. |
LOGIN_URL | The login URL for Salesforce CDP (varies by environment). |
PRIVATE_KEY | The private key for secure authentication access. |
Global mappings will be applied to all events. If your parameter names do not match the Expected Inputs provided, you will need to overwrite the Inputs provided with your own.
| Output Key | Description | Expected Input |
|---|
anonymous_id | String: Unique identifier for anonymous users | anonymousId |
created | DateTime: Timestamp of the event creation | timestamp |
| Output Key | Description | Expected Input |
|---|
path | String: URL path of the page visited | context.page.path |
title | String: Title of the page visited | context.page.title |
url | String: Full URL of the page visited | context.page.url |
referrer | String: Referring URL of the page visited | context.page.referrer |
event_id | String: Unique identifier for the event | messageId |
| Output Key | Description | Expected Input |
|---|
checkout_id | String: Identifier for the checkout session | properties.checkout_id |
total | Number: Total amount of the order | properties.total |
order_id | String: Identifier for the order | properties.order_id |
revenue | Number: Revenue generated from the order | properties.revenue |
shipping | Number: Shipping cost for the order | properties.shipping |
tax | Number: Tax amount for the order | properties.tax |
coupon | String: Coupon code applied to the order | properties.coupon |
event_id | String: Unique identifier for the event | messageId |
| Output Key | Description | Expected Input |
|---|
cart_id | String: Identifier for the cart | properties.cart_id |
product_id | String: Identifier for the product | properties.product_id |
sku | String: Stock keeping unit for the product | properties.sku |
category | String: Category of the product | properties.category |
name | String: Name of the product | properties.name |
brand | String: Brand of the product | properties.brand |
variant | String: Variant of the product | properties.variant |
price | Number: Price of the product | properties.price |
quantity | Number: Quantity of the product added | properties.quantity |
coupon | String: Coupon applied to the product | properties.coupon |
position | Number: Position of the product in the list | properties.position |
url | String: URL of the product | properties.url |
image_url | String: URL of the product image | properties.image_url |
event_id | String: Unique identifier for the event | messageId |
| Output Key | Description | Expected Input |
|---|
product_id | String: Identifier for the viewed product | properties.product_id |
sku | String: Stock keeping unit for the viewed product | properties.sku |
category | String: Category of the viewed product | properties.category |
name | String: Name of the viewed product | properties.name |
brand | String: Brand of the viewed product | properties.brand |
variant | String: Variant of the viewed product | properties.variant |
price | Number: Price of the viewed product | properties.price |
coupon | String: Coupon applied to the viewed product | properties.coupon |
position | Number: Position of the product in the list | properties.position |
url | String: URL of the viewed product | properties.url |
image_url | String: URL of the product image | properties.image_url |
event_id | String: Unique identifier for the viewed event | messageId |
| Output Key | Description | Expected Input |
|---|
list_id | String: Identifier for the product list | properties.list_id |
category | String: Category of the product list | properties.category |
event_id | String: Unique identifier for the event | messageId |
| Output Key | Description | Expected Input |
|---|
cart_id | String: Identifier for the cart | properties.cart_id |
product_id | String: Concatenated product IDs | N/A - Expression |
sku | String: Concatenated SKUs | N/A - Expression |
category | String: Concatenated categories | N/A - Expression |
name | String: Concatenated product names | N/A - Expression |
brand | String: Concatenated brands | N/A - Expression |
variant | String: Concatenated variants | N/A - Expression |
price | String: Concatenated prices | N/A - Expression |
quantity | String: Concatenated quantities | N/A - Expression |
coupon | String: Concatenated coupons | N/A - Expression |
position | String: Concatenated positions | N/A - Expression |
url | String: Concatenated URLs | N/A - Expression |
image_url | String: Concatenated image URLs | N/A - Expression |
event_id | String: Unique identifier for the event | messageId |
| Output Key | Description | Expected Input |
|---|
user_agent | String: User agent string of the device | context.userAgent |
user_id | String: Unique identifier for the user | userId |
email | String: User's email address | traits.email |
pinterest_id | String: Pinterest identifier | context.providers.pinterest.derived_epik |
tradedesk_id | String: Trade Desk identifier | context.providers.theTradeDesk.ttd_id |
ip_address | String: IP address of the user | context.ip |
For your convenience, recommended IDs are mapped as Global parameters to ensure they are added to every event.
| Attribute | Example | Sync Injector Required? |
|---|
| anonymous_id | a7f5d3b1-9c8e-4e1d-842b-4f9d3a2f1b45 | No |