Everyone can read the filings. Almost nobody joins them.
The disclosure that governs institutional money is public, free, and almost entirely unusable in the form it is published. This paper argues that the durable advantage for an intelligence product is not another feed. It is the join, the clock, and the receipt: linking every record that describes the same institution, remembering both when a fact was true and when we learned it, and keeping the source document behind every number.
If you read nothing else, read the six claims below. Each one is falsifiable, each one is defended later in the paper, and each one has a cost attached in section 13.
A useful way to decide what to build is to ask, for each layer of the stack, how long a competent competitor would need to reproduce it from scratch. Layers that take a fortnight are commodity no matter how much they cost us. Layers that take years are the business.
The estimates below are deliberately unkind to ourselves. They assume the competitor is good, has money, and knows what they are doing. What survives that test is worth funding.
This is an uncomfortable allocation, because the commodity layers are the ones that demo well. A new source lights up a dashboard. A better resolution threshold does not. The discipline is to keep funding the invisible half.
Start with a question a client would actually ask. Which UK local authority pension funds changed their emerging markets equity manager in the last two years, and what were they paying the outgoing one?
Every word of that question is answerable from public documents. None of it is answerable from any single public document. The answer lives across a committee report published as a PDF on a council website, an annual report filed months later, a regulatory return in a different format under a different identifier, and a manager’s own disclosure that names the mandate but not the client.
So the work is not retrieval. The work is assembly, and assembly across sources that were never designed to be assembled has four specific failure modes.
The same institution has many names and no shared key
A fund is an EIN to the Department of Labor, a CIK to the SEC, an LEI to the derivatives reporting regime, a registration number to the UK regulator, and a slightly different string in every document a human typed. Merge on name and you will merge two different funds; refuse to merge and you will report the same fund twice.
Sources disagree, and the disagreement is information
Two filings give different values for the same holding on the same date. One is late, one is amended, one uses a different valuation convention. Picking a winner silently throws away the most valuable signal on the page, which is that a discrepancy exists at all.
Everything arrives late, and out of order
Quarterly holdings appear forty‑five days after quarter end. Annual returns appear seven months after year end and are amended for years afterwards. A store with one timestamp cannot distinguish “this was true then” from “we learned this then”.
Ranking multiplies error unless it is calibrated
Any system that produces a best answer from conflicting inputs is running a ranking function, whether or not anyone designed one. If that function has no calibrated notion of source authority, errors do not cancel. They compound, quietly, in the direction of whichever source happens to be loudest.
None of this is novel. The academic literature on truth discovery, the problem of deciding what is true when sources of unequal reliability disagree, has spent fifteen years on exactly this, and the finding is consistent: systems that model source reliability explicitly outperform majority voting, and systems that emit calibrated probabilities outperform systems that emit confident single answers. Google’s Knowledge Vault work is the best‑known industrial version of the same result.
The design in the rest of this paper is an attempt to take that finding seriously rather than rediscovering it in production.
Before designing anything, we catalogued the ground. 87 sources across the US federal system, US states, the UK, entity registries, market data and macroeconomic series. For each one we recorded what it actually contains, how it is obtained, what keys it carries, and the one thing about it that will bite an engineer who assumes it behaves normally.
78 were confirmed reachable at the terms described. 9 are recorded from documentation rather than fetched: eight because they are paid, gated, licensed or restricted in redistribution, and we did not buy past the terms, and one, the Australian holdings disclosure, free but assessed from secondary sources. 5 rows are marked as walls: 3 commercial, where access is sold or licensed rather than published, and 2, the PBGC (the US pension insurer) event filings and SEC Form PF, closed by statute, where no amount of effort or money helps. The walls are marked, not hidden, because a register that only lists what is easy is a sales document rather than a plan.
Open any row for the field notes. Filter by category or availability, or type to search across every field. Everything in this section is data, not prose: the counters above and in the opening are computed from these rows when the page loads.
Here is the map that makes the case better than any argument. Seventeen identifier systems, one institution. An identifier system is simply the numbering scheme a regulator or registry uses to name the entities it tracks; each was designed alone, for its own purpose, and none was designed to line up with the others. Solid lines are joins a machine can make from a published crosswalk, a table that translates one scheme into another. Dashed lines are joins that have to be inferred, defended, and occasionally corrected by a human.
Notice where the dashed lines cluster. The Legal Entity Identifier is the closest thing to a hub and it works well for banks, listed issuers and UK companies. It does almost nothing for the American private retirement world, which is precisely the part of the market an intelligence product in this space most needs to cover.
| Identifier | Issued by | Covers | Join quality |
|---|---|---|---|
| EIN | US Internal Revenue Service | Any US employer or sponsor | Reliable within the retirement world, isolated outside it |
| EIN + PN | US Department of Labor | A specific plan under a sponsor | The true grain of a US plan, and it is a composite key |
| ACK_ID | EFAST2, the DOL filing system | One submitted filing | Exact, and the only stable handle on an amendment chain |
| CIK | US SEC | Anything that files with the SEC | Exact within EDGAR, no bridge to plan filings |
| CRD | SEC and FINRA | Advisers and broker dealers | Exact, and joins to CIK through adviser filings |
| LEI | GLEIF | Legal entities that opted in or were required to | Excellent where present, absent for most plans |
| RSSD | US Federal Reserve | Banks and holding companies | Exact, with a published crosswalk to LEI |
| FDIC cert | US FDIC | Insured depositories | Exact, joins through the Fed hierarchy |
| NCUA charter | US NCUA | Credit unions | Exact, separate universe from the bank identifiers |
| NAIC cocode | US state insurance regulators | Insurers | Exact within insurance, weakly linked outward |
| CRN | UK Companies House | UK incorporated entities | Excellent, and the anchor for most UK joins |
| Charity number | UK Charity Commission | Registered charities | Joins to CRN only when an entity is dual registered |
| FRN | UK FCA | Regulated firms | Exact, and the register carries the company number |
| PSR number | UK Pensions Regulator | Occupational schemes | Often present only as a name in public documents |
| FIGI | OpenFIGI | Instruments | Open and free, the practical default |
| CUSIP | CUSIP Global Services | North American instruments | Licensed, and the licensing is a real constraint |
| ISIN | National numbering agencies | Instruments internationally | Widely present in filings, joins cleanly to FIGI |
Architecture arguments are easy to wave away. Specific misbehaviour is not. Six examples from the register, each of which breaks a naive pipeline in a different way, and each of which the design in sections 07 to 11 exists to absorb.
| What happens | Why it breaks a simple pipeline | What absorbs it |
|---|---|---|
| Prior years are rewritten | The annual retirement filing datasets regenerate every plan year, not just the current one. A file you loaded last quarter can change underneath you with no version marker. | Content hashing at ingest, plus a record of when we knew each version |
| Amendments arrive for years | A single filing can be superseded repeatedly. Keying on the sponsor and the year silently overwrites history; keying on the submission produces duplicates unless the chain is modelled. | Filing level keys and an explicit supersession relation |
| Legally confidential fields | Some regimes permit an issuer to withhold specific holdings while filing everything else. The absence is lawful and permanent, so retrying is waste and imputing is misrepresentation. | A first class “withheld by right” state, distinct from missing |
| The best content is a PDF | Committee papers naming a manager appointment are scanned documents on a council website with no consistent structure, no feed and no identifier. | Document extraction with confidence, then adjudication of the uncertain band |
| Names drift constantly | The same institution appears with different punctuation, legal suffixes, historic trading names and simple typing errors, across documents that never share a key. | Blocking on similarity, scoring the pair, and reviewing the middle |
| Conventions differ quietly | Two sources report the same holding on the same date at different values because one uses a different valuation or reporting convention. Neither is wrong and neither says so. | Keeping both, ranking by source authority, publishing the disagreement |
The common thread is that none of these are bugs in the sources. They are the sources working as designed, under legal and administrative constraints that will not change because we find them inconvenient. A data layer either models them or is quietly wrong about them.
Section 06 lists the ways this data goes wrong in theory. We do not need to speculate about what happens when years of it are absorbed without the architecture in this paper, because a production database that grew for years alongside an editorial product is that experiment, already run. Every observation below comes directly from the live schema, examined in August 2026. The exact figures are deliberately withheld; the patterns are the point.
This is not an audit of editorial quality; the margin shows the editorial discipline is real. What the observations show is missing is structure: provenance, a time axis, first‑class states for “unknown”, and entity resolution. These are exactly the gaps the design in sections 07 to 11 exists to close.
| Observed, live | What it means | The layer that absorbs it |
|---|---|---|
| A large share of story activities are drafts sitting under published stories | The served API and the MCP see only part of the activity record, and nothing marks a published story as having invisible activity underneath it. This alone plausibly explains much of why the interface’s answers could not be trusted. | Contracts and quarantine (08): the gap becomes a measured reject rate instead of a silence |
| Near‑duplicate name groups across investors and managers | One foundation exists twice, split by a curly versus a straight apostrophe. One manager carries a double space in its name. Another appears with and without its corporate suffix. Each split entity halves its own history. | Blocking, scoring, adjudication (09, 10) |
| No provenance model, anywhere | No source, verified‑by, confidence or correction field exists in any collection. Documents are attached to stories in bulk, and to no investors and no funds. The authors table is empty. | Bronze evidence plus the provenance payload (07, 11) |
| Period date empty on most stories; a handful of allocation snapshots dated years into the future | Most of the record cannot answer “when was this true”, and nothing rejects a date from the future. | Two clocks, plus contract range checks (08) |
| “No AUM” stored as a plain zero on a meaningful share of investors | Zero, unknown and undisclosed are three different facts stored as one value, and the legacy undisclosed sentinel was collapsed into NULL in activity sizes. | First‑class withheld and unknown states (06, 08) |
| LEI empty across the entire investor file | The join graph in section 05 is aspiration, not present state: today the database reaches the outside world by name string only. | Entity resolution against the register (09) |
The point of this case study is not embarrassment; nothing here is unusual for an editorial product that grew a database. The point is that phase A in section 14 does not have to wait for new sources. The cheapest overlapping corpus is usually already in the building: an existing investor list, joined against Form 5500 and Companies House, measures the disagreement rate and the uncertain band on exactly the data users already rely on.
The first layer has exactly one job, and the discipline is in refusing to give it a second. Bronze stores what the source served, unaltered, addressed by the hash of its own content, with the retrieval circumstances recorded alongside it.
No cleaning. No renaming. No dropping of fields we do not currently use. The moment bronze starts improving things, the thing it exists to be, a faithful record of what was published, stops being true, and every downstream claim about provenance becomes an approximation.
Reprocessing is free
Every parsing decision downstream can be revised and replayed against the original evidence, without going back to a source that may no longer serve it.
Disputes are settleable
When a client challenges a figure, the answer is the document, retrieved at a stated time, not a recollection of what a pipeline did.
Sources can disappear
Endpoints are withdrawn and reorganised routinely. What we captured while it was live remains, which is quietly one of the more valuable properties here.
This is the section where the architecture earns or loses its keep. Silver turns raw documents into typed records, and it does so on two independent time axes: when something was true in the world, and when we came to know it.
Those are different, they routinely disagree by months, and collapsing them is the single most common irreversible mistake in financial data engineering. Irreversible because the information is not lost in storage, it is never captured. A system that records only the current value cannot be upgraded later into one that remembers.
Concretely: a holding is reported as of the thirty‑first of March, published in mid May, amended the following February. Ask on the first of June what that position was, and the honest answer is the May figure, because the amendment did not exist yet. A single‑clock store answers with the February number and cannot tell you it has done so.
Transaction time is the period we believed it.
Both are intervals, not instants, and both need to be queryable.
Gold answers two questions that silver deliberately leaves open. Which of these records describe the same institution, and where they disagree, which value do we publish and how sure are we.
Resolution, in three passes
Comparing every record against every other is quadratic and pointless, so the work is staged. Block to reduce candidate pairs using cheap similarity: trigram matching on names, which compares overlapping three‑letter fragments so spelling variants still match, and vector search on embedded descriptions, which compares meaning rather than spelling. Both of these the database can index. Score the surviving pairs with a probabilistic record linkage model that learns field weights from the data rather than from a hand‑written rule set. Adjudicate only the band in the middle, where the score is neither confidently a match nor confidently not.
Most pairs never reach the third pass, which is the point. The expensive judgement is spent where it changes an outcome.
Ranking, by earned authority
When two sources give different answers, the winner is decided by a tiered authority model: a primary regulatory filing outranks a regulatory summary, which outranks an entity registry, which outranks a market feed, which outranks a document a human wrote. The tiers are recorded, applied consistently, and revisable when evidence says they are wrong.
The loser is not deleted. It is published alongside, as a recorded disagreement, because a client who can see that two regulators differ is better served than one handed a clean number that hides it.
There is a version of this kind of product where analysts read filings and type the results into a system. It works, it is how most of this market was built, and it does not scale past the number of analysts you can afford.
There is another version where a model does everything and nobody checks. It scales beautifully and produces a product that cannot be sold to anyone with a compliance function.
The design here is neither. Machines carry the volume and are required to declare when they are unsure. Experts see only the cases that were escalated, and their decisions are captured as labelled examples that make the next round of automation better. The human cost per record falls over time while the quality per record rises, which is the only shape of this kind of business that compounds.
Deterministic rules
Exact identifier matches, published crosswalks, arithmetic checks. Effectively free, no judgement involved, and it should handle the large majority of records.
Probabilistic scoring
Learned field weights over blocked candidate pairs. Cheap, fast, and produces a calibrated score rather than a verdict.
Model adjudication
Only the uncertain band. The model reads the surrounding context, answers in a fixed schema, and reports agreement across repeated samples as its confidence.
Expert decision
What survives all three. A domain specialist decides, the reasoning is recorded, and the case is added to the evaluation set that keeps the tiers below honest.
Everything above exists to make one thing possible: handing a client a figure that holds up when their own analyst goes looking for it.
That is a higher bar than accuracy. An accurate number with no provenance is worth very little to an institution, because the person receiving it cannot put their name on it. A number with the filing behind it, the retrieval time, the competing values and the reason this one won, is something a professional can defend in a meeting. That is the product.
The vocabulary for expressing this is a settled standard rather than something we need to invent: W3C PROV. Entity, activity, agent, and derivation relations between them are enough to state exactly where a value came from and what happened to it on the way.
The document is retrievable
Not a link that may rot, but the bytes as served, with the hash that proves they have not changed since.
The clock is answerable
Both intervals are on the record, so an as‑of question is a query rather than an archaeology project.
The disagreement is visible
The competing value is shown with its tier and the reason it lost, so the client sees the judgement rather than only its result.
A data layer is not a project that finishes. Sources change format without notice, endpoints move, regulators revise schemas, and a pipeline that was correct in March is quietly wrong in September. The operational design matters as much as the schema design.
Four commitments keep it honest, and all four are cheap if they are built in and expensive if they are retrofitted.
Freshness is a measured property, not a hope
Every source has an expected cadence. When a source goes quiet past its window, that is an alert, not something a client discovers. Staleness should be visible on the record itself.
Schema drift is detected on arrival
Contracts at the silver boundary fail loudly when a source changes shape. The alternative is a column that silently becomes null and a number that silently becomes wrong.
Quarantine is watched, not accumulated
Rejected records are only useful if someone looks. A rising reject rate on one source is the earliest possible warning that something upstream has moved.
Every run is replayable
Given the bronze evidence and a version of the transformation code, any past state can be rebuilt. Debugging becomes reproduction rather than speculation.
A paper that only argues one side is a pitch. Here is the strongest honest case against everything above, followed by what it would cost to be right.
Objection one: this is over‑engineered for an early‑stage product
Largely fair. A single table refreshed nightly would answer most questions a first customer asks, and would exist in six weeks rather than six months. The argument for the fuller design rests entirely on the belief that the point‑in‑time and provenance questions arrive and cannot be answered retroactively. If that belief is wrong, the simple version wins.
Objection two: breadth beats depth in a sales conversation
True, and it is the objection we take most seriously. Nobody has ever lost a bake‑off for having insufficiently rigorous lineage. People lose them for missing a region. The answer is not to argue the point but to sequence so that visible coverage and invisible rigour advance together, which is what section 14 does.
Objection three: the hardest data is the data we cannot get
Also true. Some of the most valuable disclosure in this market is closed by statute rather than by paywall, and no architecture opens it. What the design does is stop us spending repeatedly on things that will never work, by recording the closure once and marking it.
Objection four: bitemporal modelling is genuinely harder to work with
Yes. Queries are longer, mistakes are subtler, and someone new to it will write a wrong query confidently in their first week. Mitigations exist, chiefly a small set of reviewed views that handle the common access patterns, but the learning curve is real and should be budgeted.
| Component | Build | Yearly upkeep | What we lose by skipping it |
|---|---|---|---|
| Ingestion and bronze store | 2 to 3 eng months | low | Reprocessing, dispute resolution, resilience to sources disappearing |
| Contracts and quarantine | 1 to 2 eng months | low | Early warning on schema drift; failures become silent instead |
| Bitemporal silver | 3 to 4 eng months | moderate | Point in time answers, honest backtests, defensible history. Not recoverable later |
| Entity resolution | 4 to 6 eng months | high | Cross‑source questions entirely. This is the product |
| Expert adjudication loop | 2 to 3 eng months | ongoing analyst time | Quality ceiling on the hard cases, and the training corpus that compounds |
| Provenance and citation | 1 to 2 eng months | low | The ability to sell to anyone with a compliance function |
| Breadth across the register | continuous | high | Coverage, which is what the first meeting is actually about |
| Full design, before breadth | 13 to 20 eng months | The simple alternative is roughly 2 to 3, which is the honest price of this argument |
The rows are deliberately additive rather than one commitment, because the sequencing in section 14 is designed so that the expensive rows can be declined after the cheap ones have produced evidence. To convert months to money, multiply by a blended fully‑loaded engineering rate; the ratios, not the absolutes, are the signal.
This section is the wish list, in the order we would want it granted. Nothing in it asks for a commitment; each phase is shaped so a team could start small, produce a number, and stop without regret, with every later decision still open.
Run phase A, and agree the number that decides phase B.
- Run: six weeks, one engineer and one analyst, three overlapping sources.
- Agree in advance: the disagreement rate and escalation rate at which the full design is worth building, and the rate at which the simple version wins instead.
- A strawman to react to: commit to the full design if more than 1 in 20 overlapping records disagree on a field users would care about, or more than 5% of entity pairs land in the uncertain band; build the simple version if both come in under half that. Suggested defaults, not findings. Move them before the measurement, not after.
- Decide nothing else up front. Phases B, C and D each come back with evidence attached.
Agreeing the threshold before the measurement is the part that matters. It is the difference between a test and a justification.
Nothing in this paper is invented here. The architecture is assembled from published, battle‑tested prior art, and the failure modes it defends against are documented in the open literature. Canonical links for the individual data sources live on their register rows in section 04.
- Bitemporal history. Fowler, the canonical short treatment; Snodgrass, the free full book; PostgreSQL 19 temporal tables and the SQL:2011 background.
- Entity resolution. Splink and its Fellegi‑Sunter theory guide.
- Layered architecture. the medallion pattern, adopted here for its discipline, not its branding.
- Contracts and validation. Open Data Contract Standard, data contracts in practice, Great Expectations, dbt data tests.
- Provenance and lineage. W3C PROV for the vocabulary, OpenLineage for run‑level lineage.
- History gets rewritten silently. Ljungqvist, Malloy & Marston, Rewriting History, Journal of Finance 2009: 1.6% to 21.7% of matched I/B/E/S recommendation records differed between successive downloads.
- Data quality decides AI outcomes. Sambasivan et al., “Everyone wants to do the model work, not the data work”: Data Cascades, CHI 2021.
- Referenced assertions at scale. Wikidata’s verifiability model, the largest running system built so that every claim can carry its source, statement by statement.
- Openness as a moat. OpenCorporates on provenance, a business built on showing its receipts.
- The regime is moving. Federal Register API for tracking it, including the N‑PORT delays and the 2026 re‑proposal cited in the register.