Skip to main content

Salesforce

Installing the Salesforce App

To enable this integration, you must have permission to install apps in your Salesforce account.

Go to the Integrations page — this link takes you straight to the Salesforce connection flow. Click Connect to get started.

Connect to Salesforce

A screen will appear prompting you to install the Salesforce app in your workspace. Click "OK" to continue.

Required Salesforce Profile

Important: The Salesforce user who connects Syft must be able to authorize the connected app and (for automatic custom-field setup) manage metadata. Use one of:

Option 1: Use Existing Profile

  • System Administrator profile

Option 2: Create Custom Profile

If you don't have System Administrator access, create a new profile by:

  1. Clone the Standard User profile
  2. Add these Administrative Permissions:
    • Modify All Data
    • Customize Application
    • Manage Profiles and Permission Sets

Without these permissions, Syft will not be able to create and sync custom properties automatically. For the full OAuth scope list, object access, custom fields, and read/write behavior, see Security, permissions, and data access.

Exporting data to Salesforce

Syft can export account and visitor-level data to Account, Lead, and Contact records. There are a couple of options that control what is automatically exported:

  • Update existing Accounts and Leads: When enabled, this option enriches your existing Account and Lead records with behavioral data. Syft creates custom fields with the Syft…__c API name pattern (see Custom fields Syft creates and Exported Fields). This option is enabled by default.

    Configure Salesforce
  • Create new Leads for identified visitors: Enable this option by creating a CRM motion.

    Create CRM Motion

Pipeline Stage

Syft computes a Pipeline Stage for each account based on opportunity data from Salesforce. Use this stage to qualify and prioritize accounts for human review, or to trigger Motion automations. The stage is evaluated in priority order:

StageCondition
CustomerAccount type is "Customer", or any opportunity is marked as won
OpportunityAny opportunity is still open (not closed)
Lost OpportunityAll opportunities are closed
ProspectAccount exists in Salesforce

Security, permissions, and data access

This section describes exactly how Syft uses Salesforce: which OAuth scopes and profile permissions are required, which custom fields Syft creates, and what Syft reads and writes. Share it with your security or IT team when reviewing the integration.

OAuth scopes Syft requests

When you click Connect, Syft starts Salesforce’s OAuth 2.0 web server flow against your org’s login host (production, sandbox, or a configured My Domain host). The authorize request asks for these scopes (Salesforce UI label, then scope value):

Salesforce labelScope valueWhy Syft requests it
Manage user data via APIsapiREST and SOAP calls against Account, Contact, Lead, Opportunity, User, Profile, and related Metadata / Tooling APIs
Access the Salesforce API Platformsfap_apiAccess to Salesforce API Platform endpoints used by the connected app configuration
Access the identity URL serviceidIdentity / userinfo for the connecting user (org and user identifiers)
Perform requests at any timerefresh_tokenLong-lived refresh token so Syft can sync without re-prompting the user
Full accessfullBroad access equivalent to the connecting user’s permissions (covers REST, Metadata, and Chatter Connect calls Syft makes)
Access unique user identifiersopenidOpenID Connect identity token alongside the access token

All of the scopes above are requested at connect time (baseline). Syft does not request additional scopes later for individual features.

Official Salesforce references:

Profile and object permissions

OAuth scopes alone are not enough: Salesforce still enforces the connecting user’s profile (and any permission sets).

Permission / accessBaseline or feature-specificUsed for
Ability to install / authorize connected appsBaselineCompleting the OAuth connect flow
System Administrator, or administrative permissions Modify All Data, Customize Application, and Manage Profiles and Permission SetsFeature-specific: automatic custom-field setupCreating Syft custom fields via the Metadata API and assigning field-level security on the connecting user’s profile
Read (and typically edit) on Account, Contact, LeadBaseline for CRM syncMatching, enriching, creating, and updating CRM records
Read on OpportunityBaseline for pipeline stageComputing Syft Pipeline Stage from opportunity win/loss/open state
Read on User / Profile (and Tooling Profile.FullName)Feature-specific: custom-field setupResolving the connecting user’s profile so Syft can set field-level security
Chatter / feed write on Account, Contact, and Lead feedsFeature-specific: session timeline postsPosting FeedItems via the Chatter Connect API when motions enable timeline notes

