A couple of months ago the marketing team at Uberflip started kicking around the idea of switching from HubSpot to another more robust system. As we grew our marketing and demand generation campaigns, we needed a more customizable tool that had a deeper integration with Salesforce and would scale well, both operationally and financially.
HubSpot was a great tool to start building our processes for campaigns with, but as we got more complex, we hit certain limitations. The lack of customization options and no Salesforce integration started to hinder our efforts. For example, we couldn’t create our own Lifecycle stages to reflect the realities of our marketing funnel.
When we started the quest to migrate to a different platform, it came down to Marketo and Pardot. The platforms are very similar, each with their own specific quirks and areas where they excel. Ultimately, the winner was Marketo (despite the Pardot sales team making many house calls at the office).
Migrating systems of any kind is a monster project. I’ll share some experiences and process below in case anyone going through their own migration finds it helpful. For context, our team is four people, we have a current contact DB size of 90,000+, and a large number of creative and operational items.
Please note: This is the migration from our internal marketing perspective and there were no changes to our Uberflip Platform integrations with major Marketing Automation platforms.
The Migration Process
Typical MA (Marketing Automation) migrations take at least a month or two months if not more. We had just under a month to flip the switch (yes, the Uberflip has a Podcast of the same name — we like to stay on brand).
We recruited Perkuto (a Marketo agency) to help us manage the project and minimize team disruption, since our team still had our regular demand generation programs to run. With a project of this scale, we had to ensure the business and operations kept running while we slowly switched things over on the back end
We kicked off the migration with Perkuto by having Justin Norris (their Solutions Architect) spend a day with us. We walked him through the operational workflows we had in HubSpot, scoring models, landing page templates, email templates, hand-off processes, data schema, sales processes, and general business roles in Salesforce and HubSpot.
Choosing an MVP Migration Route
Usually migrations of this scale take a few months to complete, yet our HubSpot license was expiring so our timeframe was truncated. To help make it so we didn’t have to work on the migration 24 hours a day, we decided on an MVP migration scope.
MVP in this scenario stands for minimum viable project. We had to figure out what would be the bare minimum for us to migrate over so that things would still function normally and we could hit our deadline. We ended up migrating our database, campaign templates, and operational workflows over first and then later built it to be more robust after the basic elements were done.
If we had more time, we would build out our full funnel nurtures, more templates, in-depth scoring models, tested the Bizible/Marketo integration, and operational workflows for campaigns.
- Doing the work up front to inventory everything, as painful as it is, will make for smooth sailing but don’t spend too much time buried in documentation.
A great upside to a migration is that you can get rid of all the legacy ‘junk’ that collects over time and start fresh. The downside is that the amount of moving parts can be overwhelming.
Based on our discussions, Justin put together a Technical Design Document (TDD) that served as the bible for the migration. The TDD acted as more of a formal project management document, so for keeping track, taking inventory, and marking off to-dos, we used a Migration Workbook (shown below).
- Involve your Demand Generation team or anyone else who spends their day in your Marketing Automation system, but don’t have too many cooks in the kitchen. Otherwise, there will be a ‘paralysis-by-analysis’ type situation. In our case, we included our four-person demand team, and between each of us, we broke down what we were going to do and trusted each other to get the job done.
Our system of record is Salesforce, so before tackling any of the operational and campaign items, we needed to connect Salesforce with Marketo for our leads to start syncing.
Sibil (Marketing Ops) and Tara (Inbound Marketing) segmented our 90,000+ contact database into ‘Marketo Sync’ and ‘Discard’. The discard pile was made up of free email addresses (Gmail, Yahoo, etc.), hard-bounced emails, and anyone who has had zero activity within the past year.
These ‘junk’ contacts still existed as a backup in our Salesforce instance, but they would not be migrated to Marketo.
To segment the database, we created a custom checkbox field labeled ‘sync to Marketo’ and using a Smart List to filter, any contacts that were to be migrated were marked as ‘true’ using a HubSpot Workflow. This checkbox was then synced with Salesforce for all ‘true’ contacts.
Since our Salesforce has our entire marketing/sales database, we had a backup of all contacts ever created there. But to keep our shiny new Marketo instance clean, we only synced the contacts that were actually good.
- There were some issues with setting up the filter in Marketo. It is not a common practice to do this, but it is possible. We had to call Marketo support for this multiple times.
- We migrated over all the ‘opt-outs’ to Marketo due to CAN-SPAM regulations of having an up-to-date list on our current platform. For those who already had opted in, we did not re-opt-in from Marketo.
In HubSpot, we had years of custom fields, one-off fields, checkboxes, and other assorted items. Important note here — these fields were only in HubSpot and not in Salesforce, so there was no Salesforce backup like we had for other items.
Using the HubSpot-Salesforce integration and field mapping, we first made a list of all the correct mappings between the two systems so we could replicate it. We then sat down as a team and looked at all the Marketing-only fields and debated if they were worth keeping or not.
Some were marked as ‘non MVP’ meaning we would revisit them later. Others that were essential for campaign reporting were recreated in Marketo using the same data types to ensure compatibility.
- Ensure you’re mapping the field types correctly. Otherwise, the dates will end up as numbers and numbers as text. Especially for dates, having it as a ‘date’ type makes it easier to segment your contacts using date selection tools.
Templates Forms and Templates & CSS:
Tara took lead on landing pages and emails to determine which ones were actually being used and which ones were ‘tests’ or one-offs. This meant going through each asset to determine if it was in use or going to be used and what exactly it was being used for.
We provided the templates within HubSpot plus screenshots and expected editable areas to Perkuto who then recreated those into Marketo. In some cases, you might be able to use the same HTML/CSS between HubSpot and Marketo as long as you remove the system scripting language.
We sometimes had to jump in and do some fine tuning and QA, especially for the forms. Case in point: in Marketo, if you set the form width using the form editor, it will add in-line styling for each field that will overwrite any custom CSS you add.
Best practice for us is to add styling to the parent class in the CSS instead to keep it consistent and easier to edit (as with the image above — don’t add inline styles).
With landing pages, they are non-responsive by default so we had to go in and add an ‘HTML Box’ to the template to include some media queries which was surprising.
- In Marketo, there is no universal header or footer code section for landing pages. Rather, it is done through a universal token. In HubSpot, it’s relatively easy to add scripts across all HubSpot pages by including them within the universal <head> or </body> section. It seems as though Marketo does not allow for this.
- If you edit any asset, it will be saved as a draft until you approve it. To see the changes you will need to approve it first.
- If the asset (like a form that is being used by a landing page) is edited, the landing page will automatically be saved as a draft. So make sure you save the form, approve it, and approve the landing page as well or none of the changes will be live.
- Marketo form classes are tricky but using something like Firebug will help grab the right selector (but it can make you want to pull your hair out). Pay close attention to checkboxes on forms and their alignment
- If your value from the dropdown in a form isn’t displaying but still passing into Marketo as a data value, check the padding.
- Marketo doesn’t support dropdown fields for custom values. As a workaround, you can create the field in Salesforce and then push it to Marketo.
Workflows & Scoring Model
Our operational workflows control the lead management in our Marketing Automation system. The most red-zone item for us was our assignment rules and demo request assignments. Perkuto took lead on these, setting them up and we QA’d five times to make sure leads were flowing through.
- There’s a small menu to select and/or conditions for triggers.
- If you’re triggering rules, double check if they’re based on ‘data value change’ or ‘blank’. This caused us some headaches.
Lists of all sorts
Lists. Love them or hate them but they’re the heart of segmentation and automation. We cooped ourselves in a room with some music and started going through Smart and Static Lists to determine which ones we wanted to keep and which ones were dispensable.
For the Static Lists, in some cases it made sense to combine multiple lists into one ‘master list’ for easier list management. In that case, we created a new Smart List that triggered static list memberships and exported those as CSVs for backup and importing back to Marketo.
For the Smart Lists, it was a little more complex. Most of our Smart Lists rely on fields that only existed in HubSpot and not Salesforce. We wanted to keep our SF schema clean. With those fields absent in Marketo, it was impossible to recreate those Smart Lists. To work around this, we created the custom fields as needed per the Smart Lists we wanted to recreate in Marketo. It was a tedious task, but it was essential.
After creating the fields in Marketo and creating the right folder structure, we would export the list from HubSpot with emails plus the custom fields selected and populate those fields back in Marketo. In some cases, we combined multiple Smart Lists into a single Smart List and imported those into Marketo.
- Marketo will create a lead without an email. Be wary of that.
- When importing a CSV file, select CSV from the file type in the import menu and don’t rely on the ‘Auto Detect’ default option.
Hub & CTAs and Placements
Another additional step in our migration process was integrating our Uberflip Hub with Marketo.
For the Hub CTAs, we got help from our wonderful content team to replicate each CTA and make a static list in Marketo that it would feed into. After some QA and making sure all the data fields were populating with the correct parameters, we set it aside for a day before launch.
- We had to make sure we did not add any placements until the ‘go-live’ day otherwise we would have a mashup of HubSpot and Marketo CTAs in the hub.
- Make sure the right parameters in the CTA are created as a hidden field.
Marketo is folder based, which means naming convention and structure is very important. We spent some time structuring our marketing campaigns and activities so everything was set up correctly
Having a proper naming convention is a good idea in general, but with Marketo it is crucial to have a consistent naming convention so things are easier to find and work with. In our case, we set it up as the following:
- Active Marketing Programs:
- 2016 Marketing
- 2016 — DD — Campaign Name
- Content Syndication
- CS — 2016 — Asset Name — Channel Name
- 2016 — Event Name
- Evergreen Programs
- 2016 — TOFU — Nurture
General Naming Convention: YY- DD — Asset/Campaign Name — Channel Name
Quality Assurance and Testing
Once everything was uploaded into Marketo, we tested the templates, forms, and workflows for ‘red’ items and set up some ‘Red Zone’ campaigns (like our ABM Hacks series in Marketo).
There were a few bugs we came across on the forms, like the drop-down field having extra padding which meant a user’s selection would not display even though it would get passed into Marketo. Some workflows were set to trigger on data value change, but it did not trigger based on a known value off a blank value.
Another unexpected issue was the DKIM value. Marketo uses ‘m1_key’ which means that we don’t have Marketo authorized to send emails on our behalf.
Our quality assurance was done ad-hoc due to the fact that we had already turned off HubSpot and we were live on Marketo. The team worked hard and fast to make sure nothing important was broken.
In retrospect, we should have communicated the switch-over to our subscribers. It seems like something that wouldn’t make a difference to them since it is all done in the back end, but if something went wrong, they would know why. In one case, an email that went out from HubSpot before the switchover had dead links and missing images if it was opened it after the migration (a gap of three days).
In total, our MVP migration took three weeks to complete. We have a slight learning curve with Marketo after using HubSpot as we’re figuring out its different setups and quirks.
Overall, the migration went smoothly. Some things to keep in mind:
If you decide to migrate, make sure you have everything documented before you begin.
In general to keep a healthy Marketing Automation system, have a clean-up day every six months. This will keep the house in order.
Don’t sweat the details. Most Marketing Automation systems do what you need them to do really, really well. Just make sure you get a walk through of the important features. For us, it was the ability to really customize our campaigns and nurtures and the ability for sales to enroll a contact into a Marketo campaign directly from their Salesforce account.
Test everything. Especially web forms, email delivery, and responsiveness of email and landing page templates. I cannot stress the testing enough. Test all operational workflows, data syncing to Salesforce, and campaign setups. In our case, we had to test Bizible integrations as well.
Huge thanks to Tara, Sibil, Shannon, Victoria, and Kelly from Uberflip as well as Justin, Cat, Eric and Adam from Perkuto for pulling this off. Three weeks is an insanely short amount of time to off a migration. I still remember Justin saying, “Typically a migration takes months, three weeks is unheard of!” But we pulled it off. Massive kudos to everyone involved!
Questions? Come meet me at The Uberflip Experience!