Company identity
Usually comes from the account.
A practical framework for classifying data, mapping contracts and recurring licenses, and designing the HubSpot operating model before a single field gets migrated.
A Microsoft Dynamics to HubSpot migration is rarely blocked by the CSV import. It's blocked by contracts, licenses, recurring revenue and years of process history that don't map cleanly onto HubSpot's data model.
| Design decision | Recommended principle |
|---|---|
| Sequencing | Document the future HubSpot process before mapping a single Dynamics field. |
| Data depth | Classify data as operational, reporting, historical, or legal before deciding how to migrate it. |
| Contracts | Choose deliberately between deal, custom object, or external document — never by default. |
| Associations | Attach a stable legacy ID to every migrated object; never rely on names alone. |
| Validation | Prove the migration with real business cases, not matching record counts. |
Copying Dynamics objects first reproduces the old complexity. Documenting the future HubSpot process first gives the migration something real to map data into.
Dynamics environments frequently contain overlapping or manually maintained objects. Recurring-revenue information is rarely stored in one clean place — it's distributed across opportunities, contracts, orders and license records.
Usually comes from the account.
Lives on the opportunity — what was sold, when, to whom.
Comes from the contract object, not the deal.
Sits on the license record, often maintained by hand.
Frequently stays in SharePoint or as an attached PDF.
Which object wins when two sources disagree?
Not every piece of Dynamics data deserves the same migration effort. Classifying data first prevents both under-migrating what sales needs daily and over-migrating what nobody will ever query.
| Category | Typical contents |
|---|---|
| Operational | Active companies, contacts, open leads, open deals, active contracts, current licenses, next billing/renewal dates |
| Reporting | Close date, deal amount, ARR, product category, pipeline stage, source, owner, conversion dates |
| Historical reference | Old offers, legacy invoices, historical price changes, expired licenses, manually adjusted discounts |
| Legal / archive | Signed contracts, order confirmations, PDFs, SharePoint links, legal appendices |
Account to company, contact to contact, opportunity to deal: straightforward. Contracts and licenses need a deliberate decision, because HubSpot's own contract functionality is built around HubSpot-generated quotes and line items.
| Microsoft Dynamics | HubSpot |
|---|---|
| Account | Company |
| Contact | Contact |
| Lead | Lead |
| Opportunity | Deal |
| Product | Product library |
| Opportunity Product | Line item |
| Contract | Deal, custom object, or external document reference |
| License | Recurring line item or custom object |
| Activity | Activity, note, or external archive |
| Attachment | File attachment or SharePoint link |
Every imported object should retain its original Dynamics identifier. Names repeat, get misspelled, or shift slightly between exports — a stable ID doesn't.
None of the three options is universally correct. The right choice follows what the business actually needs from contract data — not the theoretical ideal.
Best for renewal management, billing reminders, operational ownership.
Limitation: represents the active contract, not necessarily the original historical sale.
Best for multiple contracts per deal, complex metadata, independent reporting.
Limitation: higher implementation effort and training.
Best when SharePoint stays the legal archive and full reconstruction has no payoff.
Limitation: no native contract reporting in HubSpot.
One active contract or renewal case becomes one HubSpot deal. Every recurring license component becomes one associated line item, prioritising current prices over full historical reconstruction.
A legacy contract can carry years of price increases, discounts and rounding adjustments. Rebuilding every period as its own line item is possible — it also produces hundreds of records nobody reports on.
Total contract value, ARR, invoice amount, recognized revenue, one-time revenue and current recurring value can each be calculated differently depending on billing frequency, term and line-item configuration.
HubSpot handles pipeline reporting, deal-based revenue, product analysis, forecasting and current recurring value well. Recognized-revenue reporting across financial periods usually needs help from outside the CRM.
| Requirement | Typical answer |
|---|---|
| Current recurring value, pipeline, forecast | Native HubSpot deal and line-item reporting |
| Recurring revenue properties at scale | Sales Hub Enterprise recurring revenue tooling |
| Custom recognition logic | Data Hub with custom code |
| Cross-period fiscal splits | Excel, Google Sheets, a BI platform, or ERP integration |
Associations, products and deals import in an order that avoids duplicates and orphaned records — not in whatever order the source files happen to export.
Representative scenarios reveal what a record count can't: one company with one license, a contract with multiple modules, an auto-renewal case, a fixed-term contract, a deal mixing recurring and one-time components.
Mandatory fields per pipeline stage, controlled product names, documented properties and clear ownership are what stop the old complexity from quietly returning.
Controlled product names and SKUs, one property catalogue.
Every object and custom property has a named owner.
Review imports before the legacy system is switched off.
Score each statement: 2 = complete, 1 = partly complete, 0 = not started. The result updates instantly.
A migration from Microsoft Dynamics to HubSpot should leave the business with a cleaner system than the one it replaces — not a faithful reproduction of every workaround the old CRM ever accumulated.
The future HubSpot operating model is designed before Dynamics data is mapped into it.
Operational, reporting, historical and legal data each get a different level of effort.
Ownership, naming and audits are what keep the new system from drifting back into the old one.