This is a somewhat inadvertent follow up to this week’s Six Principles of Data Cleanliness.
I was working with a client and for some reason we decided to setup an “Unqualified Auto Delete” flow. At the time, it seemed like a good idea because they did not want to keep disqualified leads anymore. It looked something like this:
Member of Smart List IS "Unqualified"
Delete Lead, From CRM IS TRUE
Bonus points if you can tell me why this is bad before we continue. The campaign was set to run nightly, on a daily basis.
Here’s what it should look like (and I don’t recommend this most of the time):
In the meantime, I went in and built a lead lifecycle system, with the brilliant idea of an Auto Disqualify flow. This would take all of the early stage leads that they never wanted and just set Lead Status=Disqualified. Naturally, the Unqualified Auto Delete would handle the rest. How many leads would this affect? Not too many, right?
A bit of a logic error led to a whole ton of leads being pushed to Disqualified and into the waiting jaws of the Unqualified Auto Delete campaign.
Except we were saved by a weird Marketo error and my own foresight. First, I had noticed the Auto Delete did not have a Wait Step. I set that for 30 days before I completed the lead lifecycle. Second, the Queue names had changed in SFDC, but somehow Marketo never updated them in the Change Owner step that predated the name change. So when the Lead was Disqualified, it was never moved from its current owner. (phew!)
But the Scores were changed and that was not as pretty. So now I had 4000 Leads waiting to be deleted from both systems, all without Scores, in the wrong Lifecycle Stage, and with the wrong Status.
How did I roll this back? These lessons will be important if you want to correct the inevitable data error.
Step 1: Who was affected?
This part was fairly easy. It turned out that the Auto Disqualifier was the culprit, so anyone who was a Member of Campaign IS “Auto Disqualifier” is our target. You can also look at Campaign Members at the top of each flow.
Turn that off immediately.
Step 2: Remove from Flow – Save the Leads!
Much like the liver, we better go save those leads from Auto Deletion. In this case, we probably only needed to turn off the Schedule Recurrence until we cleared up the mess. Just in case, however, I ran a Remove from Flow on all the Leads. This is a useful flow step that has been much neglected since the demise of the traffic cop.
It’s a good idea to turn off any flows that may affect these leads or other leads.
Step 3: Reset Data Values
I looked at the Lead Statuses and set everyone who was “Disqualified” to “Open”. It’s not easy to go back unless you had been tracking field history on Lead Status in SFDC. Most firms do run history on this field, so make sure you start to do this.
Then we have to move everyone back from Stage=Disqualifed to Stage = ??. In this case, the Auto Disqualifier was only set to listen for Engaged Leads. Unsurprisingly, as soon as the remaining leads were pushed to Engaged, the Auto Disqualifier did its work. So I just set everyone back to Engaged.
Step 4: Restore Scores with a List Import Overwrite
In Marketo, as you might know, it is really difficult to roll back a data change unless you happened to know precisely what occurred. Thus, Step 3 was easy because we knew all the Leads were Engaged or Disqualified. With Scores, however, we have no idea what it used to be.
Fortunately, another quirk of this system is that all the Score fields were being tracked by SFDC history. I was given a spreadsheet of Old and New Values and worked to get the sheet ready for an import. Once I had the fields:
Lead Score | Behavior Score | Email Address
I could proceed with an import. Marketo will match the records and overwrite the existing scores. Keep in mind that some scores will be above the MQL threshold, thus the Data Value Change will trigger the MQL stage. That is ok, but be prepared for hundreds of leads being pushed to Sales. Warn someone!
If you are field blocking one of the fields you are trying to overwrite on import, Marketo will let you know. Check Admin > Field Management and temporarily remove the restriction.
Step 5: Ask Why This Happened
By this step, I already knew. I had failed to do enough quality checking and testing due to time constraints on the project. Always give yourself enough time to include full testing on a system as complex as Lead Lifecycle (LLC).
Of course, correct any flows that you can.
Step 6: Switch it Back On
After the cleanup was done, we turned the corrected flows back on. The exception was the Auto Disqualifier. I did not trust it to do its job even though I fixed much of the logic. It was too risky.
Remember these key steps to correcting your data errors:
- Who is affected?
- Turn off campaigns and remove from flows
- Reset the data values
- Use a List Import to reset data values (optional)
- Ask why this happened
- Switch corrected flows back on
- Call Marketo Support (if you can’t figure it out).
And here are a few tips on setting up your system to help you repair errors:
- Never automate deletion of leads without at least a 30 day wait step. (I don’t recommend this at all actually, you should do this as part of your Marketo housekeeping).
- Turn on field history in Salesforce for key fields like Score, Lead Status, Lifecycle, etc.
- Test all of your flows.
- Make sure SFDC is backed up.
Have you had any mini disasters with Marketo? How did you solve them?