All case studies
Case Study

Before Moving the CRM, I Counted It: 0.4% Had an Email

The plan assumed big newsletter lists. Counting the CRM through its API showed 0.4% of contacts had an email, so the migration plan changed.

Consumer health brand, Europe·October 13, 2026·5 min read
0.4%
of 'contacts' had an email address
73.1%
were anonymous tracking rows, not people
0 → 22
of 29 migration steps done in one push
914
order records checked with zero errors on another brand
Table of contentstap to expand

The plan was simple: move the large newsletter audiences from the old marketing tool to the new CRM. Before moving anything, I counted what was there.

The setup. Consumer health brands of a European pharmaceutical group, moving from an old marketing tool to a new CRM in September and October 2026. I worked through a digital agency, next to the group's CTO and the brands' marketing team. The plan assumed big newsletter audiences, and the migration was built around them.

How I counted

Form inventory
read from the live tool
Counts via the API
once access was open
Samples checked
the big segments, one by one
Report corrected
the same day
Estimates first, then counts, then a check of the counts. Each step replaced a guess.

Before API access existed, I read the form inventory straight from the live tool and gave the client an estimate. Once the API was open, I replaced every estimate with a count, and then sampled the biggest segments against the API to make sure the counts meant what I thought they meant.

The counts contradicted my own earlier estimate. I corrected the report the same day. A wrong number that stays in a report becomes the plan.

What the 'contacts' really were

Anonymous tracking rows: 73.1%
Named, no email: 26.4%
With an email: 0.4%
Measured through the old tool's own API: what its 'contacts' actually were.

In plain words:

  • 73.1% were not people. They were tracking rows: browsers the tool had seen, with no name and no way to reach anyone.
  • 26.4% were named, but had no email. The two large segments the plan was built around held no email addresses at all. They were a postal list, not a newsletter audience.
  • 0.4% had an email address. That was the real audience the migration had to carry.

That changed what the migration had to move, and what it could leave behind. With the plan rebuilt on counts, the migration went from 0 to 22 of its 29 checklist items in one push, with the forms finished.

Switching off the old tool without breaking sent emails

Turning off an old marketing tool sounds like one click. It is not, because every email it ever sent still carries links to its domain.

I measured the click tracker before writing any rule. The confirmation link in the 154 double opt-in emails already sent was not a plain address but a tracker path. A simple forwarding rule would have missed it, and anyone confirming a subscription from an old email would have hit an error.

Old marketing domain
Links in emails already sent
confirmation links and tracked clicks, tracker paths included
Other retired domains
kept out of these rules, which a default setting would have pulled in
The rules for the old domain after the switch-off: old links keep working, and nothing else gets pulled in by accident.

While writing the server rules I caught a default setting that would have routed every other retired domain through them too. I tested the whole setup in a local container and wrote one script that deploys, verifies and rolls back. The switch is now one deploy on the day, with the way back ready.

The same habit on another brand

Here the worry was the opposite: the client suspected a purchase had been lost on the way to the new CRM, and old orders were missing from it.

First I checked the claim against the shop. Every order since the shop started sending orders to the new CRM was there, with the right items and the right revenue. Nothing had been lost.

Then, before importing the old order history, I ran the whole import as a dry run over the entire shop, in batches, and checked the final status myself.

Orders compared
shop against the new CRM
Full dry run
customers, orders, refunds
914 records
zero errors, nothing lost
Measure, then run: nothing touched the live data until the dry run came back clean.

914 records came back with zero errors across customers, products, variants, orders and refunds. The dry run also showed exactly what a real run would fix and what it would not, so nobody would expect the import to repair something it never touches.

On the same brand, my inventory of the old tool found a contact form everyone thought was unused. 71 people had written through it. I describe that one in Five Tracking Failures Nobody Noticed.

Before you switch booking software, a CRM or an email tool

The same counting works for a clinic moving to a new booking system, or a law firm changing its intake tool:

  1. Ask for counts, not totals. How many records have a working email or phone, and how many agreed to hear from you.
  2. List everything that feeds the old tool. Forms on every page, and links in emails already sent: confirmations, reminders, tracked clicks.
  3. Dry run the import. Compare the counts on both sides before anything goes live.
  4. Keep a way back. A rollback you can run on the day, not a plan to rebuild later.

For a medical practice, plan from counts and keep patient details where they are: you do not need an export of the list to know how much of it you can reach.

Tags

case studycrm migrationdata qualityemail marketing

Frequently asked questions

How do I know how much of my contact list I can actually email?

Count the records that have an email address and a recorded opt-in. A dashboard total usually also includes anonymous tracking rows and people you only have a postal address for. Here the share with an email address was 0.4%.

What is a dry run for a CRM migration?

Running the full import in a mode that checks every record and reports what would happen, without writing anything. Here it checked 914 records with zero errors before anything touched the live data.

What breaks when I switch off an old email marketing tool?

Links in emails you already sent. Confirmation links and tracked clicks point at the old tool's domain, so that domain has to keep answering and forward those paths, or people who click an old email land on an error.

Want this loop closed on your account?

I connect your EHR, booking system, and calls to Google Ads so it counts patients who actually showed up. HIPAA-conscious, fixed price, verified in the account.

Free, 15 minutes

(I reply within 24 hours)Hire me on Upwork (escrow)

See patient conversion tracking

More case studies