Office hours: Build your self-driving GTM engine·Oct 29, 9:00am PT, onlineRegister→
Cargo
  • PrimitivesData ModelsYour companies, contacts and deals, merged from every sourceContextWhat your team knows, as files every agent readsTerritoriesWho sells where, defined onceMailboxesMailboxes in your reps' names, warmed up and kept under limitsToolsThe actions your agents, plays and reps callAgentsAI that researches, decides and writes, reading your contextPlaysWorkflows that run on a trigger or a schedule, with retriesAppsInternal apps for your reps, hosted on Cargo
    Add-onsChrome ExtensionSell faster, right in your browserButtonTrigger AI agents inside your CRMFormTurn any tool into an embeddable formSlackTag Cargo in Slack. It does the GTM workGitHubPlan on every pull request, deploy on merge
    MoreProjectsDefine your entire GTM in codeCLIUse Cargo from your terminalMCPUse Cargo from Claude and ChatGPTDeveloper resourcesCargo API docs, OpenAPI spec, auth docs, webhooks, MCP serverAPI ReferenceExplore the Cargo APIDocumentationLearn how to use CargoIntegrationsConnected to your entire GTM stack
  • VeriffHow Veriff replaced MuleSoft with Cargo under NetSuite, Stripe and SalesforceAugmentHow Augment Code routes developer sign-ups to reps in under an hourWeights & BiasesHow Weights & Biases ships a new purchase signal in 2 days on CargoSee all
  • Pricing
  • Cookbooks
  • Blog
Sign in
Blog

How to Build Your Total Addressable Market

4 Nov11min read
MaxMax

We gave Sales Navigator, AI Ark and Exa the same brief: every B2B software company with 51 to 1,000 people, headquartered in the US, Canada, the UK or Europe.

Sales Navigator found 15,132. AI Ark found 5,277. Exa found 1,480.

Those are the counts after cleaning, and they still don’t agree. So which one is the market?

None of them. Together, the three found 16,446 companies. A fourth list, the TAM we had pulled from Crunchbase in January, told us the real market is at least 20,000.

Same brief, three answers
Sales Navigator15,132
AI Ark5,277
Exa1,480
All three, deduplicated16,446
Dashed track: the estimated market, at least 20,000 companies.

Given the same brief, B2B software companies with 51 to 1,000 people in the US, Canada, the UK and Europe, Sales Navigator found 15,132 companies, AI Ark 5,277 and Exa 1,480 after cleaning. Deduplicated, the three together found 16,446. The estimated market is at least 20,000 companies, so none of the three, and not even all three together, is the full TAM.

Your TAM (total addressable market) isn’t a number a data provider gives you. It’s a table you build: one row per company, pulled from several sources, cleaned with your own rules, and measured against what every source missed.

Here’s how we built ours in October, what each provider added, how to estimate the companies nobody found, and why the companies several providers agree on make better accounts.

Why do data providers return different numbers for the same ICP? #

Because each one answers a different question.

  • Sales Navigator lists every company that matches your filters.
  • AI Ark can search by filters too, but we used it for lookalikes: give it a set of companies and it finds others that look like them. We gave it our customers, plus keyword searches.
  • Exa searches by meaning. You describe the company in plain words (“AI agent platform headquartered in the United States, 50 to 1000 employees, selling to businesses”) and it returns companies whose websites match.
  • Crunchbase was our first TAM. In January, before this build, we pulled Seed to Series C software companies from Crunchbase. It never got the October brief, and that’s what makes it useful: a list built separately, a different way, that we can check the other three against.

So the same brief produced three different slices of the market. Then the data itself disagrees, for five reasons we hit over and over.

1. Industry labels are wrong in both directions

When we searched LinkedIn’s software, internet and security industries, about half of what came back was B2B software. The rest were IT consultancies, agencies, consumer apps, public bodies, media companies and pages too thin to tell.

