Spain doesn't publish a free, downloadable list of every company the way France does. What it does publish, every working day, is the BORME: the official gazette of the companies' register, where each registered change to a company is announced. If you know how to read it, the BORME tells you a company's story, act by act.
What you'll learn
- What the BORME is, who publishes it and how often
- How a company's act becomes a line in the BORME, and how to read that line
- What the registry sheet (hoja) is, and why it identifies a company better than its name
- How to read the BORME yourself through the BOE's free open-data API
- What the BORME can't tell you
What is the BORME?
BORME stands for Boletín Oficial del Registro Mercantil, the official bulletin of the Spanish companies' register. It is published by the Agencia Estatal Boletín Oficial del Estado (the BOE), Monday to Friday, in the morning.
Its first section, "Empresarios", has a part A called "Actos inscritos": the acts the provincial commercial registries have registered. Each publication day there is one document per province. Each document lists the companies with something registered that day: an incorporation, appointments and removals of officers, a change of registered office, a capital increase or reduction, a dissolution, an extinction, and more.
So the BORME is a stream of events, not a list of companies. A company appears when something happens to it.
Is the BORME the same as the Registro Mercantil?
No, and the difference explains what the BORME can and can't do. Spain's commercial registries (Registros Mercantiles) are kept province by province; they hold each company's sheet and register its acts. The BORME is where those registered acts are then announced, every working day. So the BORME tells you that something was registered, when and by which provincial registry; the registry itself keeps the company's full file. For checking a company quickly, the BORME's announcements are the open, free part you can read and reuse.
How do you read a BORME entry?
Here is a real entry from part A, as the BOE published it (the officers' names are left out here):
439821 - BAT BATEAN, S.L.
Constitución. Comienzo de operaciones: 16.09.26. Objeto social: …. Domicilio: C/ ALDABE, Nº 34 1º DCHA 01012 (VITORIA-GASTEIZ).
Capital: 3.000,00 Euros. Nombramientos. Adm. Solid.: [two names, not shown here].
Datos registrales. S 8 , H VI 23266, I/A 1 (25.09.26).
Piece by piece:
439821is the entry number in that day's BORME. It identifies the announcement, not the company.BAT BATEAN, S.L.is the company name; the suffix (S.L., S.A., …) gives its legal form.Constitución,Nombramientosare the act types: here an incorporation and appointments.Domiciliois the registered office, andCapitalthe share capital.Datos registralesholds the registry data.H VI 23266is the registry sheet: the province prefix (VI) and the sheet number.
What is the hoja, and why does it matter?
Spanish companies are registered on a sheet (hoja) in their province's commercial registry. The sheet is stable for a company in that registry, which makes it a much better key than the name, which can change or be shared. If a company moves its registered office to another province, it gets a new sheet there, and the move is itself published as an act.
There is one thing the BORME doesn't give you: the company's tax number (NIF or CIF). It isn't in the part A entries. That's why you can't go from a NIF to a BORME record directly, and why Fuentio doesn't let you look a Spanish company up by its NIF, CIF or VAT number: you search by name instead.
What does a company's status mean in the BORME?
The status comes only from the acts that change it. In Spain, a dissolution opens the liquidation of a company, and the extinction ends it. So a company with a "Disolución" act is in liquidation, and one with an "Extinción" act is closed. A company whose only act is its incorporation has no status act at all: its status is unknown until something is published, not "active" by assumption.
A real example from the demo data on our home page: QILOVATIO ENERGIA IBERIA S.L., sheet B-643957 in Barcelona, was incorporated on 28 October 2025 and its extinction was registered on 15 May 2026. Part of its record:
{
"id": "ES-RMHOJA-B-643957",
"name": {"original": "QILOVATIO ENERGIA IBERIA S.L."},
"status": {"value": "dissolved", "original_label": "Extinción", "as_of": "2026-05-15"},
"legal_form": {"original_code": "SL", "original_label": "Sociedad de Responsabilidad Limitada"},
"incorporation_date": "2025-10-28",
"capital": {"amount": "5000.00", "currency": "EUR"},
"provenance": {"source": "es_borme", "coverage_level": "events_only"}
}
Every act keeps its publication date and a link to the BOE's own page for it.
How can I read the BORME myself?
The BOE publishes the BORME through a free open-data API, with no key. The daily summary lists every document of the day:
With cURL:
curl -H "Accept: application/json" "https://www.boe.es/datosabiertos/api/borme/sumario/20261002"
With Python (requests):
import requests
r = requests.get("https://www.boe.es/datosabiertos/api/borme/sumario/20261002",
headers={"Accept": "application/json"}, timeout=20)
for diario in r.json()["data"]["sumario"]["diario"]:
for seccion in diario["seccion"]:
for item in seccion.get("item", []):
print(item["identificador"])
With JavaScript (fetch):
const res = await fetch("https://www.boe.es/datosabiertos/api/borme/sumario/20261002", {
headers: { Accept: "application/json" },
});
const { data } = await res.json();
console.log(data.sumario.diario.length);
In the summary, part A has one item per province, each with an identifier such as BORME-A-2026-191-01; the BOE serves each document's text at its own page. Be polite with the BOE's servers, and read its robots.txt before fetching documents: it excludes some specific documents and days.
. Keep your key in an environment variable (FUENTIO_API_KEY).
curl "https://api.fuentio.com/v1/companies/search?country=ES&q=qilovatio" -H "Authorization: Bearer $FUENTIO_API_KEY"
import os, httpx
r = httpx.get("https://api.fuentio.com/v1/companies/search", params={"country": "ES", "q": "qilovatio"},
headers={"Authorization": f"Bearer {os.environ['FUENTIO_API_KEY']}"})
print(r.json())
