Standard Operating Procedure

Marketo to HubSpot Migration

Reference: SOP-MAR-001 ·

No matches found in this document. Press Esc to clear.

1. Purpose

This SOP outlines the steps to migrate a marketing automation environment from Marketo to HubSpot. It covers asset inventory, portal configuration, asset migration, data export and import, suppression-list setup, cutover, and post-launch monitoring. The goal is a clean migration with no double sends, no broken redirects, and no lost contact records.

2. Scope

This SOP applies to any team executing a Marketo to HubSpot migration. It assumes a HubSpot license is already purchased and that the migrator has admin access in both platforms. Custom-object work, deep custom-code integrations, and historical activity log imports are out of scope and require a separate workstream.

3. Definitions

3.1 Marketo icon reference

Marketo uses a fixed icon per asset type across its UI. Yellow icons are active assets; gray icons are inactive. Use the icon to triage what to migrate.

Marketo iconMarketo toolHubSpot equivalent
TriggersTriggersWorkflows
Smart CampaignBatch or Smart CampaignWorkflows or Form Automation
EmailEmailMarketing Email
Email TemplateEmail TemplateMarketing Email Templates
FormFormForms
Landing PageLanding PageLanding Pages
Landing Page TemplateLanding Page TemplateDesign Tools, Templates, and Themes
Smart ListSmart ListActive Lists
Static ListStatic ListStatic Lists
ProgramProgramCampaigns

4. Roles and Responsibilities

RoleResponsibilities
Migration LeadOwns the migration plan, asset inventory, and timeline. Coordinates across roles and signs off on go-live.
Marketing OperatorAudits Marketo assets, decides what migrates and what gets deprecated, validates email templates and lead scoring in HubSpot.
IT / CRM AdminConfigures HubSpot portal defaults, users and permissions, sending domain, tracking domain, and any CRM sync (e.g., Salesforce).
Developer (as needed)Rebuilds custom HTML email or landing-page templates, configures custom objects, handles API-based data transfer for large databases.
StakeholdersSign off on Kill/Keep decisions, subscription strategy, and cutover date.

5. Prerequisites

6. Procedure

6.1 Build the asset inventory

Create a shared spreadsheet with one tab per asset family. Document each item to migrate, its dependencies, and its HubSpot target.

Pro Tip: Picklist values must match exactly between platforms (case-sensitive). Mismatches cause silent sync failures later.
Users, Properties & Forms tab
Users, Properties & Forms tab. Source: Aptitude8.

6.2 Configure the HubSpot portal

Navigate to Settings → Account Setup → Account Defaults. Configure the tabs in order: General (company name, domain, address), Security (SSO, 2FA), Branding (Brand Kit logos, colors, theme), User Defaults (set before adding users; defaults do not retroactively apply), and Currency.

6.3 Configure tracking and analytics

Navigate to Tools → Tracking & Analytics → Tracking Code.

6.4 Set up users, teams, and permissions

Navigate to Settings → Users & Teams. Create Teams that match the org structure (Sales, Marketing, Service, Admin). Start from HubSpot's built-in Permission Sets (View Only, Standard User, Content Marketer, Marketing Manager, Sales Manager, Sales Rep, Super Admin); only build custom sets when none of the defaults fit. Name Permission Sets and Teams the same where they map for clarity. Enforce MFA.

6.5 Build templates and themes

Website / Landing pages: upload or customize a theme under Settings → Tools → Website → Themes. Recreate Marketo landing-page templates as HubSpot templates via Design Manager.

Emails: use HubSpot's stock drag-and-drop email templates as a starting point. Choose the one closest to each Marketo template, customize, and save as a HubSpot template. Map Marketo personalization tokens to HubSpot tokens, and Marketo dynamic-content segments to HubSpot lists.

6.6 Migrate properties

Most Marketo default properties map directly to HubSpot defaults (First Name, Last Name, Email, Phone, City, State, Job Title, Company). Do not recreate these as custom properties. For everything else:

  1. Run a deprecation pass first: kill orphaned fields, deduplicate, drop fields with no value in the last 12 months and no reference in any active asset.
  2. Create the surviving fields as HubSpot custom properties before any import. Property creation must come before data import or the import wizard will not find a target column.
  3. Replicate picklist, checkbox, and radio-button options exactly.
Marketo objectHubSpot object
PersonContact
CompanyCompany
OpportunityDeal
Custom ObjectCustom Object (Enterprise + developer time)

6.7 Migrate lists

Smart Lists (active in Marketo) → HubSpot Active Lists. In Marketo, open each list and check whether the Smart List tab uses "Use ALL Filters" or "Use Advanced filters with custom rules." Replicate the AND/OR logic in HubSpot using filter branches. Reuse the exact Marketo list name in HubSpot for searchable QA.

Marketo Smart List criteria
Marketo Smart List criteria. Source: Aptitude8.

Static Lists → HubSpot Static Lists. Export from Marketo via List Actions → Export List. The export runs in the background; small lists take minutes, large lists hours. Import to HubSpot only after the target properties exist.

6.8 Migrate workflows

For each surviving smart campaign, create the equivalent HubSpot workflow using the exact Marketo name. Marketo's Flow tab maps to HubSpot's Workflow Actions; Marketo's Smart List tab maps to HubSpot's enrollment triggers.

Five Marketo flow actions do not have a direct HubSpot equivalent. Use the documented workaround:

Marketo actionHubSpot approach
Change Program StatusNo equivalent. Assign the workflow to the corresponding HubSpot Campaign for attribution.
Change Data Value (conditional)Use an If/Then branch + Set Property Value action + Go-To action to rejoin the main flow.
Request CampaignMaps to "Enroll in another workflow."
Campaign is Requested (trigger)Use HubSpot's Enrollment Triggers: Setup Triggers → Workflows → Enrolled in Workflow → Enrolled By Workflow → select source workflow.
Remove From FlowUse the Goals feature. The Goal acts as an automatic un-enroll when a contact meets the criteria.
Marketo Flow tab
Marketo Flow tab (Smart List, Flow, Schedule). Source: Aptitude8.

6.9 Configure subscription types

Navigate to Tools → Marketing → Email. Define subscription types before migrating any email; every HubSpot marketing email requires one. Do not mirror Marketo subscription types one-for-one; consolidate to the smallest set that lets users opt in/out per channel intent (Newsletter, Product Updates, Events) plus regional variants if consent law requires.

6.10 Configure lead scoring

HubSpot scoring rules live under Settings → Properties → Contact Properties → HubSpot Score. Replicate Marketo's positive and negative rules.

6.11 Test in sandbox

On HubSpot Enterprise, sync all rebuilt assets to a Sandbox first. Run test contacts through workflows and emails before touching production data.

Pro Tip: HubSpot Sandboxes do not sync changes back to production. Keep a change log during sandbox QA and replay it manually in production before go-live.

6.12 Export Marketo data

Two strategies depending on database size:

Navigate to Database → System Smart Lists → All People, then List Actions → Export List. Do not use the Marketo to HubSpot Sync App for migration; it only handles text-field properties on the Contact object.

Marketo System Smart Lists → All People
Database → System Smart Lists → All People. Source: Aptitude8.

6.13 Configure suppression lists

This step prevents contacts who already ran through a Marketo flow from running through the HubSpot equivalent at cutover, which would cause duplicate sends.

  1. For each migrated workflow, export its Marketo Members List (linked in the inventory).
  2. Upload the Members List into HubSpot as a Static List, named to match the workflow it suppresses.
  3. Open the matching HubSpot workflow, go to Settings → Un-enrollment and Suppression, and add the list under "Suppression Lists for this workflow."
  4. Skip this step only for workflows explicitly designed to allow re-enrollment (typically form-submission triggers).
HubSpot suppression list settings
HubSpot workflow → Settings → Un-enrollment and Suppression. Source: Aptitude8.
Pro Tip: Skipping suppression lists is the single most common cause of duplicate sends at cutover. Treat this as mission-critical.

6.14 Time the cutover

If the Marketo license continues past go-live, let contacts already in a wait step of a Marketo smart campaign finish in Marketo. Check the campaign's Status tab for "People in Wait Step." If non-zero, remove the Smart List criteria so no new contacts enroll, but leave the campaign live until current members complete. If zero, deactivate via the Schedule tab.

Marketo Status tab showing People in Wait Step
Marketo campaign Status tab. Source: Aptitude8.

6.15 Update DNS and URL redirects

The following steps must happen close to simultaneously to prevent Marketo pages from staying live while HubSpot takes over.

  1. Update DNS records for the subdomains chosen for HubSpot hosting.
  2. If HubSpot uses a different subdomain than Marketo, add the old Marketo subdomain as a Redirected Domain in Tools → Website → Domains & URLs.
  3. Add URL redirects under the Redirects tab. Use Standard Redirects for most pages. Enter the full Marketo URL in Original URL and the full HubSpot URL in Redirect To.
Pro Tip: HubSpot can only redirect URLs on domains it hosts. The old Marketo domain must be added to Domains & URLs first, with DNS pointing at HubSpot, or the redirect will not fire.
HubSpot Add URL Redirect form
Add URL Redirect form. Source: Aptitude8.

6.16 Post-launch monitoring

7. Revision History

VersionDateAuthorDescription
1.02026-05-21RefindableInitial release. Procedure restructured around the Aptitude8 reference guide.