Skip to Content
CoursesTAM Sourcing04 Firmographic filters

Layer Firmographic Filters

Outcome: the account universe cut to addressable accounts, with each filter’s removal rate recorded and every disqualified row retained rather than deleted.

Surface
App and MCP server
Level
Intermediate
Uses
enrich_organization · formula columns
Credits
~0.5 per company for enrichment
Prerequisite
Lesson 03's sourced universe

Enrich once, filter many times

Take the full firmographic bundle in one enrich_organization call rather than as separate columns. Same data, one lookup, one charge — and every filter after it is a free formula.

That is the shape of this lesson: one paid step, then a series of free cuts.


Reliability, and what it means for filtering

FieldReliabilityHow to filter on it
CountryHighHard filter
Founded dateHighHard filter, with a rule for blanks
HeadcountGood, but a floorBand filter, never an exact threshold
IndustryMedium — heuristic classificationSoft: use to score, not to exclude
RevenueLow for private companiesScore input at best. Never a hard filter.
FundingHigh when present; absence is ambiguousPositive filter only

Two rules follow, and they matter more than any individual value:

  • Hard-filter only on reliable fields. Excluding on a modelled revenue estimate removes real accounts on the strength of a guess.
  • Absence is not a value. “No funding recorded” means unfunded or unreported, and treating it as “unfunded” quietly deletes bootstrapped companies that may be your best segment.

A hard filter on headcount thresholds is the most common quiet error here. Headcount is usually derived from professional-network presence, so it undercounts in markets and industries where that presence is thin — a filter of “over 50 employees” can remove a 200-person manufacturer entirely. Band, do not threshold.


Filter order

Cheapest and most decisive first.

Free exclusions first

Suppression list, competitors, partners, existing customers, unsupported regions. Costs nothing, and removes rows that should never have been in the universe.

Then geography

Usually the largest single cut, and the most reliable field you have.

Then size band

The second largest cut. Band, with a documented rule for missing values.

Then everything else

Founded date, funding, industry — as soft filters or score inputs rather than hard cuts.

Record the removal rate at each step. The sequence of numbers is your record of what the definition actually does, and it is what you check when the market size changes next quarter.


Missing values need an explicit rule

For every filter, decide what happens when the field is blank, and write it in the filter itself.

Field blankSensible defaultWhy
CountryKeep, flag for reviewOften a data gap, not a foreign company
HeadcountKeep, flagCommon in smaller and non-English markets
Founded dateKeepRarely load-bearing
IndustryKeepClassification gaps are frequent
DomainDropCannot be enriched or deduped — genuinely unusable

The pattern: keep and flag, do not silently drop. A blank field is a data problem, and dropping on it systematically removes exactly the segments where coverage is thinnest.


Keep the disqualified rows

Filtering is a status column, not a delete.

qualified = passes all hard filters disqualified_for = the first filter it failed

Three reasons this matters:

  • Re-qualification. A company that grows into your size band next quarter is already in the table, already enriched — it just crosses the line.
  • Diagnosis. When the addressable count drops, disqualified_for tells you which filter changed.
  • Cost. Re-sourcing a deleted company means paying for it again.

Do this now

Enrich the universe once

The full bundle, on every sourced row.

Apply the free exclusions

Suppression, customers, competitors. Record the removal rate.

Apply geography, then size band

Recording removal at each step.

Write the missing-value rule per filter

Into the filter itself, not into a note.

Build the status columns

qualified and disqualified_for.

Compare the survivor count to lesson 02’s addressable estimate

A large gap means an assumption was wrong. Find which filter.

Read 20 disqualified rows

If any obviously should have qualified, the filter is wrong, not the data.


Check your work

  • One enrichment call, many free filters
  • No hard filter runs on modelled revenue
  • Every filter has a written missing-value rule
  • Disqualified rows are retained with a reason
  • Survivor count is close to your addressable estimate

Where this breaks

Deleting disqualified rows makes every future run more expensive and destroys your ability to explain a change in market size. Six months later the addressable count has moved, nobody can say why, and re-creating the comparison means re-sourcing and re-enriching the whole universe. Filter with a status column. Never with a delete.


Further automation

The disqualified_for column becomes a monitoring surface: counts per reason, tracked run over run. A rising “too small” count means your sourcing drifted toward SMB; a rising “no domain” count means a data-quality problem at intake. Both are worth catching early.


Next lesson

05 — Tech-stack and traffic fit, the qualification layer that a directory filter cannot express.

Reference for this lesson: enrich_organization, Company, Company total employees, Company revenue.