It fails the other way too. Only 61% of the B2B software companies in our final TAM are filed under “Software Development” on LinkedIn. The other 39% are spread across 177 other industries. Here are two of them, as each source labels them.

One company, four labels
Gcore
LinkedInIT Services and IT Consulting
AI Arkit services and it consulting
CrunchbaseArtificial Intelligence (AI), Cloud Data Services, Content Delivery Network, IaaS, Software, Web Hosting
OursCloud software
Alloy
LinkedInFinancial Services
AI Arkfinancial services
CrunchbaseCompliance, FinTech, Fraud Detection, Identity Management, SaaS
OursFintech software

LinkedIn and AI Ark file Gcore under IT Services and IT Consulting, and Crunchbase tags it artificial intelligence, cloud data services, content delivery network, IaaS, software and web hosting. Classified from its own description, it is cloud software. LinkedIn and AI Ark file Alloy under Financial Services, and Crunchbase tags it compliance, fintech, fraud detection, identity management and SaaS. Classified from its own description, it is fintech software.

Use your own classification, not the provider’s. Write your categories once, ideally the same values as the industry field in your CRM, and classify every company from its own description into that list. We used eight: B2B SaaS, AI software, fintech software, cybersecurity, data infrastructure, cloud software, developer tools and adjacent B2B technology, with “not enough information” as an allowed answer. Your TAM, your CRM and your reports then use the same categories, and those categories match how you sell, not how LinkedIn or Apollo files companies.

2. Company size is self-declared or out of date

A company page that declared “1 to 10 employees” came back in a 51 to 200 search, because the size a page declares and the headcount LinkedIn filters on are two different numbers. And sizes age fast: some of the best-known AI companies had passed 1,300 people on LinkedIn while our January Crunchbase list still had them under 1,000.

3. Counts move

The same Sales Navigator search lost about 15% of its results in four days. A count is a snapshot, so count again right before you pull.

4. One company, several entities

Large companies have subsidiaries and country pages that look like separate companies, SAP Americas for instance. We removed 1,915 of them, mostly acquired subsidiaries, before they could reach a rep as new accounts.

5. Providers identify companies differently

Sales Navigator and AI Ark gave us LinkedIn pages. Exa gave us websites, not LinkedIn pages. Crunchbase gave us both, and some of its LinkedIn links were dead or pointed to the wrong company. Before you can compare sources, every row needs the same ID.

Whatever the source, about six in ten companies it returned didn’t survive cleaning. No source was clean.

How do you build one TAM from several data providers? #

Five steps.

  1. Write the brief once. Industry, size, geography, exclusions. Every source gets the same brief, translated into the way that source searches.
  2. Pull each source the way it works best, and save the query and the date with the results. Filters for Sales Navigator, lookalikes and keywords for AI Ark, plain-language descriptions for Exa.
  3. Give every company one ID. We used the LinkedIn company ID: websites redirect and company names collide, but a LinkedIn company page has one ID. Sources that only return a website get resolved to their LinkedIn page first.
  4. Run every company through the same enrichment and the same classification, whatever source it came from. We read headcount, growth and location from LinkedIn for every row, so a company found by Exa has exactly the same columns as one found by Sales Navigator.
  5. Remove noise with written rules, and keep the source on every row. Subsidiaries, services firms, existing customers. The source tags are what make the next three sections possible.

If one source and a clean list are enough for you, this guide covers it step by step.

What does each data provider add to a TAM? #

Here is the 51 to 1,000 band: the size range all three providers were asked about, with the January Crunchbase list as the fourth column. These numbers measure how we used each source, not the size of its database. “Best-fit tier” is the group of accounts our scoring ranks highest, the ones we put in front of a rep first.

Sales NavigatorAI ArkExaCrunchbase
How we used itFiltersLookalikes of our customers, plus keywordsPlain-language descriptions, by category and countryOur first TAM, pulled in January, Seed to Series C
Companies found15,1325,2771,4803,747
Found by no other source8,748858103711
New companies, added in this order15,132+1,176+138+711
Of those, in our best-fit tier2,160+170+21+70

The final TAM for this band holds 17,157 companies, 2,421 of them in our best-fit tier.

Sales Navigator alone holds 88% of it. If you stopped there, you’d think you were done.

But the 12% it missed holds 261 of those 2,421 best-fit accounts. About one in nine of the accounts we most want to win were invisible to the biggest source.

Read the table two ways, because you need both:

  • Found by no other source doesn’t depend on order. It’s what you’d lose if you dropped that source.
  • New companies, added in this order does depend on order. Put Exa first and it would add all 1,480. It’s the number for a waterfall decision, where you pull sources one after another: given what I already have, what does the next source bring?

How do you estimate the companies every provider missed? #

You can’t count what nobody found. You can estimate it, with the method ecologists use to count fish in a lake.

Catch 100 fish, tag them, let them go. The next day, catch 100 again. If 10 of them carry a tag, your first catch was about a tenth of the lake, so the lake holds about 1,000 fish.

For a TAM, the first catch is what your providers found. The second catch is a list built separately, a different way. For us, that was our January Crunchbase list, pulled months before the build.

Crunchbase had 3,747 companies in our scope. Sales Navigator had already found 2,730 of them, 73%. If Sales Navigator finds 73% of the companies on a list it never saw, it likely finds about 73% of the whole market. It found 15,132, so the market is about 15,132 ÷ 0.73, roughly 20,800 companies.

Two lists, one overlap, one estimate
Sales Navigator found15,132
Our January Crunchbase list held3,747
2,730 of them already found by Sales Navigator: 73%
15,132 × 3,747 ÷ 2,730≈ 20,800 companies

Sales Navigator found 15,132 companies. Our January Crunchbase list, built separately, held 3,747 companies in the same scope, and 2,730 of them (73%) were already in Sales Navigator’s results. Capture-recapture: 15,132 × 3,747 ÷ 2,730 gives an estimated market of about 20,800 companies.

That’s the whole method, known as capture-recapture:

Market size ≈ (companies on list A × companies on list B) ÷ companies on both lists

Run with the three providers combined against Crunchbase instead, it gives about 20,300, close to the first estimate.

Two caveats. The lists must be built independently, or the overlap is inflated. And both lists favour companies that are easy to see. Our Crunchbase list only holds funded companies, which are probably easier for Sales Navigator to find too, so the hidden ones are hidden from both: read the result as a floor. We plan on 21,000 to 24,000 companies, which puts our 17,157 at 70% to 85% of the market.

What our TAM holds, and what it doesn't
Found by Sales Navigator15,132
Added by AI Ark, Exa and Crunchbase+2,025
Found by nobody (estimate)about 4,000 to 7,000

In the 51 to 1,000 band, Sales Navigator found 15,132 companies, and AI Ark, Exa and the January Crunchbase list added 2,025 more, for a TAM of 17,157. Against an estimated market of 21,000 to 24,000 companies, about 4,000 to 7,000 were found by no source.

Why it’s worth five minutes:

  • You know your coverage, not just your count. “17,000 companies” says nothing about what’s left. “About 80% of our market” does.
  • You know when to stop buying data. At 70% coverage, another source is worth testing. At 95%, it probably isn’t.
  • You get a market size you can defend, built from your own definition and your own data.

What did every provider miss?

We looked at 60 companies that were in Crunchbase but that none of the three providers had found.

  • 20 weren’t misses: they had grown past 1,000 people since January.
  • 20 sat under LinkedIn industries we never searched, like Real Estate, E-Learning or Climate Data, and about 6 of those were real B2B software companies.
  • Most of the rest were identity problems: dead or wrong LinkedIn links, or no company page we could match.

The gaps in a TAM aren’t random. They come from companies that changed size, labels you didn’t think to search and links that broke, and each one tells you what to fix in the next build.

Are companies found by several data providers better accounts? #

In our data, yes, by a wide margin. The overlap most teams delete as duplicates is a fit signal, and it’s free.

Best-fit share, by how many sources found the company
11 source22 sources33 sources44 sources51 to 200 people5%11%19%26%201 to 500 people20%37%55%73%501 to 1,000 people29%47%73%78%

Share of companies in our best-fit tier, by how many of the four sources found them. 51 to 200 people: 5% with one source, 11% with two, 19% with three, 26% with four. 201 to 500 people: 20%, 37%, 55% and 73%. 501 to 1,000 people: 29%, 47%, 73% and 78%. The share rises with every additional source in every size band; the four-source groups hold 18 to 80 companies each.

It rises in every size band, so it isn’t only that bigger companies show up in more databases. The four-source groups are small (18 to 80 companies), so read them as a direction, not as precise rates.

It’s a correlation, not a cause. Companies that several databases know about tend to be more established and better funded, and our scoring reads funding. Our AI Ark searches also started from our customers.

So keep a source count on every row. It costs nothing, it breaks ties between two accounts with the same score, and it’s a check on your scoring: if your best-fit tier is full of companies only one source has ever heard of, look twice.

How do you keep a TAM accurate after you build it? #

A TAM starts going stale the day you finish it. Counts move week to week, companies cross your size limits within months, and some get acquired.

What keeps ours accurate:

  • Every query lives in a file, with the date it last ran. Rebuilding is a rerun, not a project.
  • Every row keeps its source and its date, so you can see which source is drifting.
  • Reps can add the companies the build missed, in a separate table so the next rebuild doesn’t overwrite them. We read that table before every rebuild: it’s the most honest list of what our queries can’t see.
  • The coverage estimate runs again after each refresh. If coverage drops, a source changed or the market did.

How do we build and run our TAM on Cargo? #

Our coding agent drove the whole build through Cargo’s CLI. Every provider is a Cargo connector, the searches, enrichment and classification ran on Cargo, and the result is one table that our account scoring and the app our reps work from both read. When a rep adds a company the build missed, it lands next to the rest, and the next rebuild starts from there.

See how Cargo can build and run your TAM.

Prefer to build it yourself? Start with the build-tam-list skill, and use extract-sales-navigator-search when a Sales Navigator search returns more than 1,000 companies.

FAQ #

It depends on the job, and no single source was complete in our test. For B2B software companies with 51 to 1,000 people in the US, Canada, the UK and Europe, Sales Navigator found 88% of the final list, more than any other source. The companies it missed still included about one in nine of our best-fit accounts, found by AI Ark (lookalikes), Exa (search by description) and our earlier Crunchbase list.

Enough that the next one adds little. Pull sources one after another, count the new companies each one adds, and estimate your coverage with capture-recapture. In our build, three providers plus our January Crunchbase list reached an estimated 70% to 85% of the market, and the fourth source still added 711 companies nobody else had.

Use capture-recapture. Take two company lists built independently, count the companies that appear on both, and compute (list A × list B) ÷ overlap. If one list contains 73% of the other’s companies, it probably contains about 73% of the market. Treat the result as a floor, because both lists tend to miss the same hard-to-see companies.

In our build, yes, as a correlation. Among companies with 201 to 500 people, 20% of those found by one source were in our best-fit tier, against 73% of those found by all four, and the share rose with each additional source in every size band. Companies that several databases know about tend to be more established and better funded, so use the source count as a tiebreaker and a check on your scoring, not as a score on its own.

The LinkedIn company ID. Websites redirect and company names collide, but each LinkedIn company page has one numeric ID. Resolve sources that only return a website to their LinkedIn page first, merge on the ID, and keep each source’s tag on the row so you can measure overlap later.

