{"Status":true,"Message":"","Response":{"post":{"postuid":"bwballjdan","tenantuid":"d8b744fc-2e70-4089-bb80-dd1d08f6c7b2","projectuid":"239698c5-f7eb-4574-8cc8-c6568f08b3a0","title":"Salesforce Integration","slug":"article/bwballjdan-integrations-salesforce","html":"\u003Cp\u003EThe \u003Ca href=\u0022https://www.dailystory.com/blog/email-and-text-message-marketing-for-salesforce/\u0022\u003EDailyStory integration with Salesforce\u003C/a\u003E enables:\u003C/p\u003E\u003Cul\u003E\u003Cli\u003ESyncing contacts from Salesforce into DailyStory\u003C/li\u003E\u003Cli\u003ELeads in DailyStory that are marked as Marketing Qualified are automatically created as new leads in Salesforce.\u003C/li\u003E\u003Cli\u003ESalesforce Opportunities can be associated with a DailyStory campaign.\u003C/li\u003E\u003Cli\u003ETrack Salesforce Opportunity value back to your DailyStory campaign.\u003C/li\u003E\u003Cli\u003EOptional bi-directional sync of contact fields and communication preferences, such as opt-outs and subscriber topics, from DailyStory back to Salesforce.\u003C/li\u003E\u003C/ul\u003E\u003Ccite class=\u0022recommended\u0022\u003E\u003Cspan class=\u0022title\u0022\u003ERecommended\u003C/span\u003E\u003Cp\u003EBy default, Salesforce sync is one-directional: Salesforce is the source of truth and its data always takes precedence in DailyStory. Bi-directional sync of contact fields and communication preferences is supported, but is not enabled by default. It requires additional Salesforce write permissions and per-field configuration. See Bi-directional sync below.\u003C/p\u003E\u003C/cite\u003E\u003Ch2 id=\u0022configure_salesforce_integration\u0022\u003EConfigure Salesforce Integration\u003C/h2\u003E\u003Cp\u003EThere are several steps required to configure DailyStory and Salesforce integration. These steps are detailed below.\u003C/p\u003E\u003Ch3 id=\u0022create_a_salesforce_app\u0022\u003ECreate a Salesforce App\u003C/h3\u003E\u003Col\u003E\u003Cli\u003ELog into your Salesforce account with administrative rights, and go to the Salesforce Setup screen.\u003C/li\u003E\u003Cli\u003EOn the left menu, select \u003Ccode\u003EPlatform Tools \u0026gt; Apps \u0026gt; App Manager\u003C/code\u003E:\u003C/li\u003E\u003C/ol\u003E\u003Cimg class=\u0022lazy-load\u0022 data-width=\u00221375\u0022 data-height=\u0022965\u0022 data-src=\u0022https://graffiti-auf7e6dwhxhcbwek.z03.azurefd.net/d8b744fc-2e70-4089-bb80-dd1d08f6c7b2/239698c5-f7eb-4574-8cc8-c6568f08b3a0/b6656aa84990a395e15d4e480eebfbbe.png\u0022 style=\u0022\u0022 alt=\u0022\u0022/\u003E\u003Col start=\u00223\u0022\u003E\u003Cli\u003ENext, click \u0022New Connected App\u0022\u003C/li\u003E\u003Cli\u003EComplete the Basic Information form for the connected App\u003C/li\u003E\u003C/ol\u003E\u003Cul\u003E\u003Cli\u003EEnter the name\u0026nbsp;\u003Ccode\u003EDailyStory Connected App\u003C/code\u003E\u0026nbsp;as the name of your application.\u003C/li\u003E\u003C/ul\u003E\u003Ccite class=\u0022recommended\u0022\u003E\u003Cspan class=\u0022title\u0022\u003ERecommended\u003C/span\u003E\u003Cp\u003EThe API Name should be automatically set. If not, enter\u0026nbsp;\u003Ccode\u003EDailyStory_Connected_App\u003C/code\u003E\u0026nbsp;as the API name.\u003C/p\u003E\u003C/cite\u003E\u003Cul\u003E\u003Cli\u003ESet the contact email to your email address.\u003C/li\u003E\u003C/ul\u003E\u003Cimg class=\u0022lazy-load\u0022 data-width=\u0022678\u0022 data-height=\u0022284\u0022 data-src=\u0022https://graffiti-auf7e6dwhxhcbwek.z03.azurefd.net/d8b744fc-2e70-4089-bb80-dd1d08f6c7b2/239698c5-f7eb-4574-8cc8-c6568f08b3a0/3007ee0c5a493b9339e1ab06ed3423c5.png\u0022 style=\u0022\u0022 alt=\u0022\u0022/\u003E\u003Cul\u003E\u003Cli\u003EOptionally set other fields:\u003C/li\u003E\u003C/ul\u003E\u003Cp\u003ELogo image URL: https://ds-cdn.azureedge.net/files/brand/125x125.png\u003C/p\u003E\u003Cp\u003EIcon URL: https://ds-cdn.azureedge.net/files/brand/16x16.png\u003C/p\u003E\u003Cp\u003EInfo URL: https://docs.dailystory.com/integrations/salesforce\u003C/p\u003E\u003Cp\u003EDescription: Used to connect DailyStory and Salesforce\u003C/p\u003E\u003Col start=\u00225\u0022\u003E\u003Cli\u003EComplete the API form for the connected App\u003C/li\u003E\u003C/ol\u003E\u003Cul\u003E\u003Cli\u003ECheck\u0026nbsp;\u003Ccode\u003EEnable OAuth Settings\u003C/code\u003E. This will expand the list of available settings (see the screenshot below).\u003C/li\u003E\u003Cli\u003ESet the\u0026nbsp;\u003Ccode\u003ECallback URL\u003C/code\u003E\u0026nbsp;to the following value:\u003C/li\u003E\u003C/ul\u003E\u003Cp\u003E\u003Ccode\u003E\u200Bhttps://app.dailystory.com/API/Public/OAuthCallback/76db0921-55f1-4283-8017-7bd6b6abcbed\u003C/code\u003E\u003C/p\u003E\u003Cul\u003E\u003Cli\u003EAdd all of the\u0026nbsp;\u003Ccode\u003EAvailable OAuth Scopes\u003C/code\u003E\u0026nbsp;to the\u0026nbsp;\u003Ccode\u003ESelected OAuth Scopes\u003C/code\u003E. This ensures that DailyStory has the ability to create leads and read other data from Salesforce.\u003C/li\u003E\u003C/ul\u003E\u003Ccite class=\u0022recommended\u0022\u003E\u003Cspan class=\u0022title\u0022\u003ERecommended\u003C/span\u003E\u003Cp\u003EThese authorization scopes ensure DailyStory has enough permission to perform existing actions, as well as for planned integrations. Write scopes are required if you plan to enable bi-directional sync.\u003C/p\u003E\u003C/cite\u003E\u003Cul\u003E\u003Cli\u003ECheck\u0026nbsp;\u003Ccode\u003EInclude ID Token\u003C/code\u003E, and check\u0026nbsp;\u003Ccode\u003EInclude Standard Claims\u003C/code\u003E,\u0026nbsp;\u003Ccode\u003EInclude Custom Attributes\u003C/code\u003E, and\u0026nbsp;\u003Ccode\u003EInclude Custom Permissions\u003C/code\u003E.\u003C/li\u003E\u003C/ul\u003E\u003Cimg class=\u0022lazy-load\u0022 data-width=\u0022877\u0022 data-height=\u0022522\u0022 data-src=\u0022https://graffiti-auf7e6dwhxhcbwek.z03.azurefd.net/d8b744fc-2e70-4089-bb80-dd1d08f6c7b2/239698c5-f7eb-4574-8cc8-c6568f08b3a0/0c15ffa992e10a4b2e40c25594338198.png\u0022 style=\u0022\u0022 alt=\u0022\u0022/\u003E\u003Col start=\u00226\u0022\u003E\u003Cli\u003EClick the Save button. \u003Ci\u003EIt can take 2 to 10 minutes for your application to get set up in Salesforce.\u003C/i\u003E\u003C/li\u003E\u003Cli\u003EAfter saving your new Salesforce app, you should have a view similar to this:\u003C/li\u003E\u003C/ol\u003E\u003Cimg class=\u0022lazy-load\u0022 data-width=\u00221186\u0022 data-height=\u0022671\u0022 data-src=\u0022https://graffiti-auf7e6dwhxhcbwek.z03.azurefd.net/d8b744fc-2e70-4089-bb80-dd1d08f6c7b2/239698c5-f7eb-4574-8cc8-c6568f08b3a0/b407b8f2e85d0e17a9beb76705abca7c.png\u0022 style=\u0022\u0022 alt=\u0022\u0022/\u003E\u003Col start=\u00228\u0022\u003E\u003Cli\u003ECopy the Consumer Key and Consumer Secret\u003C/li\u003E\u003C/ol\u003E\u003Ccite class=\u0022warning\u0022\u003E\u003Cspan class=\u0022title\u0022\u003EWarning\u003C/span\u003E\u003Cp\u003EImportant: The Consumer Key and Consumer Secret are required for configuring the integration with DailyStory.\u003C/p\u003E\u003C/cite\u003E\u003Ch3 id=\u0022find_your_salesforce_instance_key\u0022\u003EFind your Salesforce Instance Key\u003C/h3\u003E\u003Cp\u003EThe Salesforce instance key is the identifier that is used when accessing your Salesforce instance.\u003C/p\u003E\u003Col\u003E\u003Cli\u003EStart by logging into your Salesforce account. Copy the unique name in the URL, in the case \u0022dailystory-dev-ed\u0022.\u003C/li\u003E\u003C/ol\u003E\u003Cimg class=\u0022lazy-load\u0022 data-width=\u00221341\u0022 data-height=\u0022529\u0022 data-src=\u0022https://graffiti-auf7e6dwhxhcbwek.z03.azurefd.net/d8b744fc-2e70-4089-bb80-dd1d08f6c7b2/239698c5-f7eb-4574-8cc8-c6568f08b3a0/438761f2799e2443dadcc9002847fbb8.png\u0022 style=\u0022\u0022 alt=\u0022\u0022/\u003E\u003Col start=\u00222\u0022\u003E\u003Cli\u003ENavigate to the following URL and enter the text from step 1\u003C/li\u003E\u003C/ol\u003E\u003Cp\u003E\u003Ca href=\u0022https://status.salesforce.com/\u0022 target=\u0022_blank\u0022\u003Ehttps://status.salesforce.com/\u003C/a\u003E\u003C/p\u003E\u003Cimg class=\u0022lazy-load\u0022 data-width=\u00221409\u0022 data-height=\u0022585\u0022 data-src=\u0022https://graffiti-auf7e6dwhxhcbwek.z03.azurefd.net/d8b744fc-2e70-4089-bb80-dd1d08f6c7b2/239698c5-f7eb-4574-8cc8-c6568f08b3a0/844c454b8c859785b093f0464946087c.png\u0022 style=\u0022\u0022 alt=\u0022\u0022/\u003E\u003Cp\u003EClick the magnifying glass to retrieve the results:\u003C/p\u003E\u003Cimg class=\u0022lazy-load\u0022 data-width=\u0022704\u0022 data-height=\u0022649\u0022 data-src=\u0022https://graffiti-auf7e6dwhxhcbwek.z03.azurefd.net/d8b744fc-2e70-4089-bb80-dd1d08f6c7b2/239698c5-f7eb-4574-8cc8-c6568f08b3a0/1bd748d12155348349ba4c04d8f55feb.png\u0022 style=\u0022\u0022 alt=\u0022\u0022/\u003E\u003Cp\u003EIn this case the Instance Key is \u003Ccode\u003ENA75\u003C/code\u003E.\u003C/p\u003E\u003Ccite class=\u0022warning\u0022\u003E\u003Cspan class=\u0022title\u0022\u003EWarning\u003C/span\u003E\u003Cp\u003EImportant: The Instance Key is required for configuring the integration with DailyStory.\u003C/p\u003E\u003C/cite\u003E\u003Ch2 id=\u0022enable_salesforce_integration_in_dailystory\u0022\u003EEnable Salesforce Integration in DailyStory\u003C/h2\u003E\u003Col\u003E\u003Cli\u003ELog into DailyStory and navigate to Account Settings \u0026gt; Integrations \u0026gt; Salesforce\u003C/li\u003E\u003Cli\u003EClick on Salesforce:\u003C/li\u003E\u003C/ol\u003E\u003Cimg class=\u0022lazy-load\u0022 data-width=\u00221409\u0022 data-height=\u00221300\u0022 data-src=\u0022https://graffiti-auf7e6dwhxhcbwek.z03.azurefd.net/d8b744fc-2e70-4089-bb80-dd1d08f6c7b2/239698c5-f7eb-4574-8cc8-c6568f08b3a0/3ffe66f01dcfb73e40bf9fb71f69742f.png\u0022 style=\u0022\u0022 alt=\u0022\u0022/\u003E\u003Col start=\u00223\u0022\u003E\u003Cli\u003EEnter the values for Consumer Key, Consumer Secret, and Instance Key from the steps above.\u003C/li\u003E\u003Cli\u003EThe Api Version is automatically set to v56.0, but can be changed to another version.\u003C/li\u003E\u003Cli\u003EClick the \u0022Authorize\u0022 button (note this may require you to login to Salesforce again)\u003C/li\u003E\u003C/ol\u003E\u003Cp\u003EOnce the authorization is complete, you are redirected back to the DailyStory Salesforce integration screen.\u003C/p\u003E\u003Cp\u003EAt this point the setup is complete and your Salesforce data will begin syncing.\u003C/p\u003E\u003Ch3 id=\u0022fields_synced_from_salesforce\u0022\u003EFields synced from Salesforce\u003C/h3\u003E\u003Cp\u003EWhen Salesforce integration is enabled, DailyStory automatically syncs data from Salesforce.\u003C/p\u003E\u003Ccite class=\u0022recommended\u0022\u003E\u003Cspan class=\u0022title\u0022\u003ERecommended\u003C/span\u003E\u003Cp\u003EOut of the box, sync runs one-directionally from Salesforce into DailyStory, and Salesforce data is always the \u0022source of truth.\u0022 To also write contact field changes and communication preferences from DailyStory back to Salesforce, see Bi-directional sync below.\u003C/p\u003E\u003C/cite\u003E\u003Ch3 id=\u0022standard_fields\u0022\u003EStandard fields\u003C/h3\u003E\u003Cp\u003EDailyStory will sync the following standard fields from Salesforce: first name, last name, email, address, city, state, postal code, country. DailyStory also will automatically geocode (calculate the latitude and longitude) the contact record.\u003C/p\u003E\u003Ch3 id=\u0022salesforcespecific_fields\u0022\u003ESalesforce-specific fields\u003C/h3\u003E\u003Cp\u003EIn addition to standard fields, the following Salesforce-specific fields are synced. These fields are used for personalizing content, running automations or building segments.\u003C/p\u003E\u003Ctable border=\u00221\u0022 style=\u0022border-collapse: collapse; width: 100%;\u0022\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Cb\u003EField\u003C/b\u003E\u003C/td\u003E\u003Ctd\u003E\u003Cb\u003EDescription\u003C/b\u003E\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003ESalesforce Id\u003C/td\u003E\u003Ctd\u003EThe unique identifier of the contact in Salesforce. Accessible in personalization as \u003Ccode\u003Eprofile.salesforce_id\u003C/code\u003E.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EAccount Id\u003C/td\u003E\u003Ctd\u003EThe account id of the contact in Salesforce. Accessible in personalization as \u003Ccode\u003Eprofile.salesforce_account_id\u003C/code\u003E.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EAccount Owner Id\u003C/td\u003E\u003Ctd\u003EThe id of the account owner of the contact. Accessible in personalization as \u003Ccode\u003Eprofile.sfdc_accnt_owner_id\u003C/code\u003E.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EAccount Owner Email\u003C/td\u003E\u003Ctd\u003EThe email address of the account owner of the contact. Accessible in personalization as \u003Ccode\u003Eprofile.sfdc_accnt_owner_email\u003C/code\u003E.\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003Ch3 id=\u0022extended_field_mappings\u0022\u003EExtended Field Mappings\u003C/h3\u003E\u003Cp\u003EDailyStory will automatically populate common Salesforce fields that correspond to properties of a DailyStory lead, such as email address, for example.\u003C/p\u003E\u003Cp\u003EHowever, if you are using a custom form or setting extended lead properties, you may want to publish these into Salesforce as well. This is precisely what the Advanced Configuration option for Extended Field Mappings does.\u003C/p\u003E\u003Cp\u003EFor example, if you are capturing values for\u0026nbsp;\u003Ccode\u003ECurrentSubscribers\u003C/code\u003E\u0026nbsp;and you have a Salesforce custom field called\u0026nbsp;\u003Ccode\u003ENumberOfSubscribers__c\u003C/code\u003E, you can configure DailyStory to populate that field in Salesforce when a lead is added from DailyStory.\u003C/p\u003E\u003Cimg class=\u0022lazy-load\u0022 data-width=\u0022724\u0022 data-height=\u0022512\u0022 data-src=\u0022https://graffiti-auf7e6dwhxhcbwek.z03.azurefd.net/d8b744fc-2e70-4089-bb80-dd1d08f6c7b2/239698c5-f7eb-4574-8cc8-c6568f08b3a0/ce6299f731b08e404349fbe2bad33ab2.png\u0022 style=\u0022\u0022 alt=\u0022\u0022/\u003E\u003Ch2 id=\u0022bidirectional_sync\u0022\u003EBi-directional sync\u003C/h2\u003E\u003Cp\u003EBy default the integration syncs in one direction: Salesforce into DailyStory. DailyStory can also write changes back to Salesforce, so that updates made by your marketing team, or by contacts themselves through a preference center, a form, or an unsubscribe link, are reflected on the Salesforce Contact record.\u003C/p\u003E\u003Ch3 id=\u0022what_syncs_back_to_salesforce\u0022\u003EWhat syncs back to Salesforce\u003C/h3\u003E\u003Cul\u003E\u003Cli\u003E\u003Cb\u003EContact field updates.\u003C/b\u003E Changes to mapped contact fields in DailyStory are written to the corresponding fields on the Salesforce Contact record.\u003C/li\u003E\u003Cli\u003E\u003Cb\u003ECommunication preferences.\u003C/b\u003E Opt-outs, opt-ins, and subscriber topic preferences captured in DailyStory are written back to Salesforce, so both systems reflect the same consent state.\u003C/li\u003E\u003C/ul\u003E\u003Cp\u003EEmail engagement activity, such as opens and clicks, and campaign membership are not written back as part of this configuration. Engagement data is available through the DailyStory reporting APIs and webhooks if you want to land it in Salesforce or a data warehouse.\u003C/p\u003E\u003Ch3 id=\u0022what_bidirectional_sync_requires\u0022\u003EWhat bi-directional sync requires\u003C/h3\u003E\u003Col\u003E\u003Cli\u003E\u003Cb\u003EWrite permissions in Salesforce.\u003C/b\u003E The connected app must be authorized with OAuth scopes that permit writing, and the integration user\u0027s profile or permission set must have edit access to every field you intend to update. Read access is sufficient for the default one-way sync, but not for write-back.\u003C/li\u003E\u003Cli\u003E\u003Cb\u003EPer-field mapping.\u003C/b\u003E Each field that syncs back is configured explicitly in DailyStory under Account Settings \u0026gt; Integrations \u0026gt; Salesforce. Fields you do not map are never written to Salesforce.\u003C/li\u003E\u003C/ol\u003E\u003Ccite class=\u0022warning\u0022\u003E\u003Cspan class=\u0022title\u0022\u003EWarning\u003C/span\u003E\u003Cp\u003EMap only the fields you intend DailyStory to update. Because write-back modifies records in your Salesforce org, validate the mapping in a sandbox, or against a small set of test contacts, before enabling it in production.\u003C/p\u003E\u003C/cite\u003E\u003Ch3 id=\u0022conflict_resolution_and_sync_frequency\u0022\u003EConflict resolution and sync frequency\u003C/h3\u003E\u003Cp\u003ESalesforce remains the source of truth even when bi-directional sync is enabled. If the same field changes in both systems between sync cycles, the Salesforce value wins and replaces the DailyStory value. This keeps Salesforce authoritative for constituent and customer data while still allowing DailyStory to publish the changes it owns, such as consent and preference updates.\u003C/p\u003E\u003Cp\u003ESync frequency is configurable. Contact DailyStory support if you need an interval other than the default, or if a specific field must propagate to Salesforce faster than the scheduled sync.\u003C/p\u003E","publish_status":0,"post_type":"Article","authoruid":"3dde8c16-763a-4a2b-ae0b-1d8c50c62e3d","author":{"authoruid":"3dde8c16-763a-4a2b-ae0b-1d8c50c62e3d"},"featured_image_url":"https://cdn-us-1.azureedge.net/content-pages/images/integrations/icons/salesforce_on.png?v=2","featured_image_updating":false,"meta_description":"Salesforce Integration The DailyStory integration with Salesforce enables: Syncing contacts from Salesforce into DailyStory Leads in DailyStory that are marked as Marketing Qualified are automatically created as new leads in Salesforce. Salesforce Opportunities can be associated with a DailyStory campaign. Track Salesforce Opportunity value back to your DailyStory campaign. DailyStory does not support bi-directional sync with Salesforce. DailyStory can publish leads to Salesforce and read op ...","display_toc":true,"has_workingcopy":false,"allow_indexing":true,"sort_order":4,"total_views":1633,"date_published":"2023-08-14T16:54:00","date_updated":"2026-09-23T15:31:01.223","date_created":"2025-04-24T15:03:01.797"}}}