Spain has no free national company file you can download and load. What it has is the BORME, the official gazette where the commercial registry publishes the acts it registers, every working day, as documents written for people. Turning that into reliable company records is most of the work behind Fuentio's Spanish data. This page explains how we do it, the rules we follow, and how we check the result against the official documents.
It describes the method as of 10 October 2026, with figures from our own runs.
Short answer: every working day, Fuentio reads the BOE's open-data summary of the BORME, fetches each province's section A text, splits it into entries and acts, and stores each act with its BOE reference and dates. Companies are identified by their registry sheet, status comes only from acts that define it (never assumed active), a day with gaps is held rather than published, personal details are scrubbed, and a reproducible spot check compares records with the official text: 20 of 20 matched.
What you'll learn
- What we fetch, and under which reuse conditions
- How an entry becomes a record
- How we identify companies without a tax number
- The status rules, and why most Spanish statuses are "unknown"
- The quality gates, privacy rules and spot check
What do we fetch, and under which conditions?
The BOE publishes an open-data API that returns each day's BORME summary: one item per province for section A ("Actos inscritos"), with links to that province's text. We read the summary, then each province's HTML text, the official rendering of the same document, which marks each entry up clearly. We don't use the per-document XML links, which the BOE's robots.txt disallows.
The BOE's reuse conditions allow commercial and non-commercial reuse, require citing the source with a link to its website, forbid distorting the meaning of the information, ask for the date of last update, and require full respect of the GDPR when documents contain personal data. Every Spanish record therefore carries the attribution "Basado en datos de la Agencia Estatal Boletín Oficial del Estado", the BOE link, and the publication date.
We pace our requests (at most one per second), re-read the BOE's robots.txt daily, and skip any document it excludes. See the BOE's BORME API for how the summary works.
How does an entry become a record?
A section A entry looks like this (real entry, officer names left out):
439821 - BAT BATEAN, S.L.
Constitución. … Domicilio: C/ ALDABE, Nº 34 1º DCHA 01012 (VITORIA-GASTEIZ).
Capital: 3.000,00 Euros. Nombramientos. Adm. Solid.: [not shown].
Datos registrales. S 8 , H VI 23266, I/A 1 (25.09.26).
| Piece | Becomes |
|---|---|
439821 | The entry number, kept with each act (it identifies the publication, not the company) |
BAT BATEAN, S.L. | name.original; the suffix gives the legal form and its ISO 20275 ELF code |
Constitución, Nombramientos… | extensions.es.acts[]: each act's type, label, publication date, registry date, BORME reference and link |
Domicilio: … | registered_address (the latest act wins); the postal code is never guessed when it isn't printed |
Capital: 3.000,00 Euros | capital: {"amount": "3000.00", "currency": "EUR"} |
Adm. Solid.: … | officers[]: names and roles only; removals take them off |
H VI 23266 | The registry sheet VI-23266, the company's identifier |
The BORME has no activity code, so activity stays empty for Spain; the corporate purpose is kept as free text.
How do we identify a company without its tax number?
The BORME doesn't publish the NIF. A company is identified by its sheet (hoja) in its provincial registry: registry prefix plus sheet number, so VI-23266 becomes the Fuentio ID ES-RMHOJA-VI-23266. The sheet is stable for a company within a registry.
Older registry books sometimes print a sheet without its prefix. Since each province document belongs to one registry, we take the prefix from the document's other sheets, keep the book section when it matters, and flag the record hoja_inferred: true. When a sheet has neither a prefix nor a section, the entry is rejected rather than guessed. A move to another province creates a new sheet; today those stay two records, each with its acts.
A NIF in a lookup answers id_scheme_not_supported, with a suggestion to search by name. See how to check a Spanish company's NIF.
What are the status rules?
Status comes only from acts that define it, the latest by registry date winning:
| Act | Status |
|---|---|
| Extinción | dissolved |
| Disolución | in_liquidation (Spanish dissolution opens the liquidation) |
| Cierre provisional hoja registral | inactive |
| Reapertura hoja registral, Reactivación de la sociedad | back to unknown |
| Anything else, including Constitución | unknown |
We never assume a Spanish company is active. A recent incorporation shows a company was created; it doesn't prove it trades today. That's why many Spanish records say unknown: it's the honest answer from an events source. Every Spanish record also says coverage_level: "events_only", and our coverage is companies with at least one section A act since 6 October 2025. See is a Spanish company still active?.
Which quality gates do we apply?
- Measured parser. On the 12-month backfill (6 October 2025 to 5 October 2026: 252 publication days, 596,803 entries), 0 entries were rejected and every day's numbering was complete.
- Held days. BORME entry numbers are consecutive across a day's issue. If more than 0.5% of numbers are missing, numbers repeat, or more than 0.5% of entries are rejected, the day is held: nothing from it is published, and the previous data stays live.
- Raw copies. Each fetched document is stored before parsing, with its hash, so any record can be traced back to the exact text it came from.
How do we check the result?
A reproducible spot check, run on 6 October 2026 on the full backfill:
- Sample: 20 records chosen so every path is covered: incorporations, extinctions, liquidations, provisional closures, name changes, several publications, sheets printed without a prefix.
- Fresh official text fetched from boe.es for every act, not from our store.
- Independent check: each entry is found in the official HTML by its number with a plain pattern, not with our parser, and compared field by field: name, sheet, act labels, dates, the act behind the status, officers, postal code and capital, and the absence of any ID-card-shaped number.
- Control: the same checks on deliberately corrupted copies (wrong sheet, wrong name, wrong date or label) flagged all 20, so a clean result means something.
Result: 20 of 20 records matched the official documents.
How do we handle personal data?
Officers are kept as names and roles only, as officially published. Personal details inside act texts (ID numbers, nationality, home address, birth details, civil status) are replaced before anything is stored. And when the BOE's robots.txt starts excluding a document, we treat it as a removal request: officers and act texts from that document are hidden, while company-level facts stay. See what personal data we keep.
Fuentio's API isn't open yet. Become an early tester to see these records on the Spanish companies you work with.
See what we cover in France and Spain.
Limits. This page describes Fuentio's method and our own measurements on 10 October 2026. Reuse conditions come from the BOE's legal notice. Our Spanish coverage is event-based: a company with no section A act since 6 October 2025 isn't in it, and a status of "unknown" isn't "active".
Frequently asked questions
Where does Fuentio's Spanish company data come from?
From section A of the BORME, published by the BOE, read every working day under the BOE's reuse conditions.
Why do many Spanish companies show "unknown" status?
Because the BORME publishes events, and we derive status only from acts that define it. We never assume a company is active.
How do you identify Spanish companies without a NIF?
By their registry sheet in the provincial registry, for example VI-23266, which the BORME prints in every entry.
How do you know the parsing is right?
A reproducible spot check against freshly fetched official text matched 20 of 20 records, and a control run on corrupted copies flagged all 20.