If automatic field setup fails with a permissions warning, reconnect with a System Administrator (or the custom profile above), then re-run field sync from Integrations.

Salesforce references:

Custom fields Syft creates

On first successful connect (and when field mappings change), Syft upserts custom fields on Account, Contact, and Lead through the Metadata API (upsertMetadata on CustomField). Only API names ending in __c are created.

  • Labels for Syft-owned properties use the Syft - … prefix (for example, Syft - Matched Signals).
  • Default API names follow the Syft…__c pattern (for example, SyftIntents__c, SyftCreationTrigger__c). The authoritative customer-facing inventory is in Exported Fields below; orgs can also map additional destination keys in Sync Properties.
  • After fields are created or updated, Syft sets field-level security on the connecting user’s profile so each new field is readable and editable (readable=true, editable=true via Metadata updateMetadata on that Profile). Syft does not automatically grant FLS to every profile in the org—share those fields with other profiles via Salesforce Setup if needed.

What Syft reads

Syft reverse-syncs Salesforce data into Syft so accounts, people, owners, and pipeline stage stay current. Reads use the REST query API (/services/data/v59.0/query/).

ObjectFields Syft queries (baseline)Product flow
AccountId, Name, LastModifiedDate, Website; owner sync also reads OwnerId, Owner.Email, Owner.NameMatch companies by website/name; sync account owners into Syft
ContactAccountId, Id, Name, Title, Email, OwnerId, Owner.Name, CreatedDate, LastActivityDate, LastModifiedDate, MailingCity, MailingState, MailingCountryReverse-sync contacts for matching and enrichment
LeadId, Name, Title, Email, OwnerId, Owner.Name, Status, CreatedDate, LastActivityDate, LastModifiedDate, City, State, CountryReverse-sync leads for matching and enrichment
OpportunityId, CloseDate, Type, IsClosed, IsWon, LastModifiedDate, AccountIdCompute Pipeline Stage
User / ProfileConnecting user’s ProfileId / Profile.Name; Tooling FullName for that profileCustom-field setup and FLS assignment
EntityDefinition / field metadataField API names, types, labelsDetect existing custom fields before create/update

If your org marks certain fields unreadable for the integration user, Syft strips those columns from SOQL (via org sfUnreadableFields settings) rather than failing the whole sync.

What Syft writes

Syft writes only when export settings or Motions call for it. Writes use the REST sObject API and, for buffered updates, the Composite SObject Collections API.

OperationAPIObjects / fieldsProduct flow
Create recordPOST /sobjects/Account (also Contact, Lead)Standard create fields (Name/Website, Email/Name/Title/Address, Company, etc.) plus mapped Syft __c fields“Create new Leads…” motions; creating Accounts/Contacts when configured
Update single record`PATCH /sobjects/AccountContactLead/Id`
Batch updatePATCH /composite/sobjects/ with allOrNone: falseSame mapped fields on existing Account, Contact, or Lead IdsBuffered enrichment (“Update existing Accounts and Leads”); batches up to 200 records
Upsert custom field definitionsMetadata SOAP upsertMetadataAccount.*__c, Contact.*__c, Lead.*__cAutomatic custom property setup
Set field-level securityMetadata SOAP updateMetadata on ProfileFLS readable + editable for those fields on the connecting profileAfter custom fields are created
Chatter timeline (optional)POST /chatter/feed-elements (FeedItem)Posts on Account / Contact / Lead feedsMotions that attach a Syft session timeline to the CRM record

Syft does not delete Salesforce records. Create vs update behavior for each mapped field is controlled by the field’s sync trigger (CREATE, UPDATE, or ANY)—see Exported Fields.

Salesforce references:

Exported Fields

Account Object

