A Centralized Marketo Attribution Model

This is a guest post written by Marketing Operations pro Tyron Pretorius. To read more from Tyron, find him on The Workflow Pro.

As marketing operations professionals I’m sure we’re all familiar with how important it is to be able to show marketing’s contribution to growing revenue. This is why having a Marketo attribution model to tie people and opportunities back to the marketing campaigns that created them is fundamental to proving marketing ROI and effectiveness.

This post will show you how to set up a centralized attribution model in Marketo so that you can track web page visits originating from paid or organic channels. It will also talk about the benefits compared to having a distributed first-touch attribution model, both of which I can provide first-hand context on.

Issues with a Distributed Marketo Attribution Model

Distributed Attribution Model Flow Diagram

In the Marketo UTM Tracking & Automation post, I outline how I set up a first-touch attribution model using “Visits Web Page” triggers within smart campaigns dedicated to each paid or organic marketing campaign. Each marketing campaign has its own Marketo program and within this program, there is a first-touch tracking smart campaign.

Distributed first-touch attribution campaign setup

Boy oh boy did we run into a lot of issues with this distributed first-touch attribution model. Basically, it came down to two main contributing factors:

  1. Marketo’s inbuilt merging was wreaking havoc with our attribution smart campaigns
  2. The quirky behavior of previously anonymous people running through the flows of the attribution smart campaigns

These factors led to two mains issues that needed to be addressed with a centralized attribution model:

  1. Not being able to use wait steps for previously anonymous leads to delay attribution campaigns until after merging was complete
  2. Not being able to prioritize which campaigns should get the first bite of the cherry when it comes to claiming attribution for a person

Merging Preventing, Interrupting, or Nulling Attribution

Now, I will start by saying that this might not be an issue for most Marketo users. However, at my company Telnyx because of the setup we have for our online portal, whenever someone signs up we get 2 duplicates created simultaneously: one from filling out a Marketo form and one from a Segment event. Since the majority of our leads are created by signing up for the portal and since the 3 issues below were wreaking havoc with attribution this was a big priority for us.

If you do not have issues with duplicates being created and messing with your attribution then you can skip to the “Anonymous Leads Qualifying for Attribution Campaigns” section below.

As explained in the video above, Marketo’s inbuilt merging functionality was running around the time of creation of these duplicates causing 3 issues:

  1. Stopping attribution campaigns from even starting in the first place
  2. Interrupting attribution campaigns so that they did not finish setting all of a person’s attribution fields
  3. Nulling attribution fields during the merge

As explained in this Marketo forum discussion I started on the topic, Issue #1 can be explained by the fact that lead x visited the webpage with query string parameters but lead y turns out to be the winner of the merge. Therefore, if the merge happens before lead x gets a chance to run through the attribution campaign then after the merge is complete, lead x no longer exists and Marketo is not smart enough to run the merged lead through the campaigns that lead x qualified for.

With Issue #2 Marketo would ideally wait until the person has gone through all the smart campaigns they qualified for while anonymous or newly created before merging. Woe is me, unfortunately, this is not to be!

Issue #3 was incredibly frustrating and it is poor design on Marketo’s part. Whenever Marketo merges 2 known people the activity logs, program + campaign + list memberships, CRM information, and all fields are combined in the merge. Unfortunately, when Marketo merges a known record with an anonymous record only activities and inferred field values are preserved i.e. other standard and custom fields are not preserved.

For us this meant that our custom attribution fields to store the marketing campaign information and sub-channel information were not retained in the merge, only the value in the “Person Source” field was retained to store the channel information (you can see this at minute 2:20 in the video above). In fact, there is an idea in the Marketo community to block field updates from merging, which would solve this issue.

The solution to dealing with these 3 troublesome merging issues upon creation?


This was easier said than done because as we will see in the next section, anonymous leads who qualify for smart campaigns do not go through wait steps in these campaigns when they become known.

Anonymous Leads Qualifying for Attribution Campaigns

