Building a TAM for a niche or local market

What to do when LinkedIn is not enough.

Roadside market below red hills

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.

Scooter passing a village 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.

Colorful wooden houses on stilts

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.