Customer story · Data Quality & Enrichment

Deduplicating a ~250k-record CRM and rebuilding the market map with an enrichment engine

A cybersecurity vendor's CRM had accumulated roughly a quarter of a million records with heavy duplication and large firmographic gaps, which made tiering, routing, outbound and ABM unreliable. In a short fixed-scope project, LeanScale deduplicated companies and contacts with full rollback artifacts, defined an ICP tier matrix and enriched against it, handled contacts who had changed employer, and converted the one-off enrichment into a real-time inbound process.

ProofWhat happened on a real engagement.
CybersecuritySector
Growth-stageStage
Under 3 monthsDuration
5Min read

Anonymized. The company is described by sector and stage only — no customer is named, and quotes are attributed by role.

#The challenge

The CRM held roughly a quarter of a million records with no deduplication discipline and large firmographic holes — on the order of 125k contacts missing at least one core field, and around 85k companies with no associated persona contact at all. Without a clean, tiered account base, everything downstream was running on guesses: ABM targeting, outbound, lead routing, territory design and basic performance reporting. There was also no mechanism for handling contacts who had left the company they were recorded against, so a large share of the contact database was quietly stale.

#The approach

Picked a merge tool, then wrote the matching logic separately

Assessed the ~250k-record database and selected a dedicated deduplication tool to execute merges, but built the detection logic in an enrichment platform instead of relying on the vendor's defaults — so the matching rules were explicit, reviewable and reusable.

Layered contact-matching rules and surfaced the flag in the CRM

Contacts matched on same email; same name plus associated company ID; same name plus company name; and same name plus phone. A single match sets a duplicate flag on the contact record, driven by a workflow that pushes the contact out for matching, with a report tracking duplicate creation by month — so the rate of new duplicates is monitored, not just the existing backlog.

Merged companies on a descending ladder of confidence

Domain first, then name plus region plus phone, then name plus city plus region plus street, then name plus postal code plus region, with a name-only fallback last. Explicit handling for clusters of more than two duplicates, and separate merge logic for the case where only one duplicate had domain and address populated versus the case where none did.

Made every merge reversible before running any of them

Full-field backups of every record about to be merged, plus ID mappings for merged contacts and companies — so a bad merge could be reconstructed and any downstream system pointing at a retired ID could be re-pointed.

Defined the ICP as a matrix before spending a credit on enrichment

Separate tier matrices for end customers and for channel partners, each scored across geography, industry, headcount band, revenue band, the security tooling present in the target's stack, and the champion persona — with an explicit off-limits tier rather than an open-ended bottom. The definition was validated against live search results and refined before any bulk enrichment ran.

Enriched against the measured gaps, and reported the yield honestly

Company enrichment for headcount, location, industry, revenue and name; contact enrichment for title, first and last name, country and profile URL. Company recovery was strong — roughly 44k of ~60k missing industry values, ~26k of ~39k headcounts, ~19k of ~31k locations. Contact recovery was much weaker, and one contact enrichment was deliberately not run at all once the per-record credit cost was weighed against the expected return.

Tiered the whole database and made the tiers live in the CRM

A workflow sets the tier field; segments and reporting hold the population under two rule sets — one including industry, one on geography and headcount alone — so the effect of the industry filter on addressable volume was visible. The result was a top tier of a couple of hundred accounts, a second tier of a few hundred, a third of around 750, and a long tail in the thousands.

Treated job changes as a data problem with a real workflow

An agent checks a contact's name, email and company against the web to determine whether the person is still there. If not, the record is marked as a non-marketing contact, a new record is created at the new company, and association labels link the old record to the new one so the relationship history survives the move. Email validation ran alongside, with dedicated fields recording that validation had executed and whether the address was invalid — roughly 125k contacts assessed, close to a fifth of them carrying an invalid address.

Converted the one-off into a standing process

Repurposed the bulk enrichment as a real-time inbound flow: a segment of inbound form submissions triggers a workflow that sends the company and contact out for enrichment, which checks what the market map already holds and writes back only what is new — targeting a fully tiered, persona- and stack-tagged account within seconds of a submission. Documented in a recorded walkthrough, and honestly reported as in progress at project close, pending validation of the full inbound form list.

#Outcomes

~3.4k duplicate company records and ~2.4k duplicate contact records merged

Executed against explicit, layered matching rules, with full-field backups and ID mappings retained for every merge.

Company firmographics recovered at scale — contact firmographics much less so

Industry, headcount and location were filled for roughly two-thirds of the companies missing them — about 73%, 67% and 60% respectively. Contact-level title and identity fields recovered only a small fraction of their gaps. Both halves are LeanScale's own yield tables from the project close-out, which reported the weak side plainly rather than averaging it away.

A tiered account universe the CRM can act on

A tier field maintained by workflow, tier segments under two rule sets, and reporting on companies by tier — the foundation routing, territory design and ABM had been missing.

Job-change status and email validity became fields, not guesses

Roughly 125k contacts carry a validated employment and email status, with old and new records associated where a contact moved.

Enrichment moved from a project to an inbound process

New inbound companies and contacts are enriched on creation against the market map, with only net-new data written back. Left in progress at close, with the remaining steps documented.

Duplicate creation is now measured

A monthly duplicate-creation report means the next backlog is visible as it forms rather than discovered later.

Connected

In the knowledge graph

Every entity below has its own page, aggregating what we measured, what we recommend and what guests said.

Companies
Related

More on these topics