Skip navigation
All Places > Champion Program > Blog > 2016 > March > 10

What I have learned over the years is that it becomes really hard and un-scalable to make a new Facebook, Twitter, LinkedIn, or Google AdWords Program in Marketo for every instance of an advertisement of your content. Take for example EverString's State of Predictive Marketing.  I have that running in retargeting, search engine marketing, Facebook, Twitter, LinkedIn, Nurturing, email list rentals, etc etc. That can quickly get out of control with the number of Programs you would need to build.  Multiple that number against the number of new eBooks and reports and the volume of programs to build and keep track of quickly gets out of hand.

Instead I have built "bucket" programs for both the advertising channel and the piece of content. So for example the State of Predictive Marketing Report, if you download that report through an ad from Facebook you will belong to both the Content program AND the Facebook Master Program. To enable this method I created a Campaign Type in SFDC called "Content" and a Channel tag in Marketo called "Content".  Then whenever we publish a new report, ebook, case study, video, cheatsheet, etc, a program and corresponding SFDC campaign is built to track all the visits and downloads of that content.

Here is a screenshot of our folder for all our content pieces.  All downloads across all channels are recorded in these programs. We can then easily run reports on total number downloads of a piece of content, pipeline sourced, pipeline influenced by the content.  Previously, I had the content spread across 20+ different campaigns and I had a really hard time calculating how many times a piece had been viewed.



Then here is a screenshot of on of our the advertising bucket programs.  The smart campaign to belong to this program listens for the URL of the landing page to contain Facebook in the query string.  I just know that when I'm creating an ad on Facebook, the URL of the landing page needs to contain the UTM of “Facebook” and this smart campaign will react.



Here is a screenshot of my Google Adwords program.  I clone these every quarter so that I can enter in new period costs based on how much we spent in that channel.





The UTM fields can get replaced time over time as a lead interacts with more content. The smart campaign inside the Marketo program listens for the different values in the UTM_campaign= xyz to give each piece of content and campaign credit.


So for example if the landing page is posted to facebook the value for UTM_campaign=Facebook. But if the landing page is posted to an external email campaign in MarketingProfs, the value will be "12-2-marketingprofs".  Examples of URLs I have in use:

The end result is that as a team we can track how content performs with multi-touch attribution and see if the content's impact at different stages of our funnel. 

How are you tracking content success across your channels and programs?

List imports are scary stuff.


There are a lot of things that can go wrong with pushing a file of leads into your database. Duplicates. Overwritten values. Bad data. List imports open you up to a lot of risk to your Marketo database all at once.


But you can set up a line of defense for your more sensitive fields using what I call “proxy fields”, which help you intelligently manage how data is overwritten.


List imports are a daily task for us, and so we’ve gotten pretty strict on the data requirements for new leads, particularly with the lead status field. When we upload, we need to be able to distinguish between suspects/inquiries and truly qualified leads.


We block field updates for the lead status field, meaning it only accepts the first value from a list import, and won’t be changed by future imports. This helps us ensure a lead that’s already an MQL cannot move backwards and become a suspect from a later list import.


This is handy, but field blocking is a double edged sword. Suppose a lead was originally imported as a suspect, but is now on an import list where we’ve marked them as an MQL. In that case, we actually want them to become an MQL, but since that field blocking is in place, that lead’s status won’t be changed, and we’d be forced to fix it manually.


To work around this, we created a proxy field, called “Import Lead Status.” It replaces the standard lead status field on our import lists, and more intelligently manages the data, making sure leads can move forward in status, but not backwards.


Here’s how to set it up in about 10 minutes:


  • Create a new text field with a name distinct from the original field (this should be a marketo-only field), such as “Import Lead Status.” Ensure no field updates are blocked. You may also want to set a few list import aliases for this field, as this is the field you’ll want all your list imports to map to in the future.
  • Create a smart campaign set to run every time a lead qualifies, with two triggers: one for anytime your new field’s value changes, and another for when the lead is created (since data value change triggers won’t fire for new leads). You’ll also want to include two filters:
    • A filter to exclude any lead statuses you do not want to change. You need to include this so your import lead status doesn’t move any leads backwards inadvertently. I decided that anything Marketing Qualified or beyond (SAL, SQL, etc) shouldn’t be changed.
    • A filter the specifies that the import lead status field isn’t empty (for the aforementioned “lead is created” trigger)
  • For your new Smart Campaign’s flow, you just need one step, “Change Data Value” that sets the lead status by grabbing the value from the proxy field, using a field token.


The nice thing about this process is it’s invisible to your other Marketo users. We have a standard import template that we require for any list uploads, and I have “lead status” and variations of it mapped to this proxy field as a safeguard, so to anyone importing lists, this is no different to how they managed the process before. Since implementing this process, it’s had a big impact on efficiency and accuracy for us.


Obviously this is just one example of a proxy field – you could do something similar for geographic fields, company names, phone numbers, and much more. If you’re doing something similar, I’d love to hear about it!


This post originally appeared on

Filter Blog

By date: By tag: