CRM migration

Migrate from Dynamics 365 Marketing to HubSpot

Field-level mapping, validation, and rollback between Dynamics 365 Marketing and HubSpot. We move data and schema; workflows are rebuilt natively in HubSpot.

Dynamics 365 Marketing logo

Dynamics 365 Marketing

Source

HubSpot

Destination

HubSpot logo

Compatibility

100%

12 of 12

objects map 1:1 between Dynamics 365 Marketing and HubSpot.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Dynamics 365 Marketing stores data in Microsoft Dataverse, using a relational model built around Accounts, Contacts, Leads, Opportunities, Marketing Lists, and Campaigns. HubSpot uses a flat contact-centric model with Companies, Contacts, Deals, and custom objects. The two platforms diverge most sharply in how they handle lifecycle data, marketing automation logic, and workflow constructs. We extract Dynamics 365 data via the Dataverse API and bulk export tools, transform each entity according to HubSpot's property naming conventions (snake_case, hubspot-specific suffixes), and load through HubSpot's Contacts API and bulk import endpoints. Accounts map directly to Companies; Contacts map to Contacts with email as the primary key; Leads and Opportunities map to Contacts and Deals respectively. Dynamics 365 marketing lists become HubSpot static lists; campaigns require manual rebuild in HubSpot's campaign tool. All custom fields migrate as HubSpot custom properties. Workflows, customer journeys, email templates, and Power Automate flows do not transfer — we export definitions as JSON for your HubSpot admin to rebuild in HubSpot's workflow builder.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Dynamics 365 Marketing logo

Dynamics 365 Marketing

What's pushing teams away

  • Users without prior Microsoft stack experience report the interface as complex and overwhelming, with menu navigation described as clunky and feature locations hard to remember across sessions.
  • Performance degrades noticeably when handling large contact databases or running complex Journey logic, leading to slow load times that disrupt marketing team workflows.
  • Licensing costs are prohibitive for small to mid-market teams; the per-tenant Marketing price point starts at $1,500/month before user-level CRM seats are added.
  • Implementation timelines commonly stretch to 6-12 weeks for full deployments, and organizations underestimate the hidden costs of training, integration, and data migration that are not included in licensing quotes.
  • Power Apps and Power Automate are marketed as low-code but require technical resources to extend; business users hit barriers quickly when documentation assumes IT-level familiarity.

Choosing

HubSpot logo

HubSpot

What's pulling them in

  • Lowest barrier to entry of any major CRM — the free tier with unlimited contacts lets teams validate fit before committing to a paid plan, according to G2 and Capterra reviewers.
  • Native integration between the CRM and sales engagement tools (sequences, email tracking, dialer) means no separate sync configuration, a theme across G2 Sales Hub reviews.
  • Pipeline visualization, deal tracking, and automated workflows are consistently praised as intuitive and easy to set up without developer involvement.
  • Strong onboarding for new team members — reviewers on Capterra and G2 highlight how quickly new reps become productive without formal training.
  • The HubSpot platform ecosystem (Marketing, Sales, Service, CMS hubs) allows growing companies to consolidate tools without building new integrations.

Object mapping

How Dynamics 365 Marketing objects map to HubSpot

Each row shows how a Dynamics 365 Marketing object lands in HubSpot, including any object-level transformations, lookup resolution, or schema-design dependencies.

Typical mapping — final map is confirmed during the sample migration step.

Dynamics 365 Marketing

Account

maps to

HubSpot

Company

1:1
Fully supported

Dynamics 365 Accounts map directly to HubSpot Companies. Account.Name becomes Company name. HubSpot's primary-company model differs from Dynamics 365's required AccountId on every Contact — we resolve the primary company by account role or most-recent modification date. This ensures accurate company attribution for reporting.

Dynamics 365 Marketing

Contact

maps to

HubSpot

Contact

1:1
Fully supported

Contact maps 1:1 to HubSpot Contact. Email is the deduplication key. We preserve Contact.fullname as FirstName + LastName split, phone, jobtitle, and all address components. Dynamics 365's createdon and modifiedon timestamps migrate as custom datetime properties for reporting continuity across systems.

Dynamics 365 Marketing

Lead

maps to

HubSpot

Contact

1:1
Fully supported

Dynamics 365 Leads with status 'Open' or 'Qualified' that were not converted to Contacts map to HubSpot Contacts with lifecycle_stage set to 'lead'. Leads that converted to Contacts already exist in the Contact table and do not duplicate and are retained for audit.

Dynamics 365 Marketing

Opportunity

maps to

HubSpot

Deal

1:1
Fully supported

Opportunity maps to HubSpot Deal. Opportunity.name becomes Deal name; estimatedvalue maps to amount; estimatedclosedate maps to closedate; statecode/stagecode maps to dealstage. HubSpot deal pipelines are separate from the Deal object — we map each Dynamics 365 Opportunity's salesstage to a corresponding HubSpot pipeline stage.

Dynamics 365 Marketing

Account (parent/child hierarchy)

maps to

HubSpot

Company (parent company relationship)

1:1
Fully supported

Dynamics 365 parentaccountid creates a parent-child account hierarchy. HubSpot Companies support a single parent_company_id field. We map the top-level parent account first, then resolve child accounts referencing their parent. Circular references (if any) are flagged for manual resolution and are documented in the migration report for your team to address before final load.

Dynamics 365 Marketing

Marketing List

maps to

HubSpot

HubSpot List (static)

1:1
Fully supported

Dynamics 365 Marketing Lists are entity-specific (Contact, Account, or Lead lists). Each list migrates as a HubSpot static list. Dynamic marketing lists require HubSpot's list-filter equivalent to be rebuilt — we export the filter criteria as JSON for your HubSpot admin.

Dynamics 365 Marketing

Campaign

maps to

HubSpot

HubSpot Campaign

1:1
Fully supported

Dynamics 365 Campaigns carry journey logic, multi-channel execution records, and campaign activity history. HubSpot Campaigns track email campaign performance only. We migrate the campaign name and description as a custom object for reference; the campaign structure and customer journeys must be rebuilt in HubSpot.

Dynamics 365 Marketing

Product

maps to

HubSpot

HubSpot Product

1:1
Fully supported

Dynamics 365 Products (with product hierarchy, pricing, and unit groups) map to HubSpot Products. Product.name, productnumber, and defaultuomscheduleid (unit of measure) transfer. Bundle and product family structures become HubSpot product categories. Pricing lists and unit groups are preserved, and any associated product relationships are mapped accordingly.

Dynamics 365 Marketing

Opportunity Product (Line Items)

maps to

HubSpot

Deal Line Items

1:1
Fully supported

Each Opportunity Product line item in Dynamics 365 maps to a Deal Line Item in HubSpot. Quantity, unit price, manual discount, and product lookup resolve against the migrated Product records. If the product does not exist, the line item is created without the product link and flagged for review.

Dynamics 365 Marketing

Annotation (Notes/Attachments)

maps to

HubSpot

HubSpot Note / Attachment

1:1
Fully supported

Dynamics 365 Notes (notemime = 'text/html') migrate as HubSpot Notes with creation timestamp and owner preserved. File attachments (annotation_documentbody) download, re-upload to HubSpot Files, and attach to the corresponding contact, company, or deal record. Ensuring that attachment metadata, such as file size and original filename, is retained in HubSpot's file manager.

Dynamics 365 Marketing

Activity (Email, Task, Phone Call, Appointment)

maps to

HubSpot

HubSpot Email, Call, Meeting, Task

1:1
Fully supported

Dynamics 365 activities map to their HubSpot equivalents: Email -> Email, Task -> Task, PhoneCall -> Call, Appointment -> Meeting. We preserve subject, description, regardingobjectid (linked record), createdon, and owner. Activity party records (attendees, recipients) resolve by email to HubSpot contacts.

Dynamics 365 Marketing

Custom Entity (Dataverse)

maps to

HubSpot

HubSpot Custom Object / Custom Property

1:1
Fully supported

Dataverse custom tables migrate as HubSpot custom objects if they have a relationship to Contact or Company. Standalone custom tables without HubSpot equivalents become custom properties on the primary contact/company record. N:N relationships in Dataverse may require HubSpot custom junction objects.

Gotchas + challenges

What specifically takes care here

Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.

Dynamics 365 Marketing logo

Dynamics 365 Marketing gotchas

High

Marketing Contact billing triggers on record import

High

Configuration Migration Tool does not migrate high-volume transactional data

Medium

Customer Insights segments are stored separately from Dataverse CRM records

Medium

Marketing Lists and Campaign Activities have legacy schema dependencies

Low

Custom entities require a managed solution schema, not a UI export

HubSpot logo

HubSpot gotchas

High

Marketing Contacts billing model is migration-critical

High

Feature tier gating is not visible until onboarding

Medium

Mandatory onboarding fees inflate year-one cost

Medium

HubSpot CSV importer cannot migrate engagements or attachments

