Bombproof your list imports with proxy fields | Community
Skip to main content
March 10, 2016

Bombproof your list imports with proxy fields

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 jeffrshearer.com​

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.

15 replies

September 6, 2016

Thanks, Jeff! This helps!

Translate
September 6, 2016

Hey Franklin,

Sorry for the delayed response. What you're describing is exactly my use case as well. Here's how i do it:

  1. List of leads has each lead marked with the relevant status in their "Lead Status Proxy" field column. This could be "Cold", or it could be "MQL", "SQL", etc. It's basically determined by the person building the list, so they can mark anyone who's a hot lead and who isn't.
  2. That field from the list is then mapped to the "Lead Status Proxy" field
  3. A smart campaign takes the "Lead Status Proxy" value and uses it to set an appropriate "Lead Status" value (the primary field that is actually used for routing and stage changes and whatnot). This basically has two steps:
    1. If the "Lead Status" field is empty, then simply set it to equal the value in the "Lead Status Proxy field (This handles brand new leads, and ensures they're set with whatever value we specified in the list import)
    2. If the "Lead Status" field is NOT empty, then use other criteria to determine what happens to it:
      1. If "Lead Status" = "Suspect" (Our version of "Cold"), then set the "Lead Status" field value to equal the "Lead Status Proxy"field value (This makes sure an existing lead can move forward in the funnel via the list import, if needed)
      2. If "Lead Status" = "MQL", or "SAL" etc, then don't change anything. (This makes sure a lead can't move backwards in status)

You could obviously build onto this list for further refinements and customization, but the basic concept remains: Write to a secondary field, then use that value to determine what value to write to the primary field. It basically lets you replace the rather binary field update blocking settings with something that's much more dynamic and customizable. Hope this helps!

-Jeff

Translate
August 29, 2016

Great article, by the way! Let me explain a scenario and hopefully, you have a suggestion. We are using these proxy fields for a Lead Temp and Lead Status, and all of our list imports, for the most part, will be imported with a Lead Temp=Cold and Lead Status=Prospecting. Here are our exclusions for Lead Status (these statuses will trigger a stage change, just f.y.i.). If we have a lead that has been contacted by an SDR, there Stage=SDEL and Status=Contacted. We would not want an import to regress the status which would move the lead back up the funnel. Here are our exclusions for the proxy field:

Now, in some cases, we will need to import a list, say of event leads, that are actually hot leads and maybe we want them to come in as scheduled (a sales guy booked a demo at a show with this lead). How do we go around this proxy field and potentially move an existing lead down the funnel? This campaign will not pick this and no updates will be made.

Let me know your thoughts. Thanks!

Translate
March 17, 2016

A partition does not need to be nominated for the sync. Any partition is eligible within the rules of your workspaces and partition infrastructure.Some good articles around the community on this.

Translate
March 17, 2016

Sadly, the use case is not under my influence.  I don't like the implementation at all but I have no say in that side of the organisation. I am interested in the idea of using a partition for these leads though.  I need to look into all of the syncing implementations, I'm not that familiar with how syncing with SFDC works with partitions, if I remember correctly, you have to nominate a partition for the sync? Beyond the scope of this article but interesting nevertheless.

Translate
March 17, 2016

I heard whispers of potentially adding in a second key as mentioned above.

Agreed with Jeff, take a look at the use case again. You may be able to implement a process with a second key and or as we have at my company, implemented a "black box" of leads and tucked them into a partition which no one can touch. Leads get to this partition through our purposeful duplicate process.

Marketo associates activity to the original lead as that record has the munchkin tracking etc.

Might not work for you, but hopefully it spurs some creative thought.

Translate
Andy_Varshneya1
Level 7
March 16, 2016

I was thinking about creating those data sanitation campaigns as well, even though we have data enrichment running in real time. Can't wait to see your write up!

Translate
March 15, 2016

Hey Erica,

I wish I had a better answer for you, but that may be tricky to accomplish, and my guide above probably won't be any help on that front!  When duplicates are present, I believe Marketo will associate the list import with the record that was most recently updated. So suppose you have a lead and a contact in your database, but the lead record was updated most recently, then the lead would be the record associated with your list import, and the contact would be unchanged.

This really stems from the fact that Marketo uses the email address as the primary key. It may be possible to work with Marketo support to change what field is used as your primary key, but this sort of configuration can be a huge problem later if not executed correctly, so that would only be advisable as a last resort, and even then I'd probably hesitate to recommend it. 

I'm sure you already have done this, but I recommend taking a close look at the root of the issue: why your company has chosen to structure their data in this fashion. Depending on the priorities of the business, it may make sense to rethink this structure, as it will pose a big hurdle for a lot of activities in Marketo and other systems.

In any case, I hope this helps!

Translate
March 15, 2016

Hey Andy, great comments, and for me, it really comes down to training and expectations with the teams that submit & format the lists. Only a handful of individuals at our organization are allowed to run list imports, so we can allow for a final list data check before uploading to help catch any inconsistencies. We also tend to kick lists back to the requestor if we see incorrectly formatted data in lists. That way we quickly condition these teams to the proper values to use for formatting. This has helped tremendously, and I'd say the amount of times I see issues is down considerably from even a year ago when we started doing this process.

To help catch anything that slips through the net,  these proxy fields certainly help. Another process we have in place is what I call a "new lead processing queue". It's essentially a chain of smart campaigns that run upon lead creation (or could be set to run on data value change triggers) and run the leads through a series of data sanitization steps. This includes steps for standardizing country names (a HUGE issue for us), Lead Source, and yes, even Lead Status. Coincidentally, I'll actually be discussing this very topic in my session at the Summit, and also plan to write up my process here on the community the next few weeks.

For now, I hope this explanation helps!

Translate
March 15, 2016

Thanks for the kind words Loren, and love hearing the use case for Lead Source!

Translate