This integration is powered by Singer's Exact Target tap. For support, visit the GitHub repo or join the Singer Slack.
Salesforce Marketing Cloud integration summary
Stitch’s Salesforce Marketing Cloud integration replicates data using the Salesforce Marketing Cloud SOAP Web Service API. Refer to the Schema section for a list of objects available for replication.
Salesforce Marketing Cloud feature snapshot
A high-level look at Stitch's Salesforce Marketing Cloud (v1) integration, including release status, useful links, and the features supported in Stitch.
STITCH | |||
Release status |
Released on December 5, 2017 |
Supported by | |
Stitch plan |
Standard |
API availability |
Available |
Singer GitHub repository | |||
REPLICATION SETTINGS | |||
Anchor Scheduling |
Supported |
Advanced Scheduling |
Supported |
Table-level reset |
Unsupported |
Configurable Replication Methods |
Unsupported |
DATA SELECTION | |||
Table selection |
Supported |
Column selection |
Supported |
Select all |
Supported |
||
TRANSPARENCY | |||
Extraction Logs |
Supported |
Loading Reports |
Supported |
Connecting Salesforce Marketing Cloud
Salesforce Marketing Cloud setup requirements
To set up Salesforce Marketing Cloud in Stitch, you need:
-
To be using the Pro, Corporate, or Enterprise edition of Salesforce Marketing Cloud. Salesforce requires this to access the Salesforce Marketing Cloud API.
-
A Salesforce Marketing Cloud user with the Marketing Cloud Administrator Role. Salesforce requires this to generate Salesforce Marketing Cloud API credentials.
Note: While this role is required to complete the setup, you’ll be able to limit Stitch’s access in Salesforce Marketing Cloud. This is outlined in Step 2.2 of this guide.
Step 1: Retrieve your Salesforce Marketing Cloud tenant subdomain
A tenant subdomain is an auto-generated ID unique to your Salesforce Marketing Cloud account. You can retrieve this info by looking at the URL when you sign into your Salesforce Marketing Cloud account.
- Navigate to the Salesforce Marketing Cloud login page.
- Enter your Salesforce Marketing Cloud username and click Next.
-
Look at the URL for the page you’re currently on. The string between
https://
and.login
is your tenant subdomain:In this example, the tenant subdomain is
mcx21dt54chc0gprl638px2g7r48
. Keep this handy - you’ll need it to complete the setup in Stitch. - Enter your Salesforce Marketing Cloud password and click Log In.
Step 2: Generate API credentials
To use Salesforce Marketing Cloud’s API, you need a client ID and secret. These credentials are generated when you create an installed package in Marketing Cloud and add an API Integration component.
Step 2.1: Create an Installed Package for Stitch
- While signed into your Salesforce Marketing Cloud account, click the user menu in the top right corner, then Setup.
- In the menu on the left side, click Apps > Installed Packages.
- Click the New button.
- In the New Package Details window, enter a Name and Description for the package. For example:
Stitch
- Click Save.
Step 2.2: Configure the package settings
After the package has been saved, you’ll need to add a component and grant the required permissions. This will allow Stitch to connect to your Salesforce Marketing Cloud instance.
- Click the Add Component button.
- Select the API Integration option in the Choose Your Component Type window. Click Next.
-
Select the Server-to-Server option in the Choose Your Integration Type window:
Click Next.
-
In the Set Server-to-Server Properties window, you’ll grant permissions to the Stitch app.
The table below lists the categories of permissions and the specific permissions Stitch requires. Unless otherwise noted, select the Read permission next to the following options:
Channels
- Push
- SMS
- Social
- Web
Assets
- Documents and Images
- Saved Content
Automation
- Automations
- Journeys
Contacts
- Audiences
- List and Subscribers
Data
- Data Extensions (Read/Write)
- File Locations
- Tracking Events
Hub
- Calendar
- Campaign
- Tags
Provisioning
- Accounts
- Users
Webhooks
- Webhooks
Note: To replicate Data Extension data, you will also need to select the Write permission.
- Click Save.
Step 2.3: Locate your API credentials
After the permissions are saved, you’ll be directed back to the app’s summary page. In the Components section, locate the Client Id and Client Secret fields, which are highlighted in the image below:
Keep these handy - you’ll need them to complete the setup in Stitch.
Step 3: Add Salesforce Marketing Cloud as a Stitch data source
- Sign into your Stitch account.
-
On the Stitch Dashboard page, click the Add Integration button.
-
Click the Salesforce Marketing Cloud icon.
-
Enter a name for the integration. This is the name that will display on the Stitch Dashboard for the integration; it’ll also be used to create the schema in your destination.
For example, the name “Stitch Salesforce Marketing Cloud” would create a schema called
stitch_salesforce_marketing_cloud
in the destination. Note: Schema names cannot be changed after you save the integration. - In the Client ID field, paste the Salesforce Marketing Cloud Client ID you retrieved in Step 2.3.
- In the Client Secret field, paste the Salesforce Marketing Cloud Client Secret you retrieved in Step 2.3.
- In the Tenant Subdomain field, paste the Salesforce Marketing Cloud tenant subdomain you retrieved in Step 1.
Step 4: Define the historical replication start date
The Sync Historical Data setting defines the starting date for your Salesforce Marketing Cloud integration. This means that data equal to or newer than this date will be replicated to your data warehouse.
Change this setting if you want to replicate data beyond Salesforce Marketing Cloud’s default setting of 1 year. For a detailed look at historical replication jobs, check out the Syncing Historical SaaS Data guide.
Step 5: Create a replication schedule
In the Replication Frequency section, you’ll create the integration’s replication schedule. An integration’s replication schedule determines how often Stitch runs a replication job, and the time that job begins.
Salesforce Marketing Cloud integrations support the following replication scheduling methods:
-
Advanced Scheduling using Cron (Advanced or Premium plans only)
To keep your row usage low, consider setting the integration to replicate less frequently. See the Understanding and Reducing Your Row Usage guide for tips on reducing your usage.
Step 6: Set objects to replicate
The last step is to select the tables and columns you want to replicate. Learn about the available tables for this integration.
Note: If a replication job is currently in progress, new selections won’t be used until the next job starts.
For Salesforce Marketing Cloud integrations, you can select:
-
Individual tables and columns
-
All tables and columns
Click the tabs to view instructions for each selection method.
- In the integration’s Tables to Replicate tab, locate a table you want to replicate.
-
To track a table, click the checkbox next to the table’s name. A blue checkmark means the table is set to replicate.
-
To track a column, click the checkbox next to the column’s name. A blue checkmark means the column is set to replicate.
- Repeat this process for all the tables and columns you want to replicate.
- When finished, click the Finalize Your Selections button at the bottom of the screen to save your selections.
- Click into the integration from the Stitch Dashboard page.
-
Click the Tables to Replicate tab.
- In the list of tables, click the box next to the Table Names column.
-
In the menu that displays, click Track all Tables and Fields:
- Click the Finalize Your Selections button at the bottom of the page to save your data selections.
Initial and historical replication jobs
After you finish setting up Salesforce Marketing Cloud, its Sync Status may show as Pending on either the Stitch Dashboard or in the Integration Details page.
For a new integration, a Pending status indicates that Stitch is in the process of scheduling the initial replication job for the integration. This may take some time to complete.
Initial replication jobs with Anchor Scheduling
If using Anchor Scheduling, an initial replication job may not kick off immediately. This depends on the selected Replication Frequency and Anchor Time. Refer to the Anchor Scheduling documentation for more information.
Free historical data loads
The first seven days of replication, beginning when data is first replicated, are free. Rows replicated from the new integration during this time won’t count towards your quota. Stitch offers this as a way of testing new integrations, measuring usage, and ensuring historical data volumes don’t quickly consume your quota.
Salesforce Marketing Cloud table reference
Schemas and versioning
Schemas and naming conventions can change from version to version, so we recommend verifying your integration’s version before continuing.
The schema and info displayed below is for version 1 of this integration.
This is the latest version of the Salesforce Marketing Cloud integration.
Table and column names in your destination
Depending on your destination, table and column names may not appear as they are outlined below.
For example: Object names are lowercased in Redshift (CusTomERs
> customers
), while case is maintained in PostgreSQL destinations (CusTomERs
> CusTomERs
). Refer to the Loading Guide for your destination for more info.
campaigns
The campaigns
table contains info about the campaigns in your Salesforce Marketing Cloud account.
Full Table |
|
Primary Key |
id |
Replication Key |
modifiedDate |
Useful links |
campaignCode STRING |
color STRING |
createdDate STRING |
description STRING |
id STRING |
modifiedDate STRING |
name STRING |
content_areas
The content_areas
table contains info about the reusable content sections in your Salesforce Marketing Cloud account.
Key-based Incremental |
|
Primary Key |
ID |
Replication Key |
ModifiedDate |
Useful links |
BackgroundColor STRING |
||
BorderColor STRING |
||
BorderWidth INTEGER |
||
CategoryID INTEGER |
||
Cellpadding INTEGER |
||
Cellspacing INTEGER |
||
Content STRING |
||
CreatedDate STRING |
||
CustomerKey STRING |
||
FontFamily STRING |
||
HasFontSize BOOLEAN |
||
ID INTEGER |
||
IsBlank BOOLEAN |
||
IsDynamicContent BOOLEAN |
||
IsLocked BOOLEAN |
||
IsSurvey BOOLEAN |
||
Key STRING |
||
ModifiedDate STRING |
||
Name STRING |
||
ObjectID STRING |
||
PartnerProperties ARRAY
|
||
Width INTEGER |
data_extension
The data_extension
table contains info about the data extensions in your Salesforce Marketing Cloud account. A table will be created for each data extension in your Salesforce Marketing Cloud account.
For example: If there are two data extensions named MobileAddress
and MobileSubscription
, two tables would be created: data_extension._MobileAddress
and data_extension._MobileSubscription
Note: Retrieving data extension data requires Read, Write permissions for Data Extensions.
Full Table |
|
Primary Key |
_CustomObjectKey |
Useful links |
CategoryID INTEGER |
_CustomObjectKey STRING |
emails
The emails
table contains info about the emails in your Salesforce Marketing Cloud account.
Key-based Incremental |
|
Primary Key |
ID |
Replication Key |
ModifiedDate |
Useful links |
Join emails with | on |
---|---|
content_areas |
emails.ContentAreaIDs = content_areas.ID emails.CategoryID = content_areas.CategoryID |
sends |
emails.ID = sends.EmailID emails.ClonedFromID = sends.EmailID |
folders |
emails.CategoryID = folders.ID emails.CategoryID = folders.ParentFolder |
lists |
emails.CategoryID = lists.Category |
CategoryID INTEGER |
||
CharacterSet STRING |
||
ClonedFromID INTEGER |
||
ContentAreaIDs ARRAY |
||
ContentCheckStatus STRING |
||
CreatedDate STRING |
||
CustomerKey STRING |
||
EmailType STRING |
||
HTMLBody STRING |
||
HasDynamicSubjectLine BOOLEAN |
||
ID INTEGER |
||
IsActive BOOLEAN |
||
IsHTMLPaste BOOLEAN |
||
ModifiedDate STRING |
||
Name STRING |
||
ObjectID STRING |
||
PartnerProperties ARRAY
|
||
PreHeader STRING |
||
Status STRING |
||
Subject STRING |
||
SyncTextWithHTML BOOLEAN |
||
TextBody STRING |
||
__AdditionalEmailAttribute1 STRING |
||
__AdditionalEmailAttribute2 STRING |
||
__AdditionalEmailAttribute3 STRING |
||
__AdditionalEmailAttribute4 STRING |
||
__AdditionalEmailAttribute5 STRING |
events
The events
table contains info about the events in your Salesforce Marketing Cloud account.
Key-based Incremental |
|
Primary Keys |
EventType EventDate SendID SubscriberKey |
Replication Key |
EventDate |
Useful links |
Join events with | on |
---|---|
list_sends |
events.SendID = list_sends.SendID |
sends |
events.SendID = sends.ID |
list_subscribers |
events.SubscriberKey = list_subscribers.SubscriberKey |
subscribers |
events.SubscriberKey = subscribers.ID |
BatchID INTEGER |
CorrelationID STRING |
EventDate DATE-TIME |
EventType STRING |
SendID INTEGER |
SubscriberKey STRING |
URL STRING |
folders
The folders
table contains info about the folders in your Salesforce Marketing Cloud account.
Key-based Incremental |
|
Primary Key |
ID |
Replication Key |
ModifiedDate |
Useful links |
Join folders with | on |
---|---|
content_areas |
folders.ID = content_areas.CategoryID folders.ParentFolder = content_areas.CategoryID |
emails |
folders.ID = emails.CategoryID folders.ParentFolder = emails.CategoryID |
lists |
folders.ID = lists.Category folders.ParentFolder = lists.Category |
AllowChildren BOOLEAN |
||
ContentType STRING |
||
CreatedDate STRING |
||
CustomerKey STRING |
||
Description STRING |
||
ID INTEGER |
||
ModifiedDate STRING |
||
Name STRING |
||
ObjectID STRING |
||
ParentFolder INTEGER |
||
PartnerProperties ARRAY
|
||
Type STRING |
list_sends
The list_sends
table contains info about the completed sends for lists in your Salesforce Marketing Cloud account.
Key-based Incremental |
|
Primary Keys |
ListID SendID |
Replication Key |
ModifiedDate |
Useful links |
Join list_sends with | on |
---|---|
lists |
list_sends.ListID = lists.ID |
list_subscribers |
list_sends.ListID = list_subscribers.ListID |
subscribers |
list_sends.ListID = subscribers.ListIDs |
events |
list_sends.SendID = events.SendID |
sends |
list_sends.SendID = sends.ID |
CreatedDate STRING |
||
CustomerKey STRING |
||
ExistingUndeliverables INTEGER |
||
ExistingUnsubscribes INTEGER |
||
ForwardedEmails INTEGER |
||
HardBounces INTEGER |
||
ID INTEGER |
||
InvalidAddresses INTEGER |
||
ListID INTEGER |
||
MissingAddresses INTEGER |
||
ModifiedDate STRING |
||
NumberDelivered INTEGER |
||
NumberSent INTEGER |
||
ObjectID STRING |
||
OtherBounces INTEGER |
||
PartnerProperties ARRAY
|
||
SendID INTEGER |
||
SoftBounces INTEGER |
||
UniqueClicks INTEGER |
||
UniqueOpens INTEGER |
||
Unsubscribes INTEGER |
list_subscribers
The list_subscribers
table contains info about the lists associated with a specific subscriber in your Salesforce Marketing Cloud account.
Key-based Incremental |
|
Primary Keys |
ListID SubscriberKey |
Replication Key |
ModifiedDate |
Useful links |
Join list_subscribers with | on |
---|---|
lists |
list_subscribers.ListID = lists.ID |
list_sends |
list_subscribers.ListID = list_sends.ListID |
subscribers |
list_subscribers.ListID = subscribers.ListIDs list_subscribers.SubscriberKey = subscribers.ID |
events |
list_subscribers.SubscriberKey = events.SubscriberKey |
CreatedDate STRING |
||
ID INTEGER |
||
ListID INTEGER |
||
ModifiedDate STRING |
||
ObjectID STRING |
||
PartnerProperties ARRAY
|
||
Status STRING |
||
SubscriberKey STRING |
lists
The lists
table contains info about the lists in your Salesforce Marketing Cloud account.
Key-based Incremental |
|
Primary Key |
ID |
Replication Key |
ModifiedDate |
Useful links |
Join lists with | on |
---|---|
content_areas |
lists.Category = content_areas.CategoryID |
emails |
lists.Category = emails.CategoryID |
folders |
lists.Category = folders.ID lists.Category = folders.ParentFolder |
list_sends |
lists.ID = list_sends.ListID |
list_subscribers |
lists.ID = list_subscribers.ListID |
subscribers |
lists.ID = subscribers.ListIDs |
Category INTEGER |
||
CreatedDate STRING |
||
Description STRING |
||
ID INTEGER |
||
ListClassification STRING |
||
ListName STRING |
||
ModifiedDate STRING |
||
ObjectID STRING |
||
PartnerProperties ARRAY
|
||
SendClassification STRING |
||
Type STRING |
sends
The sends
table contains info about the email sends in your Salesforce Marketing Cloud account.
Key-based Incremental |
|
Primary Key |
ID |
Replication Key |
ModifiedDate |
Useful links |
Join sends with | on |
---|---|
emails |
sends.EmailID = emails.ID sends.EmailID = emails.ClonedFromID |
events |
sends.ID = events.SendID |
list_sends |
sends.ID = list_sends.SendID |
CreatedDate STRING |
||
EmailID INTEGER |
||
EmailName STRING |
||
FromAddress STRING |
||
FromName STRING |
||
ID INTEGER |
||
IsAlwaysOn BOOLEAN |
||
IsMultipart BOOLEAN |
||
ModifiedDate STRING |
||
PartnerProperties ARRAY
|
||
SendDate DATE-TIME |
||
SentDate DATE-TIME |
||
Status STRING |
||
Subject STRING |
subscribers
The subscribers
table contains info about the subscribers (people subscribed to receive email and/or SMS communication) in your Salesforce Marketing Cloud account.
Key-based Incremental |
|
Primary Key |
ID |
Replication Key |
ModifiedDate |
Useful links |
Join subscribers with | on |
---|---|
lists |
subscribers.ListIDs = lists.ID |
list_sends |
subscribers.ListIDs = list_sends.ListID |
list_subscribers |
subscribers.ListIDs = list_subscribers.ListID subscribers.ID = list_subscribers.SubscriberKey |
events |
subscribers.ID = events.SubscriberKey |
Addresses ARRAY
|
|||
Attributes ARRAY
|
|||
CreatedDate STRING |
|||
CustomerKey STRING |
|||
EmailAddress STRING |
|||
EmailTypePreference STRING |
|||
ID INTEGER |
|||
ListIDs ARRAY |
|||
Locale STRING |
|||
ModifiedDate STRING |
|||
ObjectID STRING |
|||
PartnerKey STRING |
|||
PartnerProperties ARRAY
|
|||
PartnerType STRING |
|||
PrimaryEmailAddress STRING |
|||
PrimarySMSAddress STRING |
|||
PrimarySMSPublicationStatus STRING |
|||
Status STRING |
|||
SubscriberKey STRING |
|||
SubscriberTypeDefinition STRING |
|||
UnsubscribedDate STRING |
Related | Troubleshooting |
Questions? Feedback?
Did this article help? If you have questions or feedback, feel free to submit a pull request with your suggestions, open an issue on GitHub, or reach out to us.