Public data exists. It does not connect.
Every public register was built as if it were the only one: different formats, different update rhythms and, most often, no shared reference by which one dataset could be placed next to another.
Our work is not obtaining the data — it is public, anyone can download it. It is making it coherent with itself and keeping it that way while the sources shift underneath us.
Nothing that is published was meant to be used together.
It is not ill will, it is history. Each institution published its dataset on its own, in whatever form suited it, without assuming anyone would want to put it beside another.
Shape
The same kind of information is published in incompatible structures, with conventions that differ from one source to the next and sometimes from one year to the next. Before anything else, you have to decide what “the same” means.
Rhythm
One set updates daily, another once a year, another when someone remembers. Put together carelessly they produce a picture that was never true at any moment — and that looks plausible.
Identity
The same entity appears in different sources spelled differently, and often none of them carries a shared identifier. To put them together you first have to prove they are talking about the same thing.
Absence
Part of what you need daily is not published anywhere, in any form. Not because it is hidden, but because it never existed as a ready-to-use dataset.
Every team that needs public data solves these four problems again, from scratch, for its own product. We solve them once and keep the result stable.
Four operations, in the same order, for any dataset.
The order is not arbitrary: you cannot link two sets before normalising them, and you cannot fill in what is missing before you know what connects to what.
Consolidate
We bring together the sets that describe the same thing from different angles and give them one structure. What the source splits across several files, published separately and at different times, becomes a coherent object with a documented schema.
Normalise
Every local convention becomes an explicit rule, applied the same way everywhere: consistent spelling, abbreviations resolved, categories reduced to fixed values instead of free text. This is not cosmetic cleanup — it is the condition without which nothing that follows works.
Link
Where a shared reference exists, we use it. Where it does not — and most of the time it does not — we rebuild the link from what can be deduced and verify it before publishing. We prefer an empty field to an invented link, because a wrong link does not show.
the hard partComplete
We add what is missing but derivable: relationships the source leaves implicit, dimensions that only appear by comparing two sets, change over time built from successive imports. Everything we add is derived or declared. Never estimated.
Five steps, identical for any dataset.
If one of them fails, the import does not reach production. We would rather have data that is a day old than data that is corrupt.
Fetch
We take the set from the source at its declared frequency and keep the raw form, so any import can be redone.
Process
The four operations, in order: consolidate, normalise, link, complete.
Verify
We compare the result with the previous import. An unexpected deviation stops publication and alerts us.
Publish
The data goes into production, the cache is invalidated, and the age of the set becomes visible in every response.
Announce
Anything that changes substantively goes into the changelog, explained. We do not slip changes in quietly.
What you build today has to still work in two years.
Sources change — that is the only certainty in public data. The point of a platform like ours is that the change stops with us.
Notice before breaking changes
Announced publicly before anything happens.
The previous version stays active
At minimum, from the announcement. We would rather maintain two versions than break someone’s production on a Tuesday morning.
Identifiers are never reused
A code, once assigned, belongs to that record forever, even after the record becomes inactive.
Data age is visible
Every response tells you how old the set is. You do not have to ask us and you do not have to guess.
Sources are declared
Every dataset states its provenance and licence. Partly so that migrating away is unpleasant, not impossible.
The catalog grows. The contract stays the same.
A second dataset is worth little if it forces a second integration. What you learn once applies everywhere.
The same shape
Response structure, error behaviour and how you page through results do not differ from one set to the next. Write the client once and reuse it.
The same gate
One way to authenticate, with access limited to exactly the sets you choose. No separate keys, no parallel accounts, no special rules per module.
The same limits
Volume, what is left and when it resets are visible on every response, the same way everywhere. You do not discover a limit by crossing it.
What we are not, so you do not waste time judging us wrong.
There are products that sound similar and differ sharply in intent. It is worth saying up front which side we are on.
A contact-data vendor
We do not sell lists for campaigns and we do not build prospecting products. What we publish exists for verification and for running your own product, and the terms say so explicitly.
A people search engine
We do not expose reverse lookup by person and we do not serve personal data without authentication. A query starts from the legal entity, not from the individual.
A proxy to the sources
We do not forward your request and we do not inherit the source’s limits. We import, process and serve from our own infrastructure — which is why the response is fast and does not go down with the source.
What you ask us most often.
The rest, in the frequently asked questions.