Marketing Sales and Service Blog | Bluleadz Inbound Agency

A Step-by-Step Guide to Prep Your Data for a Successful HubSpot Import

Written by Bluleadz | 9/24/25 2:15 PM

If you’re a mid-market SaaS sales leader staring down a HubSpot migration, you’re not “doing a little housekeeping.” You’re performing open-heart surgery on your revenue engine while the patient (your pipeline) keeps running. This guide is your surgical checklist.

What we’re doing: preparing your customer, account, deal, ticket, and product data so it imports into HubSpot correctly the first time. That means choosing the right data model, locking unique IDs, standardizing fields, and testing before you go big. No mystery. No heroics. Just a repeatable, low drama process.

By the end of this guide, you’ll have a clear, step-by-step plan to get your data import-ready and your team future-proofed. Fewer fires. More wins. And yes, your forecast will finally match reality.

What you’ll get in the next 10 steps:

  • A practical data model for SaaS (companies, contacts, deals, tickets, line items, subscriptions, custom objects)

  • The unique IDs that prevent duplicates (and future headaches)

  • The exact formats and picklists HubSpot expects

  • A no-nonsense dedupe, clean-up, and consent checklist

  • A safe test-then-scale import sequence that won’t torch your quarter

1) Decide your data model (don’t wing this)

Objects: Contacts, Companies, Deals, Tickets, Products/Line Items, Subscriptions (if applicable), and Custom Objects.

What to decide:

  • Contacts ↔ Companies: Will you associate by company domain or manual mapping? For SaaS, domain-based association is standard unless you sell to multi-brand conglomerates.
  • Deals: Separate pipelines for New Business vs. Expansion? If you sell land-and-expand, yes.
  • Tickets: If Sales → CS handoff matters for NRR, keep ticket associations to companies and deals tight.
  • Products/Line Items: If you quote or forecast by SKU or plan tier, set them up now—not after the import.
  • Custom Objects: For subscriptions, environments, tenants, or contracts you want to report on, model them explicitly.

Decision test: Can a rep answer “Who’s the buyer, what’s the account, what’s the next step, and what’s the dollar value?” in one page? If not, simplify.

2) Define unique IDs (or enjoy a lifetime of duplicates)

  • Contacts: Email (primary). If you have shared inboxes or personal+work emails, pick one canonical email and keep the other as alternate in a custom field.
  • Companies: Company Domain Name. For companies without domains (rare in SaaS), use a stable external ID.
  • Everything else: Create an External ID field (string) you control—mirrors your legacy system’s record ID. Never import at scale without this lifeline.

Pro tip: Preserve original IDs from your source systems. When (not if) you backfill or re-sync, you’ll thank Past You.

3) Map required fields (the non-negotiables)

At minimum, decide and normalize:

  • Ownership: Owner (user email or HubSpot ID)
  • Contact Journey: Lifecycle Stage, Lead Status
  • Deals: Pipeline, Stage, Close Date, Amount, Deal Owner
  • Tickets: Ticket Status, Pipeline, Priority
  • Attribution/Source: Original source, latest source (if you have it—don’t fake it)
  • Timestamps: Create Date, Last Activity Date (where truthy)

If you can’t populate these truthfully, pause the import. Bad required fields break routing and dashboards.

4) Normalize formats (machines are picky, humans are messy)

  • Dates: YYYY-MM-DD (or ISO 8601 where supported).
  • Phone: +<CountryCode><Number> (no spaces if you can help it).
  • Country/State: ISO codes (e.g., US, CA; states like US-CA).
  • Currency: ISO code (USD, EUR) and numeric values with decimals, no symbols.
  • Emails/Domains: lowercase.
  • Names/Companies: Title case; keep acronyms uppercase (SaaS, API).

5) Standardize picklists to HubSpot’s exact values

Your “Prospect / MQL / SAL / SQL” must match HubSpot picklist options exactly—spelling, case, spacing.

  • Typical lists to align: Lead Status, Lifecycle Stage, Industry, Reason Lost, Ticket Status, Deal Stage.
  • Method: Build a mapping table (old → new) and transform before import. Don’t count on “we’ll fix it later”—that’s how you end up with Closed-Lost, Closed Lost, and Closed—Lost (yes, all three).

6) Deduplicate & merge (the unsexy work that saves your forecast)

  • Contacts: dedupe on email; if missing, combine first+last+company.
  • Companies: dedupe on domain; if missing, use name + country.
  • Merge rules: keep the oldest create date, the latest last activity, and non-blank winners for each field.
  • Associations: when merging, union associated deals and tickets. Don’t orphan revenue.

7) Clean text (so your automations don’t choke)

  • Trim leading/trailing spaces.
  • Fix casing (names, company names, job titles).
  • Remove emojis and control characters (sorry, Sales Slack culture).
  • Normalize NULLs: pick one—(blank) or NULL—and stick with it.
  • Strip tracking cruft from URLs and utm fields where possible.

8) Consent & opt-in (legal now > legal later)

  • Legal basis: store consent status and capture date/time where possible.
  • Subscription types: map to HubSpot’s exact subscription names (e.g., “Product Updates”, “Marketing Information”).
  • Do not import anyone as opted-in if you can’t support it. Fines are more expensive than MQLs.

9) Test in a sandbox or small batch (100 records per object)

  • Sample size: 100 per object is enough to hit edge cases.
  • Validate post-import: field values, associations, owner assignment, automations, and views.
  • Check lists & workflows: do they enroll correctly? Are webhooks firing?
  • Fix, rinse, repeat: adjust transforms and try again. When the sample is clean, then and only then do the bulk run.

10) Document & back up (future-you needs breadcrumbs)

  • Export before/after samples.
  • Store the data dictionary: field name, type, allowed values, source system, transformation rules.
  • Save your mapping tables and dedupe rules.

Pro Tip: Keep a run book with the import sequence (companies → contacts → deals → associations → tickets → line items, etc.).

Import Sequence That Actually Works (SaaS edition)

  1. Companies (domains ready)
  2. Contacts (associate to companies by domain)
  3. Pipelines (confirm stages exist)
  4. Deals (with pipeline/stage/owner; then associate to companies & contacts)
  5. Products & Line Items (attach to deals)
  6. Tickets (associate to companies/contacts/deals as needed)
  7. Custom Objects (subscriptions/tenants/contracts) + associations
  8. Lists/Workflows enablement (after data settles)

Red Flags (pause the import if you see these)

  • More than 5% of contacts without emails or companies without domains.
  • Picklist mismatch rate > 2%.
  • Owner mapping that relies on names instead of emails/IDs.
  • No external IDs for non-contact/company objects.
  • “We’ll clean it later.” (You won’t. Block the calendar now or pay twice later.)

Wrap-Up & Next Steps

Clean data isn’t “nice to have” during a migration it’s the difference between a quarter that hums and a quarter that stalls. If you’ve locked your data model, IDs, formats, pick lists, and run a small-batch test, you’re 90% of the way to a painless import. The last 10% is discipline: document everything, back it up, and only scale once the sandbox looks boring (because boring = reliable).