I am currently designing a data model around Marketing Cloud for one of my clients and I am facing some conceptual questions regarding the integration with Service Cloud via the Connector and Apache Kafka via API Calls.

Service Cloud will be the master of data (accounts, contacts, leads, custom objects) and Kafka will send API calls to trigger Journeys for transactional messages (confirmation email after registration for eg).

I have to major questions regarding my design :

What is the best way to sync Service Cloud objects with populations in Contact Builder ? I have two records types in the Person Account object that represents two populations. Data Stream won't make the distinction between these two records types. So I imagined something like this :

  1. Retrieve the "Account" Object with the Data Stream in the "Account" Synchronized data extension
  2. Run an automation with two Query activities on the "Account" Synchronized Data Extension that populates two tables in MC relative to the two populations in Contact Builder.

My second question is linked to a special use case :

  1. An account is created in a system X
  2. system X sends two API calls. One to Service Cloud to create the Account and one to Journey Builder to fire a confirmation email journey

in my understanding of Contact Builder and Journey Builder, the Account that is created will be duplicated (two records with two different ContactID) in Marketing Cloud. First one will be created by Journey Builder after injection into the Journey. Second one will be created after the Data stream synchronization and automation completeness.

This goes against my vision of a single record per Account in Marketing Cloud.

Can you please give me some insights on these questions ? Feel free to complete or ask for more clarification.


Great thinking so far ! :) I think I can answer most, if not all of your concerns. First of all, and just for your reference - synchronised data extensions exists as "hidden populations" via the connector, so if all your data is coming from salesforce, an all communications are initiated through that, you should be safe - but i agree with your proposal:

  • Create automation with two query activities to represent the two populations

As for the second part - Michael is correct in that you could pass the correct id via the api call (but do note, that you need to use the PersonContactId, ContactId or LeadId as the subscriber key - this is a requirement for the connector. MC Connect operates based on what can go into a "WhoId" field inside salesforce core)

Based on you second story though, unless there is a specific payload that you need to pass via the API call, I would offer a different solution - namely to use Salesforce Triggered Sends or Journey Builder combined with Salesforce Data Entry. Essentially, you are creating a record with certain parameters inside salesforce core - and then based on those parameters, you leverage marketing cloud connect's native features to push them onto a journey or triggered send based on the record creation and/or field updates.

Alternatively, as long as you make sure that you have the right Id passed as part of the API call, as michael says, you should be safe. (right id is not equal to account id)

  • Thanks Kenneth for your detailed answer! We need a specific payload that's why we need to trigger the event via API call and not via the Salesforce Data Event! And I do share your point of view of using the standard as much as possible! – zeljazouli Jun 30 '17 at 15:16
  • Okay - cool - then, just remember to retrieve the correct id via the API call that creates inside Salesforce (if push comes to shove, you might store the information in a field in Salesforce and trigger based on that - but think the API is a cleaner version and will enable better control) :-) – Kenneth Wagner Jun 30 '17 at 15:28
  • Actually we have some use cases that I believe should not be stored in Service Cloud. One of the use cases will be to send a push notification to a customer based on some behavioral data computed in a Datalake. But I get your idea and thanks for your feedback! – zeljazouli Jun 30 '17 at 15:37

To answer your question 2:

If you create the Account in Service Cloud you'll get a return from Service Cloud with the AccountId. Use that AccountId as ContactKey to fire the journey, and you'll have just one Contact, since accounts synced from Salesforce to MC automatically get SalesforceId as Contactkey.

  • thanks for your answer ! You gave me a good solution for my 2nd problem – zeljazouli Jun 30 '17 at 8:39
  • NB: You should not use AccountId as the key, you need to use PersonContactId or ContactId or LeadId as ContactKey – Kenneth Wagner Jun 30 '17 at 8:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.