Posts Tagged ‘Hubspot’

Note: This is not a product endorsement. There are some product flaws in Hubspot that I don’t cover here.

We recently switched from Marketo to Hubspot at CrowdRiff, yes I was involved in a switch from Hubspot to Marketo at Uberflip before so it was an interesting experience see’ing the process from both sides.

The primary reason for switching was usability. Hubspot in general is easier to use and manage then Marketo for a dozen or so reasons that I wont get into today. I’ll say this, the general perception that Marketo is more robust might not hold true anymore.

If you’ve read my previous post about building a lead to account matching in Marketo (without external plugins) you’ll realize how painful it is. Marketo’s matching caps out at 500 entries from what I know.

With Hubspot there is a magical setting that matches any new leads to existing accounts and syncs their status

What does this do?

Imagine you have an account in Salesforce from Acme Co and it has a contact with the email sophia@acme.co who is currently in the Opportunity status.

You run some Facebook ads and you get another lead from company Acme Co with the email kamil@acme.co. In the perfect world, you want to avoid communicating with kamil@acme.co with messages meant for a prospect because someone from your team is already chatting with acme.co about signing a deal. Ideally you want kamil@acme.co to be routed to the company acme.co and not sit as a lonely lead in your database and end up getting pulled into marketing comms and keep your reporting and database clean. That can happen one of two ways:

  1. kamil@acme.co is auto-converted into a contact in Salesforce under the Acme.co account and the lead status is updated.
  2. kamil@acme.co is NOT converted into a contact in Salesforce but the lead status is still updated to show that it’s part of an active sales opportunity.

With the Hubspot trigger, any new lead that is created from an existing account will match the lifecycle stage of the existing contacts within that account. What that means is, kamil@acme.co will not have the status ‘MQL/Lead’ which means open season for marketing, typically nurture emails or such. Instead kamil@acme.co will have the lead status ‘Opportunity’ because someone from that company already has that status.

Here’s an attempted flow chart to simplify the text:

I am not great at flow charts.

The same principles apply if it’s a lead from an existing customer. It’s does happen, more often then not, that you have a customer in your database with 3 known contacts. What if a 4th person from that customer account downloads an ebook you just put out? How would you avoid putting that person from a company who’s already a customer in your ‘Downloaded eBook’ nurture? With the matching in Hubspot enabled, the new person will have the status ‘Customer’ so they’ll get routed to a suppression list.

You must always have a suppression list.

Before we moved to Hubspot and enabled this, we had some instances where customers/opportunities got pulled into marketing lists by accident since the status wasn’t changed.

You might be thinking, that’s all great but we don’t use Hubspot Lifecycle Stages because we can’t customize them, so we use our own custom field for status, how would it work then?

Use Workflows.

Workflows take care of mapping your custom status field to match the Hubspot lifecycle stage. So even though you are not using the Lifecycle stage to track lead/contact status, you can create workflows to trigger your custom field based on the changes to the lifecycle stage field. Word of caution, make sure you don’t have multiple workflows overwriting the same field.

Although the system only looks at the domain information, it comes pre-packaged with Hubspot and it does save me much of data management problems such as pulling customer contacts who have not been set as customers into an email list for a sales campaign. You could use third party Salesforce plugins like LeanData for more robust fuzzy matching with multiple data points and auto converting leads into contacts under matches accounts within Salesforce.

If you’ve experienced issues like this and have tried this or a different approach, please let me know in the comments below!

P.S: This setting is in Hubspot Sales, Hubspot’s free CRM.

P.P.S Hubspot also has a Company -> Lead ownership matching, avoiding the scenario where leads & accounts have multiple owners for the same company.

Read Full Post »

Originally Published on Inbound.org as an Inbound Original.

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.

Syncing Salesforce

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.

Data Schema

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.

Naming Convention

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
  • Webinars
  • 2016 — DD — Campaign Name
  • Content Syndication
  • CS — 2016 — Asset Name — Channel Name
  • Social
  • Events
  • 2016 — Event Name
  • Evergreen Programs
  • Nurtures
  • 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.

Lessons Learned

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!

Hacker Noon is how hackers start their afternoons. We’re a part of the @AMI family. We are now accepting submissions and happy to discuss advertising & sponsorship opportunities.

If you enjoyed this story, we recommend reading our latest tech stories and trending tech stories. Until next time, don’t take the realities of the world for granted!

Read Full Post »

%d bloggers like this: