Train a lead score on the companies you never contacted

A propensity model learns from contrast. If your training set only contains companies already in your CRM, the model learns which accounts your reps happened to work, not which companies are likely to buy.


01 — The problem

Where this breaks down today

Lead scoring built purely on CRM history has a structural flaw that is easy to miss and hard to undo. The training data consists entirely of companies someone already decided were worth entering, so the model inherits every past targeting decision — including the biases nobody meant to encode. It gets good at ranking the accounts you were always going to work, and says nothing useful about the market you have not touched.

Fixing it requires the population, not the pipeline. Canonical delivers the full company universe into your warehouse, so a model can be trained against companies that never entered your CRM at all, and then scored across the whole market rather than just the portion your reps have already found.

Two problems compound. First, there is no honest negative class: unconverted CRM accounts are not the same thing as companies that were never targeted, so the model cannot learn what separates a real prospect from an average company. Second, even a well-trained model has nothing to score — inference needs firmographics for every company in the market, and collecting that through per-record enrichment costs a metered call per candidate, which makes scoring the long tail uneconomical exactly where the untapped opportunity is.


02 — Why bulk delivery

Why an API per record is the wrong shape

Supervised learning needs both classes, and the negative class is the entire market minus your customers — a set no query returns, because you would have to know in advance what to ask for. Feature engineering compounds the need: bands, ratios, cohort comparisons, and peer-relative features are all computed against the population, not a single row. And inference is a full-table operation, run again every time the model is retrained. Per-call pricing turns that into a bill that scales with your ambition.


03 — How it works

How Canonical solves it

Canonical delivers the complete company dataset to Snowflake, BigQuery, or S3 with the attributes these models actually use: industry and business model, headquarters, headcount, founding year, and funding history. Label your customers by joining on domain and the rest of the population becomes a genuine negative class. Engineer features against the full distribution, train, then score every company in the market in one pass rather than paying per candidate. Because coverage reaches into the long tail, the model can surface small and non-US companies your CRM has never seen — the accounts a history-trained score is structurally blind to.

  1. Bring your labels, we bring the population

    Your closed-won and closed-lost accounts are the labels. Tell us which firmographic attributes you want as features and we scope the delivery to them, with a sample dataset to validate the join first.

  2. Train against real contrast

    Join labels to the delivered population on domain, treat the unlabeled remainder as the negative class, and engineer features against the full distribution rather than against your pipeline.

  3. Score the whole market, then re-score

    Inference runs over the local dataset, so scoring every company costs compute rather than calls. Each new delivery is a full snapshot — re-score on the cadence you choose and feed the ranked list straight into routing.


04 — What's delivered

The attributes this use case relies on

Attribute groups, not an exact schema — the delivery schema is finalized with you during onboarding. See everything a delivery contains.

  • company

    Canonical name, domain, founding year, and description.

  • headquarters

    City, region, and country of the primary HQ.

  • firmographics

    Industry, business model, and offering attributes.

  • employee_count

    Latest estimated headcount.

  • funding

    Total raised, round count, and the latest round's series, date, amount, and lead investor.

  • investors

    Known investors across the company's funding rounds.


05 — FAQ

Frequently asked questions

Why can't I train a lead score on CRM data alone?

Because your CRM contains only companies someone already chose to enter, the model learns your historical targeting rather than what predicts a fit. Without companies that were never contacted, there is no honest negative class and no way to distinguish a genuine prospect from an average company.

How is this different from CRM enrichment?

Enrichment fills in fields on accounts you already have. Lead scoring needs the companies you do not have — the population you never contacted — both to train against and to score. Same delivery, different reason for wanting all of it.

Which attributes are useful as model features?

Industry and business model, headcount, headquarters, founding year, and funding history carry most of the signal in practice, often as bands and peer-relative ratios rather than raw values. Because you hold the population, you can test which ones matter for your business instead of assuming.

Can I score companies that are not in my CRM yet?

That is the point. Once a model is trained you score the entire delivered population, which produces a ranked list of companies you have never contacted — including the long-tail accounts a history-trained model cannot see.

How often should we re-score?

Most teams align it with the delivery cadence: weekly, monthly, or quarterly. Because every delivery is a complete snapshot, re-scoring is a re-run of the same pipeline rather than an incremental update to reconcile.


Start with a sample dataset.

Tell us what you're building and we'll scope the delivery around it, then send a sample so you can test the join before committing to anything.

Book a demo