Medium

Custom objects require Enterprise and a pre-existing schema

Pair-specific challenges

  • Marketing lists do not migrate as active HubSpot lists

    Dynamics 365 Marketing Lists hold member lists scoped to Accounts, Contacts, or Leads with both static membership and dynamic query-based inclusion. HubSpot Lists are a separate object with different filter syntax. We export marketing list membership as static HubSpot Lists for contacts that were members. Dynamic marketing list logic requires rebuilding in HubSpot's list-builder using HubSpot's filter operators. The filter definition from D365 is exported as JSON for your admin to reference during rebuild.

  • D365 Leads with open status become HubSpot Contacts at 'lead' lifecycle stage

    Dynamics 365 separates Leads from Contacts as distinct entities; a Lead must be qualified and converted to create a Contact record. In HubSpot, all people are Contacts with a lifecycle_stage property. Unconverted D365 Leads land as HubSpot Contacts with lifecycle_stage set to 'lead'. Contacts that already exist from converted Leads are deduplicated by email — the Lead record does not create a duplicate. D365 Lead source fields and lead quality ratings migrate to HubSpot custom properties for reference.

  • Dynamics 365 workflows and Power Automate flows do not migrate

    Dynamics 365 Marketing relies heavily on workflows and Power Automate for lead routing, task creation, email follow-ups, and data updates. HubSpot's workflow builder is a separate automation environment with different triggers, conditions, and actions. All workflow definitions are exported as JSON (Power Automate exports to JSON; legacy D365 workflows export as XAML). Your HubSpot admin uses these exports as a rebuild reference. Power Automate flows connecting D365 to other Microsoft services (Teams notifications, SharePoint, Power BI) have no HubSpot equivalent and must be designed fresh.

  • Campaign structure and customer journey history do not transfer

    Dynamics 365 Campaigns carry multi-channel campaign records, customer journey definitions, and execution history spanning email, events, and custom channels. HubSpot Campaigns track email campaign opens, clicks, and unsubscribes only. We migrate the campaign name, description, and start/end dates as a custom object record for historical reference. The customer journey logic, channel execution data, and multi-touch attribution history cannot be represented in HubSpot's campaign model and are not migrated. Email templates and content blocks from D365 marketing emails can be exported as HTML and re-uploaded manually.

  • Dataverse custom field naming conventions require transformation to HubSpot snake_case

    Dynamics 365 Dataverse appends the organization's publisher prefix to custom fields (e.g., new_customfield, cr5c_customproperty). HubSpot uses lowercase snake_case without prefixes (e.g., custom_field_name). Custom fields with identical logical names in D365 may have different display labels. We strip the publisher prefix, convert to snake_case, and check for naming conflicts in HubSpot before import. If two D365 custom fields map to the same HubSpot property name after transformation, they are merged or flagged for manual renaming.

Migration approach

Six steps for a successful Dynamics 365 Marketing to HubSpot data migration

  1. Extract Dynamics 365 data via Dataverse API and Configuration Migration Tool

    We connect to your Dynamics 365 environment using OAuth 2.0 with an Azure AD application registration. Standard entities extract via the Dataverse Web API (OData 4.0 endpoint). Configuration data (marketing lists, campaign templates, custom field metadata) uses Microsoft's Configuration Migration Tool. We extract in dependency order — Accounts first, then Contacts, then Opportunities — so foreign key relationships resolve during load. For large datasets (>100k records), we use Dataverse's bulk export to Azure Blob Storage, then process from Parquet files to avoid API pagination limits.

  2. Clean, deduplicate, and resolve owner records

    Before mapping, we run deduplication across Contacts by email address, flagging duplicate records for your team to resolve or accept a merge strategy (keep oldest, keep newest, or manual selection). We match Dynamics 365 owner records (systemusers) to HubSpot users by email address. Unmatched owners are reported — your team either creates HubSpot user accounts first or assigns records to a designated fallback owner. Activity records with invalid regardingobjectid references are excluded from migration and logged.

  3. Map and transform fields, create HubSpot custom properties

    We apply the field mapping rules: Dataverse names to HubSpot snake_case, picklist values to HubSpot option labels, and lookup references to HubSpot associated record IDs. Custom Dataverse fields that have no HubSpot native equivalent are created as HubSpot custom properties during the mapping phase. After mapping, we validate referential integrity — every Contact with an AccountId must have a corresponding Company in HubSpot before Deals can associate.

  4. Run a sample migration with field-level diff

    A representative slice — typically 100–500 records spanning Contacts, Companies, Deals, and a set of activity records — migrates first into a HubSpot sandbox or staging account. We generate a field-level diff comparing source D365 values against destination HubSpot values. You review the diff to verify lifecycle stage mapping, pipeline-to-stage mapping, owner resolution rate, and custom property creation. No records commit to production until you approve the diff.

  5. Execute full migration with delta-pickup window

    Approved migration runs against your live HubSpot account. A delta-pickup window (24–48 hours after the full migration completes) captures any records created or modified in Dynamics 365 during the cutover. We apply an audit log entry for every migrated record with the source system ID, migration timestamp, and operation type. If reconciliation fails — record counts mismatch, field validation errors, or owner resolution gaps below your threshold — one-click rollback reverts all migrated records from HubSpot and triggers a rerun with corrected mapping.

