Salesforce Destination
Overview
The Salesforce destination writes evaluation results to your Salesforce Lead, Contact, and Account objects. TrailSpark maps scores, reasoning, and evaluation dates to custom fields you define in Salesforce, and optionally pushes buying-group coverage and role data when you enable that section.
Prerequisites
- Salesforce integration connected (Settings > CRM Integration > Connect tab)
- Custom fields created in Salesforce for TrailSpark data
- Admin or Owner role in TrailSpark
- Field-level security in Salesforce allowing write access
Custom Fields in Salesforce
Create these custom fields on both the Lead and Contact objects:
| Field Label | Suggested API Name | Data Type |
|---|---|---|
| TrailSpark Score | TrailSpark_Score__c | Text (values: hot, warm, cold) |
| TrailSpark Evaluation Date | TrailSpark_Evaluation_Date__c | DateTime |
| TrailSpark Reasoning | TrailSpark_Reasoning__c | Long Text Area |
For account propensity, create on the Account object:
| Field Label | Suggested API Name | Data Type |
|---|---|---|
| TrailSpark Propensity | TrailSpark_Propensity__c | Text (values: high_propensity, medium_propensity, low_propensity) |
Buying-group fields are documented in the section below — add them only if you plan to use that feature.
Configuration
Go to Settings > CRM Integration > Destinations tab.
Destination Settings
- Send Evaluations to Salesforce -- Toggle to enable/disable the destination
- Salesforce Integration -- Select which connected Salesforce instance to use
- Create Records if Not Found -- When enabled, TrailSpark creates new Lead or Contact records if no match exists. You can filter which score levels trigger creation (Hot, Warm, Cold)
Field Mapping
The field mapping section has two tabs: Lead Object and Contact Object. For each, map three required fields:
| UI Label | Description |
|---|---|
| Score Field | Where the evaluation score is stored |
| Evaluation Date Field | Where the evaluation timestamp is stored |
| Reasoning Field | Where the AI reasoning is stored |
TrailSpark loads your Salesforce field metadata automatically. Select fields from the dropdown — fields appear with both their label and API name.
Account Propensity Score
The propensity score card configures where account-level propensity (high/medium/low) is written:
- Account Propensity Field (primary) -- Written to the Account object when a linked Account exists
- Lead Propensity Field (fallback) -- Written to the Lead object when no Account is linked
Both fields are optional.
Buying Group Fields
Enable the Push buying-group fields toggle to push coverage and role data alongside evaluation scores. All fields in this section are optional — they write only when you map them.
Contact properties
| UI Label | Written to | What it contains |
|---|---|---|
| Buying-group roles (Lead) | Lead object | The lead's assigned role names, semicolon-separated. Also used as the default for Contact records unless a Contact override is set. |
| Buying-group roles (Contact override) | Contact object | Optional. Overrides the Lead field for Contact records specifically. |
| CRM Role Source Field | Read from Contact | TrailSpark reads this field from your Salesforce Contacts. Set it to a field where you've recorded a role; TrailSpark uses it as the authoritative assignment. |
Account properties
| UI Label | Written to | What it contains |
|---|---|---|
| Buying-group stage | Account | Dormant, Forming, or Complete |
| Engagement completeness (%) | Account | Share of required roles with an actively engaged person |
| Known completeness (%) | Account | Share of required roles with any person assigned |
| People still needed | Account | Count of additional people needed to complete the group |
| Missing roles | Account | Role names not yet filled (semicolon-separated) |
| Engaged roles | Account | Role names currently active (semicolon-separated) |
| Propensity as-of date | Account | Date the propensity score was last evaluated |
| At-risk status | Account | "At Risk" when high propensity meets stalled engagement; otherwise "Current" |
| Renewal health | Account | Health signal for renewal-ICP accounts: Healthy, Cooling, Fading, Cold, or Pending |
For what these values mean, see Account coverage.
You do not need to map every buying-group field. Map only the ones you plan to act on in your Salesforce workflows or reports.
Dual-Object Support
Salesforce stores people as Leads (unconverted) and Contacts (converted). TrailSpark matches by email address and writes to whichever object the lead exists on. You configure field mappings independently for each object.
Troubleshooting
| Issue | Resolution |
|---|---|
| Field not in dropdown | Verify the field exists on the correct object and field-level security allows API access |
| Data not writing | Check that the destination is enabled, integration is connected, and no Salesforce validation rules are blocking the update |
| Wrong record updated | Review duplicate records in Salesforce -- TrailSpark matches by email |
| Buying-group fields not writing | Confirm the "Push buying-group fields" toggle is on and the field is mapped |
Next Steps
- HubSpot Destination
- Airtable Destination
- Account coverage -- Understand the values being pushed
