Work sample 15 / 17Enquiry to booked job

HubSpot CRM migration: three contact sources cleaned into one import

How I set up HubSpot from an old CRM export, event sign-up sheets and website enquiries without importing duplicates and bad data.

Area
Enquiry to booked job
Tools
HubSpot · Excel
Typical scope
US$1,500–3,000
Timeline
About 4 weeks · 4 fixed milestones

Work sample: realistic data, built to show how I approach this kind of project. Not a past client job.

01The problem

Contacts usually arrive in HubSpot from several places at once: an old CRM, spreadsheets from events, website forms. The same person shows up three times with different spellings, phone formats and lifecycle stages, and junk rows ride along.

Importing as is creates duplicates that are hard to undo. The work is to agree field rules, clean and de-duplicate with a log of every change, and import into properties that are set up properly.

Owners usually notice it as

  1. Several lists with different columns for the same people
  2. Phone numbers in many formats, states spelled out or abbreviated
  3. Lifecycle stages that do not match HubSpot's values
  4. Test and junk rows mixed in with real contacts

02Scope

A fixed scope agreed in writing before anything is built. The table shows what a project like this usually covers and what it leaves out.

Exhibit 1Scope: what a project like this covers
AreaIncluded
Field rulesNames, phones (+61), states, postcodes, company names and lifecycle stages
De-duplicationThree match rules, with same-name people at different companies kept apart
Change logBefore and after value and the rule for every change
HubSpot set-upContact and company properties, lifecycle stages, import mapping, saved views
ImportA test import, then the full import with legacy IDs kept for tracing
Not includedEmail marketing content and paid HubSpot add-ons
Exhibit 2Typical data volumes for this kind of project (log scale)
Contact rows in14,870
Contacts after merge12,300
Field changes logged93,000
Merge groups2,400
Sources3

Typical volumes for a business of this size. The sample files are sized as described in section 05.

Exhibit 3Fixed milestones, each released when you sign off its deliverable
MilestoneDeliverableTimingShareWeeks 1–4
M1 AuditData profile, field rules and match rules agreedWeek 125%
M2 Clean and mergeClean file, change log, merge log, exceptionsWeek 235%
M3 HubSpot set-upProperties, stages, views, test importWeek 325%
M4 Import and handoverFull import, spot checks, SOPWeek 3–415%

Typical scope for this kind of project: US$1,500–3,000

About 4 weeks across 4 fixed milestones. The fixed quote follows a US$300 Systems Health Check, which confirms the volumes and the scope first. Your software subscriptions are billed to you by the vendors.

03What I fixed, and why

Exhibit 4How the work flows, from the first record to sign-off
φ = 1.61801OLD CRMexport02EVENTSsign-up sheets03WEBenquiries04RULESclean + match05LOGevery change06HUBSPOTimport6 STAGES · ONE PASS FROM FIRST RECORD TO SIGN-OFFi. agree the rules in writingii. log every changeiii. test before the full import01OLD CRMexport02EVENTSsign-up sheets03WEBenquiries04RULESclean + match05LOGevery change06HUBSPOTimport

Construction drawing. Each stage has its own check before the next one starts.

  1. 01

    Agree the rules in writing

    Before cleaning anything, the owner agrees what a clean phone, state, company name and lifecycle stage look like.

  2. 02

    Match carefully

    Same email first, then phone plus surname, then full name plus company. Anything uncertain is listed, not merged.

  3. 03

    Log every change

    A cell-by-cell change log means any value can be traced back to its source row.

  4. 04

    Set HubSpot up for the data

    Properties and lifecycle stages are created first so the import maps cleanly.

  5. 05

    Test before the full import

    A small test import is checked in HubSpot before the full file goes in.

04Checks

Nothing goes live on trust. These checks run before sign-off and stay in the files, so they can be re-run after every change.

  1. Rows reconcile: output + merged + removed junk = input
  2. No duplicate emails after cleaning
  3. Same-name people at different companies kept separate
  4. Every phone in +61 format
  5. Lifecycle stages are valid HubSpot values
Exhibit 5Controls in the sample files: 10 of 10 pass
CheckWhat it catchesStatus
Rows reconcile: output + duplicates merged + junk removed = inputListed on the Checks tabPASS
No duplicate emails in the importListed on the Checks tabPASS
Every contact has first + last nameListed on the Checks tabPASS
All emails contain one @Listed on the Checks tabPASS
All phone numbers start +61Listed on the Checks tabPASS
All states are standard abbreviationsListed on the Checks tabPASS
All postcodes are 4 charactersListed on the Checks tabPASS
All lifecycle stages valid HubSpot valuesListed on the Checks tabPASS
Company names end in 'Pty Ltd'Listed on the Checks tabPASS
Every merged record traced in Merge LogListed on the Checks tabPASS

Status read from the sample workbook. Each check is a formula, not a typed value.

05Handover

Everything is handed over in editable files you own, with the steps written down so your team is not dependent on me.

In this work sample

14,870 contact rows from 3 sources cleaned into 12,300 import-ready contacts, 2,400 merge groups and 93,682 logged changes, with 10 validation checks.

  1. HubSpot import file with headers matching HubSpot's default properties
  2. Change log and merge log
  3. Validation report workbook
  4. A re-runnable cleaning routine for the next export
  5. A short SOP for adding new lists without creating duplicates

06Files in this work sample

Screens from the sample files. Select one to open it full size.

Before and after: raw contact rows with mixed phone formats, casing and state names, and the merged clean contacts they became
Exhibit 6Before and after: raw contact rows with mixed phone formats, casing and state names, and the merged clean contacts they became

Cleanup-Validation-Report.xlsx › Before after

Validation report checks tab: row reconciliation and nine data quality checks, all passing
Exhibit 7Validation report checks tab: row reconciliation and nine data quality checks, all passing

Cleanup-Validation-Report.xlsx › Validation

Merge log tab showing which raw records were merged and by which match rule
Exhibit 8Merge log tab showing which raw records were merged and by which match rule

Cleanup-Validation-Report.xlsx › Merge log

FilesDownload the work sample
FileWhat it isSize
contacts_raw_combined.csvInput: three messy contact lists combined (before)2.4 MB
contacts_clean_import.csvOutput: clean, de-duplicated import file (after)2.2 MB
change_log.csvEvery field change with before, after and rule6.7 MB
Cleanup-Validation-Report.xlsxValidation report: summary, checks, merge log, exceptions, field mapping5.7 MB

Tell me what’s bugging you and I’ll tell you where I’d look first.

Send a short note on Upwork about what is slowing the business down. I’ll reply with where I’d start, and whether the US$300 Systems Health Check is the right first step.