Company Name
Name
The name of the company
Text
Company Website
Website
The full URL of the company website
Text
Syft - Creation Trigger
SyftCreationTrigger__c
Motion Name or 'Manual' if not created via Motion
Text
Syft - Matched ICPs
SyftICP__c
Syft ICPs that match this company
Text
Syft - Matched Personas
SyftPersona__c
Syft Personas of the visitors from this company
Text
Syft - Matched Signals
SyftIntents__c
List of signals demonstrated by this company on the website
LongTextArea
Syft - First Session Source
SyftFirstTouch__c
Traffic Source for the first session from this company
Text
Direct
Cross Network
Paid Search
Paid Social
Paid Shopping
Syft - Latest Session Source
SyftLatestTouch__c
Traffic source for the latest session from this company
Text
Direct
Cross Network
Paid Search
Paid Social
Paid Shopping
Syft - Time Spent
SyftTimeSpent__c
Total time spent across all sessions (in minutes)
Number
Syft - Total Sessions
SyftSessions__c
Total number of sessions from this company
Number
Syft - High Intent Sessions
SyftHighIntentSessions__c
Total number of High Intent sessions from this company
Number
Syft - Page Views
SyftPageViews__c
Total number of pages viewed across all sessions
Number
Syft - First Seen
SyftFirstSeen__c
First time when someone from this company visited the website
DateTime
Syft - Last Seen
SyftLastSeen__c
Last time when someone from this company visited the website
DateTime
Syft - Purchase Intent
SyftPurchaseIntent__c
Purchase intent from this company
Text
Very High
High
Medium
Low
Syft - Unique Visitors
SyftVisitors__c
Number of unique visitors from this company
Number
Syft - Identified Leads
SyftLeads__c
Number of leads identified by Syft for this company
Number
Syft - Number of LinkedIn Impressions
SyftLinkedInImpressionsTotal__c
Total number of LinkedIn impressions for this company
Number
Syft - Number of LinkedIn Clicks
SyftLinkedInClicksTotal__c
Total number of LinkedIn clicks for this company
Number
Syft - Number of LinkedIn Likes
SyftLinkedInLikesTotal__c
Total number of LinkedIn likes for this company
Number
Syft - Number of LinkedIn Shares
SyftLinkedInSharesTotal__c
Total number of LinkedIn shares for this company
Number
Syft - Number of LinkedIn Comments
SyftLinkedInCommentsTotal__c
Total number of LinkedIn comments for this company
Number
Syft - Total LinkedIn Engagements
SyftLinkedInEngagementsTotal__c
Total number of LinkedIn engagements for this company
Number

Lead Object

Syft - Creation Source
SyftCreationSource__c
How the contact was identified (Personalized Link, Form Submission, etc.)
Text
Syft - Creation Trigger
SyftCreationTrigger__c
Motion Name or 'Manual' if not created via Motion
Text
Syft - ID Confidence
SyftEnrichmentConfidence__c
Confidence level of the ID data (Very High, High, Medium, Low)
Text
Email
Email
The email address of the contact
Text
First Name
FirstName
The first name of the contact
Text
Last Name
LastName
The last name of the contact
Text
Company Name
Company
The name of the company the contact works for
Text
Job Title
Title
The job title of the contact
Text
Website
Website
The personal website of the contact
Text
Phone Number
MobilePhone
The phone number of the contact
Text
Syft - Matched Personas
SyftPersona__c
Syft Personas that match this contact
Text
Syft - Matched Signals
SyftIntents__c
List of signals demonstrated by this contact on the website
LongTextArea
Syft - First Session Source
SyftFirstTouch__c
Traffic Source for the first session of this contact
Text
Direct
Cross Network
Paid Search
Paid Social
Paid Shopping
Syft - Latest Session Source
SyftLatestTouch__c
Traffic source for the latest session of this contact
Text
Direct
Cross Network
Paid Search
Paid Social
Paid Shopping
Syft - Time Spent
SyftTimeSpent__c
Total time spent across all sessions (in minutes)
Number
Syft - Total Sessions
SyftSessions__c
Total number of sessions from this contact
Number
Syft - High Intent Sessions
SyftHighIntentSessions__c
Total number of High Intent sessions from this contact
Number
Syft - Page Views
SyftPageViews__c
Total number of pages viewed across all sessions
Number
Syft - First Seen
SyftFirstSeen__c
First time when the contact visited the website
DateTime
Syft - Last Seen
SyftLastSeen__c
Last time when the contact visited the website
DateTime
Syft - Purchase Intent
SyftPurchaseIntent__c
Purchase intent from this contact
Text
Very High
High
Medium
Low
Syft - Number of LinkedIn Impressions
SyftLinkedInImpressionsTotal__c
Total number of LinkedIn impressions for this contact
Number
Syft - Number of LinkedIn Clicks
SyftLinkedInClicksTotal__c
Total number of LinkedIn clicks for this contact
Number
Syft - Number of LinkedIn Likes
SyftLinkedInLikesTotal__c
Total number of LinkedIn likes for this contact
Number
Syft - Number of LinkedIn Shares
SyftLinkedInSharesTotal__c
Total number of LinkedIn shares for this contact
Number
Syft - Number of LinkedIn Comments
SyftLinkedInCommentsTotal__c
Total number of LinkedIn comments for this contact
Number
Syft - Total LinkedIn Engagements
SyftLinkedInEngagementsTotal__c
Total number of LinkedIn engagements for this contact
Number

