Building a TAM for a niche or local market
What to do when LinkedIn is not enough.

When LinkedIn is not enough, start from the place a business has to appear in order to exist: a company registry, a regulator’s file, a professional directory, a map. A baker in a mid-sized town has no reason to keep a LinkedIn page. The same baker is in the French company registry with an activity code, and on Google Maps with a phone number and reviews. Cross those two and you have a better list than any people search would give you.
Throughout this chapter, say you sell an ordering and stock tool to independent bakeries in the Auvergne-Rhône-Alpes region. All the volumes below are illustrative.
Pick the source your market cannot avoid
The general comparison is in the chapter on data sources. For niche and local markets, this is the order I look at.
| Market | Start from | Key | Watch out for |
|---|---|---|---|
| One clear activity (bakeries, garages, nurseries) | Company registry by activity code; in France, SIRENE by NAF code | SIREN, SIRET | The code reflects the main declared activity, so some real players sit under another one |
| Health and social care facilities | FINESS, the French facility register | FINESS number | Facility level, so you rebuild group ownership yourself |
| Public-sector buyers | Open datasets on data.gouv.fr | Official identifiers | Check the date of the last update |
| Regulated professions | The order or federation directory | Member number or name | Some directories forbid commercial reuse, read the terms |
| Industrial niches | Trade show exhibitor lists, federation member lists | Domain | Small and valuable, but incomplete |
| Businesses with footfall | Google Maps | Place ID | Chains, duplicates, wrong categories |
Outside France, the same logic applies with the national register, such as Companies House in the UK. Coverage and available fields vary by country, so test a few known companies before you commit to one.
Build the universe from the registry
For bakeries, the NAF code is 10.71C. There are two ways to get the population.
The free route is the French government’s company search API. It needs no key and returns JSON.
curl -s "https://recherche-entreprises.api.gouv.fr/search?activite_principale=10.71C&departement=69&etat_administratif=A&per_page=25&page=1"
Three things to know. Pages hold 25 results at most and a query can reach 10,000 results in total, so loop on page and split by département. A département filter returns companies with an establishment there, and the head office may be elsewhere, so read matching_etablissements for the local address. Each result also carries opposition_diffusion_commerciale: exclude every row where it is set to true.
The route with a tool: I co-founded Derrick, so take this with that in mind. Import Companies by NAF Code takes one or more codes in a column, optionally narrowed to one département, so twelve runs cover this region. You get one company per row with SIREN, SIRET, open establishments, headcount band, creation date, address and main director, for 1 credit per company. It saves you the loop and the JSON. It also gives you the registered address only, which is a poor fit for chains with many outlets. For those, the API or the map is the better source. The output has no column for the commercial-opposition flag either, so check the companies you keep against the API before you prospect them.
Filter the output on two fields. nombre_etablissements_ouverts separates the independents from the groups, and for this example anything above three establishments goes to a separate tab. Then keep the headcount band as information only, since a very small business often has none on file, and filtering on it would quietly delete part of your market.
Add the map to see who actually trades
The registry tells you who exists legally. The map tells you who is open, with what visible activity.
Derrick’s Google Maps Scraper, on paid plans, takes a search like “boulangerie Villeurbanne” and returns up to 200 places at 1 credit each, with name, category, phone, website, rating, review count, full address and place ID. The cap decides how you query: search by commune, and treat any search that returns exactly 200 as truncated, then split it by arrondissement or neighbouring area. The manual alternative is the official Google Places API, or a person copying listings for a small territory. In every case, check the terms of use of the source before you collect anything.
Maps is weak on one thing: the categories are loose, so a café that sells bread will show up. Filter on the primary category, then sample.
Match the two lists and read the gaps
A legal name like “SARL DUPONT ET FILS” rarely matches a shop sign like “Le Fournil du Centre”, so match on the location. Build the key in both tabs, registry first and map second.
=E2&"|"&IFERROR(REGEXEXTRACT(D2,"^\d+"),"0")
=IFERROR(REGEXEXTRACT(C2,"\b\d{5}\b"),"")&"|"&IFERROR(REGEXEXTRACT(C2,"^\d+"),"0")
That is postal code plus street number. Pull the map’s name next to the legal name and review the matches by eye, since a shopping centre puts several businesses at one number. The method for the rest is in the deduplication chapter. The gaps are the interesting part. On a pilot in the Rhône:
| Result | Accounts | What it usually means | What to do |
|---|---|---|---|
| In both | 720 | A registered business that trades | Core of the TAM |
| Registry only | 330 | Closed shop still registered, holding company, no listing, address mismatch | Call a sample of 30 before spending anything on them |
| Maps only | 260 | Chain outlet, different NAF code, name or address mismatch | Look up the company by name, add any missing NAF code to your query |
Maps-only rows are how you find the codes you missed. To resolve them, the same API accepts a q search by name, and Derrick’s SIRET/SIREN enrichment accepts a company name and returns the identity with a match confidence, at 1 credit per company. Low-confidence matches get reviewed by hand.
Find a person to talk to without LinkedIn
The contact path changes completely, and so does the first channel.
| Need | Where it comes from | Derrick option |
|---|---|---|
| Decision-maker’s name | Registry directors field | Included in the NAF import |
| Phone | Maps listing or the website | Included in the Maps import |
| Generic email and social profiles | The website’s contact page | Email & Social Extractor, 2 credits per row |
| Named professional email | Name plus company domain | Email Finder, weaker when the shop uses a free webmail |
| Postal address | Registry | Included in the NAF import |
Derrick’s Phone Finder targets B2B contacts at 200 credits per number found. You can skip it here, since the listing already shows the number that rings in the shop. For this kind of market, I would plan phone or post first, local trade associations next, and email as support.
A director’s name, or the details of a sole trader, are personal data even when they come from a public registry. A public source does not settle whether you may use it for prospecting. Read the CNIL’s guidance, keep your suppression list current as described in the upkeep chapter, and have counsel check your approach. This is not legal advice.
Rank territories and accounts with what you can observe
Local work has a travel or attention cost, so rank areas before accounts. On the Deux.io programmatic project, we selected cities by GDP per capita and treated those as priorities. Use whichever local variable predicts demand for your product, then score the accounts inside.
| Criterion | Source | Points |
|---|---|---|
| 1 to 3 open establishments | Registry | 3 |
| Review count above the area’s median | Maps | 2 |
| Priority commune | Your ranking | 2 |
| Website present | Maps | 1 |
| Created more than three years ago | Registry | 1 |
Review count stands in for footfall. It is a rough proxy and I would say so to the team, then adjust the weights once you see which accounts answer.
Your next step: run the whole chain on one département before you touch the region. Registry, map, match, then 30 phone calls on the registry-only rows. Those calls tell you whether the list is worth scaling.