Platform deep dives

Context on both ends of the pair

Dynamics 365 Marketing logo

Dynamics 365 Marketing

Source

Strengths

  • Native integration with Microsoft 365, Teams, and SharePoint eliminates separate identity and document management overhead.
  • Dataverse provides a unified data layer across CRM, Customer Service, and Marketing, enabling single-customer-record views without ETL synchronization.
  • Customer Insights - Journeys includes AI-assisted content generation and predictive lead scoring as part of the Marketing tier.
  • Per-tenant pricing covers unlimited marketing contacts beyond the base tenant fee, which benefits large database marketers.
  • Configuration Migration Tool supports movement of marketing assets between environments for Dev-Test-Prod promotion.

Weaknesses

  • Per-tenant marketing pricing at $1,500/month plus user-level CRM seats creates significant cost for organizations not already committed to the Microsoft stack.
  • Steep learning curve and complex UI navigation mean implementation projects routinely require 6-12 weeks with dedicated admin resources.
  • Performance issues arise with large datasets and complex Journey logic, particularly when the marketing environment shares Dataverse capacity with other applications.
  • The split between outbound marketing (Customer Insights - Journeys) and transactional CRM data introduces schema complexity that simpler standalone marketing tools do not have.
  • Configuration Migration Tool cannot handle high-volume transactional data; large record migrations require Power Automate flows or custom plugins instead.
HubSpot logo

HubSpot

Destination

Strengths

  • Genuinely useful free CRM tier with no seat limit on contact records.
  • All-in-one sales engagement layer (sequences, email tracking, calling, dialer) embedded natively in the CRM, eliminating a separate integration.
  • Intuitive interface and fast onboarding for individual reps, per G2 and Capterra reviews.
  • Workflow automation triggers across contacts, deals, and tickets with a visual builder.
  • API coverage for all standard objects including custom objects at Enterprise tier.

Weaknesses

  • Pricing model is contact-based at the marketing layer — importing all records as marketing contacts can multiply the monthly bill by 4×.
  • Feature tier cliffs are frequent surprises: sequences, calling, advanced reporting, and quoting are all gated, often requiring plan upgrades mid-implementation.
  • Mandatory onboarding fees at Professional ($1,500) and Enterprise ($3,500) are not prominently disclosed on the pricing page.
  • API rate limits are restrictive for bulk migration — burst limits of 100-200 req/10sec and search endpoint limits of 4 req/sec require careful job queuing.
  • Custom objects, additional pipelines, and advanced forecasting are Enterprise-only, making cost projections difficult for growing teams.

Complexity grading

How hard is this migration?

Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Dynamics 365 Marketing and HubSpot.

  • Object compatibility

    B

    1 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Dynamics 365 Marketing: Dataverse Web API enforces organization-level throttling; specific limits vary by workload and are not publicly documented at fixed thresholds.

  • Data volume sensitivity

    A

    Dynamics 365 Marketing exposes a bulk API — large-volume migrations stream efficiently.

Estimator

Estimate your Dynamics 365 Marketing to HubSpot migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Dynamics 365 Marketing to HubSpot data migrations

Answers to the questions buyers ask most during Dynamics 365 Marketing to HubSpot migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your Dynamics 365 Marketing to HubSpot migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Under 50,000 total records typically completes in 48–72 hours of clock time. Migrations exceeding 500,000 records or involving multiple custom Dataverse entities extend to 7–14 days. The longest phase is mapping Dynamics 365's lead/contact split and marketing list structure to HubSpot's contact model and lists — plan 3–5 days for the mapping review before migration begins. Delta-pickup adds 24–48 hours post-cutover.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Dynamics 365 Marketing.
Land in HubSpot, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day