Bulk SIRET and SIREN lookup from CSV or Excel
Fill French company fields in your CRM without looking up every account by hand. Start with the identifiers in your spreadsheet, look them up as a batch, then review the returned company data before importing it.
What this workflow uses
Atesen Software, the publisher of this guide, makes French Company Enrichment on Apify. In lookup mode, its optional csvText input accepts pasted CSV text, so you can keep the identifier headers instead of converting the CSV into a list. Identifier lists and JSON input remain available. It does not upload CSV or Excel files or fetch CSV URLs. Results can be downloaded as CSV, Excel or JSON. This guide covers existing identifiers, rather than discovering new companies.
The official API Recherche d’entreprises description distinguishes a company’s SIREN from an establishment’s SIRET. It also explains that the search API does not expose the complete Sirene database or non-diffusible companies. Use an establishment identifier when your CRM record represents a particular branch.
1. Prepare your identifier columns
Work on a copy of your CRM export. Keep the original CRM record ID in a separate column, alongside the SIREN or SIRET you intend to look up. Decide whether each row represents a company or a branch before combining results.
Import the identifier column into Excel as Text, including when opening a CSV. Preserve all leading zeros: SIRENs have nine digits and SIRETs fourteen. Keep postal codes as text too. Changing a cell’s format after zeros have already disappeared will not restore them; return to the original export.
For CSV input, keep only a siren column, a siret column, or both, with those headers (case insensitive). Use comma or semicolon separators. Keep each SIREN as exactly nine literal digits and each SIRET as fourteen; formulas, scientific notation, VAT numbers and company names are invalid CSV cells. Keep your CRM record IDs and mapping in a separate working file, especially when several CRM records share one identifier. Remove contact details, customer notes and unrelated columns before pasting: other columns are rejected, and Apify stores the original input normally.
2. Paste a small batch into the Actor
In the Apify input form, select Bulk lookup and paste your CSV into Paste SIREN/SIRET CSV (optional). Alternatively, switch to JSON input. This short input uses a documented identifier:
{ "mode": "lookup", "csvText": "siren\n552032534\n", "identifiers": [], "companyNames": [], "includeFinances": false, "includeDirectors": false }
The \n sequences represent line breaks in JSON; in the CSV text field, paste the header and each record on separate lines. Keep leading zeros in the original text. CSV is supported only in lookup mode; combining it with search mode is rejected before lookup.
When csvText is supplied, limits are 1 MiB of UTF-8 text, 1,000 data records, 128 characters per cell and 1,000 combined input positions across identifiers, companyNames and CSV cells, including blanks. Two CSV columns count as two positions per record. Blank CSV cells are skipped, but still count toward that limit. Unknown or repeated headers, extra or ragged columns, malformed quoting and oversized input fail before lookup. Existing check-digit validation, duplicate detection and charge limits still apply.
For the existing list workflow, use Bulk edit in SIREN, SIRET or VAT numbers and paste one value per line, without the header or blank cells. The list still accepts its documented identifier formats; CSV-specific cell restrictions apply to csvText.
Start with a small selection whose CRM records you can check manually, and retain the exact submitted input with your working export. Check the current Store pricing and run options before starting a lookup, then select Start. Split larger inputs into batches after reviewing the first export.
If you only have names, the separate companyNames list accepts a location hint such as Decathlon | 59. Review matchConfidence, matchAmbiguous and matchAlternatives rather than treating a name match as an identifier match.
3. Review results before updating accounts
The following is an illustrative, shortened result using the documented output fields, not a live lookup or a promise about current registry values:
{ "rowNumber": 1, "input": "552032534", "inputType": "siren", "status": "found", "siren": "552032534", "name": "DANONE" }
CSV cells follow the existing identifier and name inputs in record order, left to right. rowNumber is the combined input position, including blanks. The run summary OUTPUT.csvInput reports invalid entries by record, column, combined row number and reason; use the dataset statuses to review processed outcomes.
- Found or matched: inspect the returned entity before importing. Keep
companyStatusfor review; a successful lookup is not proof that a company or branch is open. - Duplicate: reconcile against the original mapping instead of losing CRM rows that share an identifier.
- Invalid: read
statusMessageand correct the source value. Do not invent missing digits. - Not found or error: keep the existing CRM values pending investigation. Neither status proves that the business does not exist.
- Low confidence: hold the row for manual review. Do not automatically accept a candidate merely to fill an empty cell.
Protected fields may be empty; the Actor documents partiallyDiffusible for restricted records. Leave those gaps intact. Do not replace a populated CRM address with an empty result.
4. Export and map the fields to your CRM
Open the run’s dataset results and download CSV or Excel. The All fields (CRM export) view exposes the wider field set. Keep the raw export unchanged and make a separate import sheet containing only the reviewed records and fields you need.
siren→ company identifier;siret→ establishment identifier.name→ company name;legalForm→ legal form.address,postalCodeandcity→ business address fields.nafCodeandnafLabel→ activity fields;employeeRange→ employee band, rather than an exact headcount.
Join the reviewed data back to your original CRM IDs using the submitted identifier and its returned result. Avoid joining by company name alone. Use your CRM’s import preview to check a few records, text identifiers, duplicate handling and blank-field rules before applying the whole file.
This is company-field enrichment, not email, phone or LinkedIn enrichment. It does not certify tax validity or legal status. The lookup does not enumerate every establishment of a company, and missing public fields remain missing. Sole-trader names and addresses can still be personal data; only import what you are entitled to process.
Use the existing Actor
Review its current pricing and input options on Apify before running your batch.
Open French Company Enrichment on Apify
Sources checked 23 October 2026: the Actor’s input schema and output schema, its README on the Store page above, and the official API description linked earlier. Data attribution: INSEE Sirene / API Recherche d’entreprises, DINUM. Atesen Software is independent and is not affiliated with or endorsed by INSEE or DINUM.