French Company Prospector
Pricing
from $2.30 / 1,000 results
French Company Prospector
Discover French companies by activity code (NAF/APE) and, uniquely, by director age, using open government data. Get company name, SIREN, address, company size, revenue, creation date and directors with ages, ready for prospecting and outreach. No login or API key. Export to JSON, CSV or Excel.
Pricing
from $2.30 / 1,000 results
Rating
0.0
(0)
Developer
SilentFlow
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Filter French companies by their director's age, crossed with industry and location. Every company comes with its directors, computed ages, full head-office address, and financials, straight from the official French business registry.
How it works

✨ Why teams choose this over other company data tools
Need every company in one industry near one city, run by someone in a specific age bracket? Tired of company data tools that hand you a firmographic profile and nothing about who is actually in charge?
- 🎂 Filter by director age. No other company data actor on Apify lets you search French companies by the age of the person running them. Set
dirigeantAgeMinto 60 and get a list built for succession and acquisition conversations, not a generic firmographic dump. - 🏛️ Straight from the official registry. Every field traces back to France's own business registry, the same public data banks and administrations rely on, not a resold or scraped-together aggregator.
- 📍 Matched on the real head office. Department and postal code filters check the company's actual siège, so a search for Lyon does not return a company registered in Lyon with its real activity somewhere else.
- 💶 Financials on every company that filed them. Revenue, net income, and fiscal year come back whenever a company has filed them, so you can qualify a lead before you ever pick up the phone.
- 🧑🤝🧑 Every director, not just one name. Get the full director list with role and type, plus a separate
matchedDirigeantslist of only the ones inside your age filter, so you know exactly who triggered the match. - 🎯 Every filter stacks in one run. Industry, director age, location, size, and creation date combine together, so you get one focused list instead of five broad exports to cross-reference by hand.
- 🔓 No login, no API key. Point it at an industry code and a location and run it. Nothing to sign up for, nothing to authenticate.
🎯 What you can do with French company data
| Team | What they build |
|---|---|
| M&A and acquisition scouts | Lists of companies in a sector whose director is past a chosen age, a starting point for succession and buyout conversations |
| Business brokers | Sector-and-region maps of owner-run companies approaching a likely handover window |
| B2B sales and lead-gen | Targeted prospect lists by industry and department, with the decision-maker's age as extra context before outreach |
| Recruiters | Company populations by sector, size, and location to plan sourcing campaigns |
| Market analysts | Sector snapshots by employee range, region, and creation date to track how an industry is structured |
| Franchise and expansion teams | Company density and size by department before opening a new location |
| Investors and due diligence | Quick checks on a company's status, size, and latest filed revenue and net income before deeper diligence |
📥 Input parameters
| Parameter | Type | Description |
|---|---|---|
activityCodes | array | One or more NAF/APE industry codes, e.g. 62.01Z (computer programming), 70.22Z (business consulting) |
dirigeantAgeMin | integer | Only companies with at least one director this age or older |
dirigeantAgeMax | integer | Only companies with at least one director this age or younger |
departments | array | French department codes, e.g. 75, 69, 13, matched on the head office |
postalCodes | array | Exact postal codes, e.g. 75001, 69002, matched on the head office |
activeOnly | boolean | Exclude ceased or struck-off companies. Default true |
employeeRanges | array | Filter by employee headcount range, from 0 up to 10000+ |
createdAfter | string | Only companies created on or after this date (YYYY-MM-DD) |
createdBefore | string | Only companies created on or before this date (YYYY-MM-DD) |
searchTerms | string | Optional company name or keyword, combinable with the filters above |
maxResults | integer | Maximum number of companies to return, 1 to 10,000. Default 100 |
At least one of activityCodes, departments, postalCodes, or searchTerms is required, so every run stays scoped to an actual segment of companies instead of the entire registry.
📊 Output data
Company with a director-age match
{"siren": "443061841","siret": "44306184100015","tvaNumber": "FR64443061841","companyName": "DOCTOLIB","legalFormCode": "5710","activityCode": "62.01Z","section": "Information et communication","address": "54 Quai Charles Pasqua","postalCode": "92300","city": "Levallois-Perret","department": "92","region": "Ile-de-France","latitude": "48.8938","longitude": "2.2865","employeeRange": "1000-1999","category": "ETI","isActive": true,"creationDate": "2013-04-03","revenue": 245000000,"netIncome": -52000000,"fiscalYear": 2023,"dirigeants": [{ "name": "Stanislas Niox-Chateau", "role": "Président", "birthYear": 1985, "age": 41, "type": "personne physique" }],"matchedDirigeants": [{ "name": "Stanislas Niox-Chateau", "role": "Président", "birthYear": 1985, "age": 41, "type": "personne physique" }],"annuaireUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/443061841","pappersUrl": "https://www.pappers.fr/entreprise/443061841","source": "annuaire-entreprises-api-gouv","scrapedAt": "2026-07-01T10:00:00Z"}
Company found without a director-age filter
{"siren": "512345678","siret": "51234567800012","companyName": "TECHNOLOGIES DU RHONE","tradeName": "TECHLYON","legalFormCode": "5498","activityCode": "70.22Z","section": "Activités spécialisées, scientifiques et techniques","address": "12 Rue de la Republique","postalCode": "69002","city": "Lyon","department": "69","region": "Auvergne-Rhone-Alpes","latitude": "45.7597","longitude": "4.8422","employeeRange": "3-5","category": "PME","isActive": true,"creationDate": "2011-09-12","dirigeants": [{ "name": "HOLDING RHONE PARTICIPATIONS", "role": "Gérant", "type": "personne morale" }],"annuaireUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/512345678","pappersUrl": "https://www.pappers.fr/entreprise/512345678","source": "annuaire-entreprises-api-gouv","scrapedAt": "2026-07-01T10:00:03Z"}
No matchedDirigeants field means no director-age filter was applied on that run, or the matched company has no director whose type carries an age (a personne morale, like a holding company, cannot match an age filter). revenue, netIncome, and fiscalYear are only present when the company has filed accounts with the registry.
🗂️ Data fields
29 top-level fields per company, plus 5 fields on every director inside dirigeants[] and matchedDirigeants[].
| Group | Fields |
|---|---|
| Identity | siren, siret, tvaNumber, companyName, tradeName, legalFormCode |
| Activity | activityCode, section |
| Head office (siège) | address, postalCode, city, department, region, latitude, longitude |
| Size and status | employeeRange, category, isActive, creationDate, closureDate |
| Financials | revenue, netIncome, fiscalYear |
| Directors | dirigeants[] (name, role, birthYear, age, type), matchedDirigeants[] (same 5 fields, only the directors inside your age filter) |
| Links and meta | annuaireUrl, pappersUrl, source, scrapedAt |
siren is a stable, permanent company identifier that never changes for the life of the company. annuaireUrl and pappersUrl are both permanent links you can revisit anytime. age is computed at run time from the director's birth date or birth year, so it stays accurate wherever the run happens to fall in the year.
🚀 Examples
Find IT companies in Paris
{ "activityCodes": ["62.01Z"], "departments": ["75"], "maxResults": 200 }
Find consulting firms whose director is near retirement
{ "activityCodes": ["70.22Z"], "dirigeantAgeMin": 60, "maxResults": 500 }
Mid-size manufacturers in a specific area, active only
{ "activityCodes": ["25.62B"], "postalCodes": ["69002", "69003", "69006"], "employeeRanges": ["21", "22"], "activeOnly": true, "maxResults": 300 }
Newly created companies in a department
{ "departments": ["13"], "createdAfter": "2024-01-01", "maxResults": 1000 }
Niche keyword search combined with a director age band
{ "searchTerms": "menuiserie", "departments": ["44"], "dirigeantAgeMin": 55, "dirigeantAgeMax": 70, "maxResults": 150 }
💻 Integrations
Build a succession-target list in Python
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("silentflow/french-company-prospector").call(run_input={"activityCodes": ["43.22A"],"departments": ["44", "49", "85"],"dirigeantAgeMin": 60,"maxResults": 500,})targets = [{"company": c["companyName"], "city": c["city"], "director": d["name"], "age": d["age"]}for c in client.dataset(run["defaultDatasetId"]).iterate_items()for d in c.get("matchedDirigeants", [])]print(f"{len(targets)} succession targets found")
Build a lead list in JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<APIFY_TOKEN>' });const run = await client.actor('silentflow/french-company-prospector').call({activityCodes: ['70.22Z'],postalCodes: ['69002', '69003'],employeeRanges: ['12', '21'],maxResults: 200,});const { items } = await client.dataset(run.defaultDatasetId).listItems();const leads = items.map((c) => ({ name: c.companyName, city: c.city, revenue: c.revenue }));console.table(leads);
Export only the director-age matches to CSV
import csvfrom apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("silentflow/french-company-prospector").call(run_input={"activityCodes": ["62.01Z"],"departments": ["75", "92"],"dirigeantAgeMin": 58,"maxResults": 1000,})with open("acquisition_targets.csv", "w", newline="") as f:writer = csv.writer(f)writer.writerow(["companyName", "city", "director", "age", "revenue", "pappersUrl"])for c in client.dataset(run["defaultDatasetId"]).iterate_items():for d in c.get("matchedDirigeants", []):writer.writerow([c["companyName"], c["city"], d["name"], d["age"], c.get("revenue", ""), c.get("pappersUrl", "")])
📈 Performance
A run pages through the official registry until it reaches your maxResults limit, so cost and runtime scale with exactly how much data you ask for. A single industry code in one department can return anywhere from a handful to several thousand companies depending on how common the activity is, occasionally reaching the 10,000 cap on very broad searches. First results start appearing shortly after the run begins.
💡 Tips for best results
- Combine
activityCodeswithdepartmentsorpostalCodesfor a focused list instead of one broad industry-only filter that returns everything in France. - Set
dirigeantAgeMinalone, without a max, when you want "60 and older" rather than a narrow band. - Department and postal code filters match the head office (siège). Use
postalCodeswhen you need a tighter area than a whole department. - Set
activeOnlytofalseif you are studying closures or market exits rather than active prospects. - Start with a smaller
maxResultsto check the field shape and filter combination before scaling up to your full target list.
❓ FAQ
Where does the data come from? The official French business registry (Annuaire des Entreprises), the same public source used by government administrations and banks.
Do I need an account or API key for the source? No. The registry is free and public, and this actor needs no login or API key from you either.
How is director age calculated? From the director's birth date when the registry provides it, otherwise from the birth year alone. Age is computed at run time, so it is always accurate for the day you run the actor.
Can I search without a director-age filter?
Yes. dirigeantAgeMin and dirigeantAgeMax are both optional. Without them, you still get the full dirigeants list on every company, just no matchedDirigeants subset.
What happens if a company hasn't filed financial accounts?
revenue, netIncome, and fiscalYear are left out of that company's record. Every other field still comes back normally.
Does a department filter include companies operating there with a head office elsewhere? No. Department and postal code filters match the head office (siège) only, not branch or operational addresses.
How many companies can I get in one run?
Up to 10,000, set with maxResults. The default is 100 if you don't set it.
Is this data legal to use? Yes. The registry is a public, official French government dataset created for exactly this kind of lookup. You are responsible for how you use any personal data it contains, such as director names and ages, under applicable data protection law.
📬 Support
Maintained by SilentFlow. Have a filter or field this actor doesn't cover yet? Let us know and we will consider it for a future update.