Everything served here comes from official publications, released as open data by the body that maintains them: a national company register, and in France the legal gazette as well. Nothing is scraped, nothing is bought from a broker, and nothing is inferred.
- Not a data broker. Every value names its source —
sources.registryon a record,sourceon an event and on a legal fact — and two sources are never blended into one value. - Not enriched. No inferred sector, no estimated headcount, no scored "company health", no email addresses or contact names.
- Not scraped. No web crawl, no company website parsed, no aggregator re-hosted.
- Not a graph. Ownership, shareholders and officers are not published in a structured form in the sources this is built from, so they are not here.
France — Sirene
| Register | Répertoire Sirene des entreprises et de leurs établissements |
| Publisher | INSEE — Institut national de la statistique et des études économiques |
| Distributed via | data.gouv.fr |
| Licence | Licence Ouverte / Open Licence 2.0 |
| Published | Monthly, as a full stock |
The RNE, the INPI filings database and company websites are not sources here.
What the licence asks
The Licence Ouverte 2.0 permits reuse, including commercial reuse and redistribution. Its
one obligation is attribution: name the source and the date of the last update. That
obligation travels with the data, so it applies to you if you republish what you read here.
The source is named above, and data_updated_at carries the register's own timestamp for
each record.
Firmus does not extend or restrict the licence.
One change already announced
The activity codes attached to Sirene records move to the NAF 2025 nomenclature from
1 January 2027. An activity published under the new nomenclature arrives as naf2025
beside its code; an older one keeps the scheme it was published under. A client that reads
the code and its scheme together keeps working across the change. The
changelog records it when it lands.
France — BODACC
| Publication | BODACC — Bulletin officiel des annonces civiles et commerciales |
| Publisher | DILA — Direction de l'information légale et administrative |
| Licence | Licence Ouverte / Open Licence 2.0 |
| Published | Five bulletins a week, Tuesday to Saturday or Sunday |
The BODACC is where the legal life of a French company is published: insolvency
proceedings, sales of a business, removals from the trade register, registrations, filed
accounts, and their corrections. It is served as events in the
timeline, with source: "bodacc", and as the legal
fields of enrich. Each event links to its notice, so a reader can check it against the
gazette.
It covers companies in the trade register (RCS) only. An association, a public body or
a sole trader outside the register has no notice, so for those, no event and
open: false mean nothing was published, not that nothing happened. A company with
reduced disclosure keeps the kind and the dates of its notices, not
what they say, and so does a company the register did not hold yet when its notice was
read; the second stays that way after the company appears in the register.
A notice's kind is read from the gazette's structured fields alone — the court's judgment,
the role of each company named, the category of the deed — never from its text, and no
language model is involved. A notice those fields do not place is served as
legal_entity.legal_notice_published, with its family, rather than guessed. Of the
401 303 events typed from the 399 791 notices of October 2026:
| Kind | Share |
|---|---|
legal_entity.accounts_filed | 52.0 % |
legal_entity.registered | 16.9 % |
legal_entity.legal_notice_published, corrections included | 15.8 % |
legal_entity.struck_off | 9.5 % |
the five legal_entity.insolvency.* kinds | 3.7 % |
legal_entity.business_acquired and business_sold | 1.7 % |
| every other kind, corrections and cancellations | 0.4 % |
Nine in ten of the unplaced notices are changes to a company's details, which the gazette publishes as prose; the rest are mostly steps inside a proceeding that do not change its state, such as claims lists. 1 579 notices of the month named no registry number and gave no event.
What is covered
One country is served: France, country code fr — the whole Sirene stock, not a
filtered or curated subset.
| Legal entities | All — 30M on the August 2026 stock, keyed by SIREN |
| Establishments | All — 43.9M on the August 2026 stock, keyed by SIRET |
| Autocomplete | Over every establishment in the register |
| Status | Active and inactive alike — ceased companies and closed establishments are kept and served |
| Legal notices | Companies in the trade register — the BODACC's notices since January 2008 |
Closed establishments are excluded from a list by default and returned when you pass
include_closed=true; ceased legal entities are returned by identifier like any other. A
company that stopped trading in 1974 still answers.
Sole proprietors, non-profits and public bodies are all included. Many are subject to reduced disclosure, which is a property of the record rather than a gap in coverage.
What is not covered anywhere
Not published in the files this is built from, so there is no partial version of them for some companies:
- Officers, directors and legal representatives
- Shareholders, ownership and group structure
- Financial statements, revenue and balance-sheet figures — that accounts were filed, and for which fiscal year, is served from the BODACC; what they contain is not
- Court decisions other than those the BODACC publishes about a company in the trade register
- Trademarks and intellectual property
- Contact details — no email addresses, no phone numbers, no named individuals
Employee counts are served as the register publishes them: a range code for a stated year, with its scheme. That is not a headcount and should not be presented as one.
Freshness
Two mechanisms, not one.
INSEE republishes the full stock once a month, and a new publication is served within a day of appearing. Between two of those, we read the register's daily change feed every morning and apply it. A record changed at the register on one day is served the next.
That J+1 is a floor rather than a target we intend to beat: the register itself publishes the previous day's processing, so nobody can serve a change on the day it happens.
Two things are worth knowing before you build on the daily half:
- A quiet day is a real answer. The feed skips days — a failed republication at the register, a weekend, a public holiday. When that happens the next day's window simply covers both, and nothing is lost.
- Disappearance is the exception. Closures and deregistrations arrive as ordinary updates and are served the next day like any other change. A record that stops existing outright — the register merging two duplicate identifiers — is only reconciled by the monthly rebuild, so it can be served for up to a month after the merge.
The BODACC is read every morning, after the gazette's portal publishes the day's
bulletin, so a notice is usually served the day its bulletin is dated, and the next day when
the bulletin comes out after that read. Its history before the daily read began was loaded
at once, and is marked bulk: the timeline leaves it out unless you pass
include_bulk=true, while enrich's legal fields always count it.
Autocomplete has one extra bound. GET /v1/{country}/suggest answers are cached for up
to five minutes, so a name change applied in the morning can take that long to appear in
autocomplete after it is already correct on the record endpoints.
data_updated_at is the register's timestamp for that record, not the time it was
imported. Three consequences:
- A record the register has not touched in eleven years carries an eleven-year-old
data_updated_at. That is correct, and it does not mean the record is stale. - A publication that is late, skipped or malformed leaves the previous stock being served
and does not move
data_updated_at. - No request is ever answered from a half-built data set. Until a new publication is complete, every request is answered from the previous one.
To ask how current the data set is, read the cadence above; to ask how current one company
is, read its data_updated_at.
Asking for a country that is not served
A 404 with not_found — the same answer as an identifier that does not exist:
curl -H "Authorization: Bearer $FIRMUS_KEY" \
https://api.firmus.sh/v1/de/legal-entities/123456789{
"error": {
"status": 404,
"code": "not_found",
"message": "The requested resource does not exist.",
"documentation_url": "https://docs.firmus.sh/reference/errors#not_found"
}
}Which countries carry data is a fact about the data set, not a mistake in your request, so a country served next month needs no change to how your code handles today's answer. The same holds inside a served country: an identifier with no record is a miss, never an error.
Countries appear in this page when they start answering, with their register, publisher and licence beside them.
Where to look next
- Masked records — why some records arrive with fields withheld.
- Conventions — identifiers, nulls,
country_dataand pagination.