all work
identity resolution, two scales

Identity resolution: unknown traffic to known revenue

Ad platforms, web analytics, call tracking, and the CRM each know a different sliver of the same person. Identity resolution is the warehouse layer that decides those slivers are one customer, deterministically where possible and probabilistically where necessary. It was built twice here: for a regional home-services contractor and for a global enterprise.

stack:bigquery · sql · idr and bridging
focus:identity resolution
scope:smb to global enterprise
49,041[ identities unified ]smb contractor
68.9%[ click-id capture on new leads ]smb contractor
1.8x[ identities resolved vs deterministic-only ]enterprise
98%[ of connected pipeline value ]enterprise · probabilistic
[ scale one: the contractor ]

49,041 people across five systems that shared no key

A regional home-services contractor ran six years of business across form software, call tracking, a CRM holding 9.6M raw contact rows and 15.5M raw deal rows, Google Ads, and GA4, with no shared key anywhere. Identity resolution unified 49,041 distinct identities by resolving on the signals a phone-first business actually produces: phone first, email second, and an email-to-phone bridge that links a web form to the call that closed the deal.

The CRM itself was the bigger problem. Whoever owned it had deleted prior attribution data, rebuilt lead-routing flows and sales pipelines into something convoluted, and made other management mistakes that destroyed the business's ability to see attribution on its own process. Ad-platform performance nosedived because the platforms had nothing reliable to learn from, sales suffered, and the business went into a real decline. Because the warehouse resolves identity from automatically captured signals instead of hand-entered CRM fields, none of that history could break it going forward.

The unglamorous finding was that ad-platform IDs, the signal most attribution vendors lead with, covered under 1% of identities when this was first built, because nothing on the site was capturing them. Resolving identity first made that gap visible, and closing it became a two-week engineering project with a before and after you can see from orbit.

Five systems, no shared key, one identity

Which system produces which key, and how much of resolution each key actually carries. Phone carries most of it because this is a phone-first business; the ad-platform IDs most attribution vendors lead with were hairlines until capture was wired. Keys overlap on the same person, so the shares sum past 100%.

form softwarecall trackingcrmgoogle adsga4phone95.6% of identitiesemail34.0% of identitiesemail + phone bridge33.8% of identitiesad + analytics idsunder 5% of identities49,041IDENTITIESSOURCE SYSTEMSRESOLUTION KEYSONE ROW EACHedge weight = share of identities the key resolves · keys overlap, so shares exceed 100%

From raw export rows to one row per real thing

Log scale, because the range spans five orders of magnitude. The raw tables are not 9.6M people: every CRM sync appended a full snapshot, so the export arrived pre-multiplied. Staging collapses that back to one row per record, and the resolved layer (gold) turns those into distinct identities and pipeline events. The second step is the identity work; the first is just undoing the export.

Which signals actually close the gap for this contractor

Share of identities carrying each signal. Phone is the workhorse key (red). Ad-platform and analytics IDs, the signals platforms bid on, barely registered until they were deliberately captured.

[ scale two: the enterprise ]

A six-figure lead pool against 200M rows of anonymous journeys

The same problem, at a much larger scale: roughly 3x the leads and 10x the rows. A global enterprise's raw stage spans roughly 200 million rows and hundreds of dimensions across web events, CRM objects, and campaign systems. Enterprise B2B buyers research anonymously for weeks, so deterministic-only matching leaves most of the story dark. Identity resolution here layered deterministic matching first, then progressively bolder probabilistic matches on timing, domains, and structured fields, each scored with a confidence the downstream models can weigh.

Percent of total matched touches by confidence band

Confidence scores across the 759 touches that needed a probabilistic match, inside a closed-won account sample. This is a confidence breakdown of that sample, not a site-wide match rate.

Every probabilistic match carries a score instead of a flat yes or no. Almost all of these touches landed at 0.99 confidence, with a small remainder scored lower, so downstream models can lean on nearly the whole set while still knowing exactly how much to trust each one.

Share of leads resolved per join method

Log scale, as a share of all resolved leads. Deterministic click-ID joins (gray) resolve the largest share. The probabilistic layers (red), timing proximity and structured-field matching, add smaller, carefully scored shares.

The inversion: who has the leads vs. who has the money

Deterministic matching wins on lead count; probabilistic matching carries 98% of the connected pipeline value.

54.1%[ of resolved leads ]deterministic joins

The matches every attribution vendor leads with. They win on count, and on count alone they look like the whole story.

98.3%[ of connected pipeline value ]probabilistic layer

The same layer accounts for only 45.9% of resolved leads. Volume and value point in opposite directions.