As outlined in the Marketo Anonymous Leads & Attribution post, when an anonymous person becomes known they will run through all the smart campaigns they qualified for while anonymous with the caveat that they will not be eligible for the “Wait” action.

Not being able to use a wait step for these previously anonymous leads to delay the first-touch attribution campaign from running until after merging has been completed was one issue we encountered.

The second issue has to do with the fact that these previously anonymous people are not guaranteed to pass through the smart campaign flows in the same order that they actually qualified for the campaigns.

For example, if they do Action 1 to qualify for Campaign 1 at 1 o’clock and then do Action 2 to qualify for Campaign 2 at 2 o’clock, we are not guaranteed that the person will go throw the flow of campaign 1 before the flow of campaign 2 once they become known. As shown in the video in the Marketo Anonymous Leads & Attribution post, this can be troublesome because attribution can be stolen away from your paid attribution campaigns and the person’s “Latest Touch” field may not be accurate.

Benefits of a Centralized Marketo Attribution Model

As will become clear after reading how the centralized attribution model is set up, this model solves the two previous issues thereby allowing two main benefits:

  • The ability to delay attribution campaigns from running until some time after a person is created.
    • This is because the trigger that starts the attribution workflow is now a “Person is Created” trigger on a Known record rather than a “Visits Web Page” trigger that anonymous people can qualify for
  • The ability to allow paid campaigns to get first priority to set a person’s attribution fields above organic campaigns

Centralized Marketo Attribution Model Setup

Centralized Attribution Model Flow Diagram

The main master campaign (one campaign to rule them all, one campaign to find them, one campaign to prioritize them all, and in the darkness execute them; any LOTR fans out there???) is triggered whenever someone is created in Marketo. It then waits before beginning down a cascade of sub-master executable campaigns for each channel that will each, in turn, execute all the first-touch executable campaigns that exist for this channel.

The wait step is optional but if like me you need to delay so some processes e.g. merging, can complete before setting attribution then you can include this step.

Why executable campaigns over request campaigns?

Well, inquisitive reader, the reason for this is that we need to ensure that all the first-touch campaigns in the first sub-master have been completed before the first-touch campaigns in the next sub-master start running, otherwise they might steal attribution from the campaigns in the first sub-master (see the Marketo Executable Vs Request Campaigns post for more information).

First-Touch Attribution Campaign Setup

The first-touch attribution smart campaign is now executable relying on filters instead of triggers like the previous distributed campaigns (see the “Issues with a Distributed Marketo Attribution Model” section above).

Smart list of a first-touch attribution executable campaign

The flow then sets their program status before checking to see if their “Person Source” field has been set. If it has been set then the person will not progress down the rest of the flow since they already have their first-touch attribution parameters set. Otherwise, they will progress down the flow and get their first-touch parameters set accordingly.

The executable campaign above is intended to set attribution for newly created people. However existing people can also come to our site from a marketing campaign so the “Visit Existing” campaign was created to ensure that the person has an email address i.e. not an anonymous person, and that they have gone through the attribution master i.e. they already have their attribution set (if not they should instead go through the executable campaign from the attribution master flow).

If they qualify for this visit existing campaign then they will have their program status updated to “Visited” and their “Latest Touch” field updated to a value corresponding to the marketing campaign that brought them to the site.

Smart list of the latest-touch campaign for existing people

Marketo Attribution Model Follow-Ups

I linked to a lot of supporting material in this post so if you are a little bit confused then take a look at the posts below before coming back to this one:

  1. Marketo UTM Tracking & Automation
  2. Marketo Anonymous Leads & Attribution
  3. Marketo Executable Vs Request Campaigns

If, like my team, you have a lot of attribution programs that need to be created or cloned every month then take a look at these posts to see how you can automate the creation and cloning of these campaigns:

Blog Navigation

Subscribe to Stack Report

Everything you need to know about your revenue stack, in your inbox on Monday mornings.