Engineering notes · Data quality
Four act types reconcile to within half a point — the two that did not were measured wrong
There is a question we could never answer honestly about our own pipeline.
We parse the BORME — the Spanish commercial registry gazette — into typed events. We can tell you our parser is deterministic, that it re-runs byte for byte, that every event links back to its gazette file and act number. What we could not tell you is whether it sees everything. A parser that silently drops one act in twenty looks exactly like a parser that drops none. There is no second copy of the gazette to check against.
This month there turned out to be something better than a second copy.
The registry counts itself
The Colegio de Registradores runs Spain's provincial Registros Mercantiles — the same registries whose gazette we read. Since January 2025 it publishes its own statistics: how many incorporations, dissolutions, capital increases, mergers and spin-offs its registries inscribed, by province and by month, back to 2011. Eleven datasets, under the Open Database License.
We went there looking for tax identifiers. There are none — every dataset is a count by province, and we said so plainly in our source notes. What we found instead was a yardstick, which for a question like this is worth more.
Because now the shape of the check is obvious. They publish how many acts were inscribed. We publish how many acts we extracted from the gazette that announces those same inscriptions. The two numbers should agree.
The first reading, and the part of it that was most convincing
INCORPORATION 99.6%
EXTINCTION 100.0%
CAPITAL_REDUCTION 96.6%
CAPITAL_INCREASE 94.0%
Two of them landed on parity. That was the result we wanted and it held up.
The other two did not, and the way they failed was worse than the failure itself. Capital increases were not merely low; they had been sliding for a decade — 103% in 2016, 99% in 2019, 94% in 2025. A flat gap is a quirk. A trend is a story: something in the gazette had been changing and our parser had been falling behind it, gradually, for ten years, and nothing inside our own system could have told us.
We wrote it down as an open question and went to look for the cause.
The cause was the ruler
The registry counts inscriptions. We were counting gazette entries.
Those are not the same unit. One BORME entry for one company can carry several acts, and it frequently does — a capital increase alongside an address change, or two capital increases resolved at the same meeting and inscribed together. In 2025 alone, 1,381 entries carry more than one capital increase.
Counted as acts rather than entries:
| act | as entries | as acts |
|---|---|---|
| capital increases | 94.0% | 99.8% |
| capital reductions | 96.6% | 99.6% |
There was no gap. There had never been a gap.
And the trend — the most persuasive part of the whole finding — was an artefact of the same mistake. Entries that bundle several acts have been getting more common. That alone forces an entry-based ratio downward year after year, whether or not a single act is being missed. We had been reading a change in how the gazette packages its notices as a decade of quiet decay in our own code.
That is the part worth keeping. A wrong unit does not produce noise. It produces a smooth, plausible, directional signal — the kind that survives a sanity check and gets written into a roadmap.
Where it stands
Across every complete year from 2016 to 2025, counting acts:
| act | within 1% of the registry |
|---|---|
| incorporations | 10 years of 10 |
| capital reductions | 10 of 10 |
| capital increases | 9 of 10 |
| dissolutions | 8 of 10 |
For 2025: the registry inscribed 128,871 incorporations; we extracted 128,314.
The tenth year
Capital increases miss one year of the ten, and it is worth naming rather than leaving as a rounding entry. In 2016 we counted 31,688 against the registry's 29,773 — 106.4%, far outside the noise of every other year. The obvious first suspicion was our own extraction: some 2016 format we double-counted.
Month by month, the answer was somewhere else:
| month | registry | ours |
|---|---|---|
| August 2016 | 2,203 | 2,348 |
| September 2016 | 2,254 | 2,274 |
| October 2016 | 177 | 2,128 |
| November 2016 | 2,682 | 2,599 |
| December 2016 | 2,469 | 2,485 |
Every neighbouring month sits between two and three thousand. The registry's October figure is 177; ours is 2,128, exactly where the surrounding months say it should be. Remove that single month from both sides and 2016 lands at 99.9%, like every other year.
We are not claiming an error we can prove — there may be a publication reason we do not know. What can be said is which of the two counts is inconsistent with its own neighbours, and it is not the one derived from the gazette. A ruler built to check us turned out to point both ways.
With that month set aside, the forty year-by-act comparisons sum to 1,712,264 acts on our side against 1,712,084 on theirs: 0.01% apart across 1.71 million acts, with a mean absolute deviation of 0.36% and no comparison further than 1.5% from the reference.
Two act types genuinely run above the registry — mergers and spin-offs, by about eight and eighteen percent. Some of that is expected and correct: a merger by absorption is one inscription that the gazette can announce under both the absorbing and the absorbed company, so an act-level count of the gazette should exceed an inscription-level count of the registry.
The rest we do not claim to explain yet. Our own side shows no break — the absolute counts have been flat since 2018, no new wording appeared, the rate of same-day duplicate entries has not moved. The registry's series is the one that swings: above our count in 2022, below it in 2024 and 2025. That is the shape of a series still being completed after publication, but it is a hypothesis, and we have stopped arguing about it. We now log every published figure that changes under us, so the next quarterly republication will answer it without us guessing.
Two things we would tell anyone doing the same check
Find out what the other counter counts. Not what it is called — what its row means. Act, entry, case, company. And on what date: the registry counts the month a deed was inscribed, the gazette prints it days or weeks later, which throws individual months out by as much as 8% while the year lands inside half a point. Compare years.
A deviation that drifts is a data-structure question before it is a code question. Our instinct was to look for what our parser had stopped recognising. The change was in how the source packages what it publishes, and in what we were counting — not in what we understood.
If you run a parser over a public gazette, go and find out whether its issuing body publishes counts of its own. Ours does, it is free, and it turned an assurance we could only assert into one we can show — including the part where the first measurement was wrong.