Contact Object

Email
Email
The email address of the contact
Text
First Name
FirstName
The first name of the contact
Text
Last Name
LastName
The last name of the contact
Text
Job Title
Title
The job title of the contact
Text
City
MailingCity
The city where the contact is located
Text
State/Province
MailingState
The state or province where the contact is located
Text
Country
MailingCountry
The country where the contact is located
Text
Syft - Creation Source
SyftCreationSource__c
How the contact was identified (Personalized Link, Form Submission, etc.)
Text
Syft - Creation Trigger
SyftCreationTrigger__c
Motion Name or 'Manual' if not created via Motion
Text
Syft - ID Confidence
SyftEnrichmentConfidence__c
Confidence level of the ID data (Very High, High, Medium, Low)
Text
Salesforce Company ID
AccountId
The Salesforce ID of the company
Text
Syft - Matched Personas
SyftPersona__c
Syft Personas that match this contact
Text
Syft - Matched Signals
SyftIntents__c
List of signals demonstrated by this contact on the website
LongTextArea
Syft - First Session Source
SyftFirstTouch__c
Traffic Source for the first session of this contact
Text
Direct
Cross Network
Paid Search
Paid Social
Paid Shopping
Syft - Latest Session Source
SyftLatestTouch__c
Traffic source for the latest session of this contact
Text
Direct
Cross Network
Paid Search
Paid Social
Paid Shopping
Syft - Time Spent
SyftTimeSpent__c
Total time spent across all sessions (in minutes)
Number
Syft - Total Sessions
SyftSessions__c
Total number of sessions from this contact
Number
Syft - High Intent Sessions
SyftHighIntentSessions__c
Total number of High Intent sessions from this contact
Number
Syft - Page Views
SyftPageViews__c
Total number of pages viewed across all sessions
Number
Syft - First Seen
SyftFirstSeen__c
First time when the contact visited the website
DateTime
Syft - Last Seen
SyftLastSeen__c
Last time when the contact visited the website
DateTime
Syft - Purchase Intent
SyftPurchaseIntent__c
Purchase intent from this contact
Text
Very High
High
Medium
Low
Syft - Number of LinkedIn Impressions
SyftLinkedInImpressionsTotal__c
Total number of LinkedIn impressions for this contact
Number
Syft - Number of LinkedIn Clicks
SyftLinkedInClicksTotal__c
Total number of LinkedIn clicks for this contact
Number
Syft - Number of LinkedIn Likes
SyftLinkedInLikesTotal__c
Total number of LinkedIn likes for this contact
Number
Syft - Number of LinkedIn Shares
SyftLinkedInSharesTotal__c
Total number of LinkedIn shares for this contact
Number
Syft - Number of LinkedIn Comments
SyftLinkedInCommentsTotal__c
Total number of LinkedIn comments for this contact
Number
Syft - Total LinkedIn Engagements
SyftLinkedInEngagementsTotal__c
Total number of LinkedIn engagements for this contact
Number