French Companies SIRENE Scraper
Pricing
Pay per event
French Companies SIRENE Scraper
Search and enrich French companies from official SIRENE data. Export SIREN, SIRET, names, addresses, activity codes, and source URLs.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Search and enrich French companies from the public SIRENE / Annuaire des Entreprises API. Export clean company records with SIREN, SIRET, legal names, activity codes, addresses, establishment counts, and source URLs for B2B enrichment workflows.
What does French Companies SIRENE Scraper do?
French Companies SIRENE Scraper turns French public company registry search into a repeatable Apify dataset.
It queries recherche-entreprises.api.gouv.fr, the public Annuaire des Entreprises search API backed by official French company data, and flattens the response into spreadsheet-ready records.
Use it to collect French business leads, enrich CRM rows, validate SIREN/SIRET identifiers, or map companies by keyword and location.
Who is it for?
- π§βπΌ B2B sales teams building French prospect lists by activity or city
- π§Ύ Compliance teams checking vendor identifiers and legal names
- π§βπ» Data teams enriching CRM records with official registry fields
- π Market researchers mapping companies by French department or postal-code prefix
- π Analysts who need a lighter government-API alternative to Pappers page scraping
Why use this actor?
The actor is HTTP-only and uses a public JSON endpoint, so runs are fast, predictable, and inexpensive.
It also saves the API URL and public source URL for every row, which helps with audits and repeatable enrichment pipelines.
Data source
The source is the French public Annuaire des Entreprises search endpoint:
https://recherche-entreprises.api.gouv.fr/search
The actor does not log in, bypass paywalls, or scrape private account data.
Data you can extract
| Field group | Examples |
|---|---|
| Identifiers | SIREN, SIRET |
| Names | company name, full name, trade name |
| Legal/activity | legal category, activity code, activity label |
| Location | address, postal code, city, department, coordinates |
| Status | active company flag, active establishment flag, creation dates |
| Scale | establishment count, open establishment count, workforce range |
| People | directors when returned by the public API |
| Provenance | source URL, API URL, scrape timestamp |
How much does it cost to scrape French SIRENE companies?
This actor uses pay-per-event pricing: a small run start event plus a per-company dataset item event.
Formula-derived pricing from the realistic cloud run:
- Start event:
$0.005per run - Company item event, BRONZE tier:
$0.000030384per extracted company - Higher-volume tiers decrease down to
$0.00001per company at DIAMOND
The price was checked against Pappers/SIRENE competitor benchmarks and is below common company-enrichment pricing because the public API is lightweight.
Input options
Company search queries
Use queries for names, brands, activities, cities, or free-text searches such as:
restaurant parisboulangerie lyonpeugeot
Exact SIREN enrichment
Use sirens for 9-digit French company identifiers.
Example: 552100554
Exact SIRET enrichment
Use sirets for 14-digit French establishment identifiers.
The public API search endpoint accepts SIRET-like text searches and the actor stores the matching head-office SIRET returned by the source.
Location filters
Use departments for French department codes such as 75, 13, 69, or 971.
Use postalCodes for postal-code prefixes such as 750, 130, or 690.
Filters are applied to the returned establishment postal code so the output remains predictable even if the upstream API changes its optional filter parameters.
Example input: Paris restaurants
{"queries": ["restaurant paris"],"departments": ["75"],"maxItems": 50}
Example input: enrich exact companies
{"sirens": ["552100554"],"queries": ["airbus"],"maxItems": 25}
Example output item
{"query": "restaurant paris","queryType": "search","siren": "830998175","siret": "83099817500010","companyName": "SARL RESTAURANT LES PEUPLIERS","mainActivityCode": "56.10A","address": "CAMPING PLAGE LES PEUPLIERS 67470 SELTZ","postalCode": "67470","department": "67","source": "recherche-entreprises.api.gouv.fr","scrapedAt": "2026-06-26T00:00:00.000Z"}
How to run
- Open the actor on Apify.
- Add one or more
queries,sirens, orsirets. - Set
maxItemsto your desired dataset size. - Optionally add
departmentsorpostalCodes. - Start the run and download the dataset as JSON, CSV, Excel, or via API.
Tips for better results
- Use activity words plus a city for lead generation, for example
cabinet comptable lyon. - Use exact SIREN values for enrichment when you already have identifiers.
- Keep
maxItemssmall for testing, then scale up once the output shape matches your workflow. - Use department filters for regional campaigns.
Integrations
Common workflows:
- π§© CRM enrichment: upload SIREN values, export records, join by SIREN.
- π Market mapping: search an activity across departments and aggregate counts.
- π§Ύ Vendor checks: validate names, addresses, and legal identifiers before onboarding.
- π Scheduled monitoring: run a saved task weekly for a keyword and compare new SIRENs.
API usage with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/french-companies-sirene-scraper').call({queries: ['restaurant paris'],maxItems: 100,});console.log(run.defaultDatasetId);
API usage with Python
from apify_client import ApifyClientclient = ApifyClient('MY-APIFY-TOKEN')run = client.actor('automation-lab/french-companies-sirene-scraper').call(run_input={'queries': ['boulangerie lyon'],'maxItems': 100,})print(run['defaultDatasetId'])
API usage with cURL
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~french-companies-sirene-scraper/runs?token=MY-APIFY-TOKEN' \-H 'Content-Type: application/json' \-d '{"queries":["restaurant paris"],"maxItems":100}'
MCP: use from Claude Desktop or Claude Code
You can connect Apify actors to MCP clients through Apify MCP Server.
Use a URL scoped to this actor:
https://mcp.apify.com/?tools=automation-lab/french-companies-sirene-scraper
Claude Code setup:
$claude mcp add apify-french-sirene "https://mcp.apify.com/?tools=automation-lab/french-companies-sirene-scraper"
Claude Desktop JSON configuration:
{"mcpServers": {"apify-french-sirene": {"url": "https://mcp.apify.com/?tools=automation-lab/french-companies-sirene-scraper"}}}
Example prompts:
- βFind 50 French restaurants in Paris and return their SIREN numbers.β
- βEnrich this SIREN list with official company names and addresses.β
- βBuild a CSV of accounting firms in Lyon from the French company registry.β
Scheduling and monitoring
Create an Apify task with a fixed input and schedule it daily, weekly, or monthly.
For monitoring, keep the same search query and compare SIREN values between datasets.
Limits and reliability
The upstream API is public and may apply rate limits or temporary errors.
The actor retries 429 and 5xx responses with backoff.
If a broad query returns too many irrelevant records, narrow it with a city, activity phrase, department, or postal-code prefix.
Legality
This actor uses a public government API and outputs business registry information.
You are responsible for using the data in compliance with applicable laws, platform terms, GDPR, and your own business policies.
Avoid using public registry data for spam or unlawful profiling.
Troubleshooting
I got zero results
Check that at least one queries, sirens, or sirets value is present. Then try a broader term without location filters.
My department filter removed expected records
The actor derives departments from establishment postal codes. If the company head office is outside the target department, it may be filtered out even when the brand operates there.
The run was slower than expected
Reduce maxItems, use fewer broad queries, or provide exact SIREN values.
Related scrapers
These Automation Labs actors may fit adjacent workflows:
- https://apify.com/automation-lab/google-maps-lead-finder
- https://apify.com/automation-lab/website-contact-finder
- https://apify.com/automation-lab/linkedin-company-url-finder
FAQ
Does this actor scrape Pappers?
No. It targets the public French government company-search API to avoid Cloudflare-protected Pappers pages and provide stable official-source enrichment.
Can I search by SIREN?
Yes. Put 9-digit identifiers in sirens or include them as query text.
Can I export CSV?
Yes. Apify datasets can be downloaded as CSV, JSON, Excel, XML, RSS, or HTML.
Does it need proxies?
No proxy is required for the MVP because the source API returned public JSON without login or browser rendering.
Changelog
0.1.0Initial private build with keyword, SIREN, SIRET, department, postal-code, and max item controls.
Field reference
The dataset schema includes all emitted fields. Keep joins on stable identifiers: siren for companies and siret for establishments.
Support
If a run fails, open the Apify run log and copy the failing query, status code, and run ID when asking for help.
Implementation notes
The actor is implemented as an HTTP-only TypeScript actor using the Apify SDK and built-in Node.js fetch.
Quality checklist
The actor keeps defaults small for affordable first runs, but supports larger maxItems values for production enrichment.