Please consider the two scenarios below:

Scenario 1

Using SQL, we're filtering Campaign Members based on some criteria to create a Sendable DE.

  • Which is the correct relationship to use to SubscriberKey? The CampaignMemberId or the LeadOrContactId? If I don't use the LeadOrContactId, this would be considered as new contacts, right? Can anyone confirm/reject the above?

Scenario 2

  • When we use the CampaignMember Object directly in Journey Builder - Does Marketing Cloud know to use the LeadOrContactId field, or are these counted as new contacts?


1 Answer 1


Loosely speaking, for a sendable Data Extension populated by SQL Query Activity, the sendable field in your data would be LeadOrContactId. Typically, though, you'd join in your SQL from CampaignMember_Salesforce to Lead_Salesforce to use the "_ContactKey" field from your Lead data. If your Lead has been converted to a Contact, you'd frequently want to use the Id of the new Contact, rather than that of the converted Lead.

    COALESCE(l._ContactKey,cm.LeadOrContactId) AS ContactKey,
    CampaignMember_Salesforce cm LEFT JOIN
    Lead_Salesforce l
        ON  cm.LeadOrContactId = l.Id
    cm.CampaignId = '70MYCAMPAIGNID'

For a Salesforce Campaign entry event in Journey Builder, you don't get to define the Contact Key. The Contact Builder/sendable relationships are selected for you. For regular Salesforce Data entry events, ensure you select "Lead ID/Contact ID" when prompted to select who you want to inject into the Journey Builder Interaction.

  • Thanks @Macca for the thorough answer. Though I understend the solution you propose - what's the advantage to use l._ContactKey in this case? (Or any?) At first sight it seems like an unnecessary JOIN that would always output the same value as cm.LeadOrContactId anyway. What am I missing? Also, as far as I understood, when a Lead converts through a Lead Convert Activity in JourneyBuilder, Marketing Cloud keeps the same _ContactKey for the Contact, so it would make sense to join on Contact_Salesforce more than on Lead_Salesforce, no?
    – LimeWeb
    Apr 7, 2020 at 0:56
  • PS. When I say Marketing Cloud keeps the same _ContactKey, I refer to this answer: salesforce.stackexchange.com/questions/169088/…
    – LimeWeb
    Apr 7, 2020 at 1:15
  • When a Lead is first created, SFMC uses the Lead Id for _ContactKey. When the lead is converted to a Contact, the _ContactKey changes to that of the Contact Id. If you send to converted lead in Lead_Salesforce (or in a filtered DE based on that table), you'll see you're actually sending to the Contact, not the Lead. This is usually the preferred behaviour... You want to see tracking information is Sales Cloud aligned with the Contact and not the now obsolete Lead record.
    – Macca
    Apr 7, 2020 at 1:32
  • When you're looking to inject data using SQL Query Activities based on CampaignMembers, you'd probably want to do similar, but what you have in your CampaignMember_Salesforce table isn't the converted contact id, but potentially the old defunct Lead Id.
    – Macca
    Apr 7, 2020 at 1:34
  • Oh, so the replies on the last StackEschange reference in the previous comment are misleading/out-dated. Is this true regardless if the Lead is converted in SFMC (Lead Convert Activity) or in SFDC (Manual convert by Sales Rep) ?
    – LimeWeb
    Apr 7, 2020 at 1:36

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .