Skip to content

Salesforce

Signals reads leads and opportunities from Salesforce on a schedule and sends the fields you mapped on to your ad platforms.

Two Salesforce modules are supported: Leads and Opportunities. Leads holds the details destinations match on, and Opportunities holds the outcome.

This is the reverse of the Salesforce destination connector, which writes leads captured on an ad platform into your CRM.

  • A Salesforce account holding the records you intend to sync, in the module you intend to read: Leads or Opportunities. The fields you intend to map must already exist.
  • Administrator access to your Salesforce org, on an edition that includes API access. You need it to authorize Datahash and grant read access to the modules and records you map.
  • A single-select picklist on the module you sync holding each record’s stage, such as New, Contacted, Qualified, Won or Lost. Each value maps to a conversion event, so a record left on a stale stage reports the wrong one.

In Studio, open Sources, find the CRM category, and click the Salesforce tile. This connector uses single sign-on, so no Salesforce credentials are entered into Datahash.

  • Click Sign in with Salesforce.
  • Sign in and click Allow on the Salesforce consent screen.

Sign in as a user who can already read the module you intend to use. Datahash reads as that user, so a module it cannot see will not appear in the list.

If you work in a sandbox as well as production, check which org you have signed into before mapping anything. Records that look wrong are usually the wrong org rather than a wrong mapping.

Select the Integration Type based on where the data needs to be sent. The options are Offline Events, Audience, Meta CAPI CRM, Google Leads, TikTok Leads, Snapchat Leads and LinkedIn Leads. The choice decides which fields you are asked to map and which destinations the connection can feed, so settle it first. Then choose the module Signals reads from, one of Leads or Opportunities and give the instance a name.

Map your Salesforce fields onto the schema Signals expects. Each field is a dropdown of your own fields, so nothing has to be renamed in the CRM. What you are asked to map depends on the integration type.

GroupFields
ConfigurationEvent name, event time, last modified date, lead lifecycle stage.
Personal informationEmail, phone, first name, last name, city, state, country, postcode, gender, date of birth, Facebook click ID, Google click ID, OpenAI identifier, source URL.
ProductTotal value, currency, product type, name, category, ID, brand, price, quantity, transaction ID, number of items.

For lead outcomes, map the opportunity stage or the lead status.

Click Test Connection before finishing. It checks both that the credentials still work and that the mapped fields actually contain data, so a mapping pointed at an empty field fails here rather than silently later.

One instance is configured for one module. To read another module, configure it on a new instance from the Manage existing instance table. To change an existing one, open it from the Manage existing instance table, click the edit option in the menu to the top right, update the fields and click Finish.

Only the fields you map are read. Personal identifiers are normalized and SHA-256 hashed before they are sent to any destination.

Email, phone, name and location are what destinations match on. Value, currency and product fields describe the conversion rather than the person, so they do not affect match rates.

  • If you map a platform lead ID such as the Meta Lead ID, keep that field as text. A numeric field truncates long IDs, which is the most common cause of lead conversions never matching.
  • Confirm you are in production and not a sandbox before mapping.
  • Ensure the module holds personal information such as email address and phone number. Destinations weight these highest, so records without them match at a much lower rate.
  • Maintaining consistent formatting in Salesforce helps match rates: email addresses in lowercase, phone numbers in E.164 format, and no trailing spaces.

Match rates are low. Map more identifiers and fix formatting at source. A hash only matches if both sides normalized the value the same way.