Use it to search, not to classify. In our TAM, 39% of the B2B software companies sat under a LinkedIn industry other than Software Development, across 177 industries. Classify each company from its own description into categories you define, ideally the same values as your CRM’s industry field, and allow “not enough information” as an answer.

Often enough that drift doesn’t pile up. In our build, one Sales Navigator count moved by about 15% in four days, and a third of the missed companies we checked had outgrown the size range within nine months. Keep the queries in a file, recount right before each pull, and rerun the coverage estimate after every refresh.

~/run-it-on-cargo/

Build this workflow instead of reading about it.

Cargo is the GTM infrastructure your coding agent builds on: enrichment, scoring, routing and outreach, defined in code and run in production.

Start building
MaxMaxNov 4, 2026
On this page
  • Why do data providers return different numbers for the same ICP?
  • How do you build one TAM from several data providers?
  • What does each data provider add to a TAM?
  • How do you estimate the companies every provider missed?
  • Are companies found by several data providers better accounts?
  • How do you keep a TAM accurate after you build it?
  • How do we build and run our TAM on Cargo?
  • FAQ

Stay Informed with our
weekly Newsletter

Related articlesSee all articles
Data & Infrastructure
Sync Enriched Records to Pipedrive with Cargo: Create, Update or Upsert

Cargo's Pipedrive connector creates, updates and upserts organizations, persons, deals and leads natively. How it matches on the one field you choose, how to make it fail instead of overwriting when several records match, and the cargo-ai commands to run the sync.

AurelienAurelien·Oct 23, 2026
Data & Infrastructure
Sync Enriched Accounts to HubSpot with Cargo: Create, Update or Upsert

Cargo's HubSpot connector creates, updates and upserts company records natively. How to match by record ID, then domain, then name, fail on ambiguous matches instead of overwriting duplicates, and run the sync from the cargo-ai CLI.

AurelienAurelien·Oct 22, 2026
Data & Infrastructure
Sync Enriched Records to Salesforce with Cargo: Create, Update or Upsert

Cargo's Salesforce connector creates, updates and upserts records natively. How to match accounts by record Id, then website, then name, fail on ambiguous matches instead of overwriting duplicates, and run the sync from the cargo-ai CLI.

AurelienAurelien·Oct 22, 2026

Build the self-driving GTM engine

Your coding agents build it on Cargo.Or our team builds, operates and improves it with you.

Start building
Cargo
Backed byY CombinatorSOC 2 Type IICertified
LinkedinX

Product

Data ModelsContextTerritoriesMailboxesToolsAI AgentsPlaysAppsIntegrationsPricing

Add-ons

Chrome extensionButtonFormSlackGitHub

Build

DocsDeveloper resourcesCargo API docsCargo OpenAPI specCargo auth docsCargo webhooksCargo MCP serverProjectsClaude CodeCodexCursorAll coding agents

Resources

ReportsBlogCustomer storiesCookbooksEnrichmentRoutingSignalsScoringCRM hygieneAd audiencesGTM skillsGTM EngineeringGlossaryCompareCargo x ClayCargo x WorkatoCargo x n8nCargo x DeeplineCargo x DefaultCargo x LeanDataCargo x UnifyCargo x ValleyCargo x Gojiberry

Company

ManifestoCommunityEventsJobsPartners DirectoryPartner Program

Legal

SecurityTerms of servicePrivacy PolicyRefundsDPASupport
© 2026 Cargo
 ////////    ///////    ////////     ////////    ///////
///         ///   ///   ///   ///   ///         ///   ///
///         ///   ///   ///   ///   ///         ///   ///
///         /////////   ////////    ///  ////   ///   ///
///         ///   ///   /// ///     ///   ///   ///   ///
///         ///   ///   ///  ///    ///   ///   ///   ///
 ////////   ///   ///   ///   ///    ///////     ///////

$ npm install -g @cargo-ai/cli