French Company Prospector avatar

French Company Prospector

Pricing

from $2.30 / 1,000 results

Go to Apify Store
French Company Prospector

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

SilentFlow

Maintained by Community

Actor 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

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 dirigeantAgeMin to 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 matchedDirigeants list 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

TeamWhat they build
M&A and acquisition scoutsLists of companies in a sector whose director is past a chosen age, a starting point for succession and buyout conversations
Business brokersSector-and-region maps of owner-run companies approaching a likely handover window
B2B sales and lead-genTargeted prospect lists by industry and department, with the decision-maker's age as extra context before outreach
RecruitersCompany populations by sector, size, and location to plan sourcing campaigns
Market analystsSector snapshots by employee range, region, and creation date to track how an industry is structured
Franchise and expansion teamsCompany density and size by department before opening a new location
Investors and due diligenceQuick checks on a company's status, size, and latest filed revenue and net income before deeper diligence

📥 Input parameters

ParameterTypeDescription
activityCodesarrayOne or more NAF/APE industry codes, e.g. 62.01Z (computer programming), 70.22Z (business consulting)
dirigeantAgeMinintegerOnly companies with at least one director this age or older
dirigeantAgeMaxintegerOnly companies with at least one director this age or younger
departmentsarrayFrench department codes, e.g. 75, 69, 13, matched on the head office
postalCodesarrayExact postal codes, e.g. 75001, 69002, matched on the head office
activeOnlybooleanExclude ceased or struck-off companies. Default true
employeeRangesarrayFilter by employee headcount range, from 0 up to 10000+
createdAfterstringOnly companies created on or after this date (YYYY-MM-DD)
createdBeforestringOnly companies created on or before this date (YYYY-MM-DD)
searchTermsstringOptional company name or keyword, combinable with the filters above
maxResultsintegerMaximum 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[].

GroupFields
Identitysiren, siret, tvaNumber, companyName, tradeName, legalFormCode
ActivityactivityCode, section
Head office (siège)address, postalCode, city, department, region, latitude, longitude
Size and statusemployeeRange, category, isActive, creationDate, closureDate
Financialsrevenue, netIncome, fiscalYear
Directorsdirigeants[] (name, role, birthYear, age, type), matchedDirigeants[] (same 5 fields, only the directors inside your age filter)
Links and metaannuaireUrl, 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 ApifyClient
client = 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 csv
from apify_client import ApifyClient
client = 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 activityCodes with departments or postalCodes for a focused list instead of one broad industry-only filter that returns everything in France.
  • Set dirigeantAgeMin alone, 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 postalCodes when you need a tighter area than a whole department.
  • Set activeOnly to false if you are studying closures or market exits rather than active prospects.
  • Start with a smaller maxResults to 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.