Skip to content
firmus.shdocs

Every page's text, headings and title. Code samples are not indexed.

Sources & coverage

The register and the legal gazette behind every field, what is covered, and how fresh it is.

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.registry on a record, source on 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

RegisterRépertoire Sirene des entreprises et de leurs établissements
PublisherINSEE — Institut national de la statistique et des études économiques
Distributed viadata.gouv.fr
LicenceLicence Ouverte / Open Licence 2.0
PublishedMonthly, 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

PublicationBODACC — Bulletin officiel des annonces civiles et commerciales
PublisherDILA — Direction de l'information légale et administrative
LicenceLicence Ouverte / Open Licence 2.0
PublishedFive 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:

KindShare
legal_entity.accounts_filed52.0 %
legal_entity.registered16.9 %
legal_entity.legal_notice_published, corrections included15.8 %
legal_entity.struck_off9.5 %
the five legal_entity.insolvency.* kinds3.7 %
legal_entity.business_acquired and business_sold1.7 %
every other kind, corrections and cancellations0.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 entitiesAll — 30M on the August 2026 stock, keyed by SIREN
EstablishmentsAll — 43.9M on the August 2026 stock, keyed by SIRET
AutocompleteOver every establishment in the register
StatusActive and inactive alike — ceased companies and closed establishments are kept and served
Legal noticesCompanies 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_data and pagination.