Investigative Journalism: Follow the Money Through the Entity Graph
The campaign denied taking the money. The filings, shell-company records, and ownership chain traced it anyway.
A fictional campaign-finance investigation inspired by documented patterns from closed real cases (Abramoff-era lobbying networks, FEC-disclosed shell-entity donor pathways, and dozens of ProPublica/OpenSecrets reconstructions). All names are invented. The reconstruction pattern is how real journalism works.
This is the investigative journalism showcase — demonstrating that YantrikDB surfaces contradictions not just from direct statement-vs-statement mismatches, but from entity resolution across a graph of ownership and funding.
The setup
Section titled “The setup”Marcus Lanier, a fictional U.S. Senate candidate, is campaigning statewide. At a July 2026 town hall, asked about pharmaceutical campaign funding, he says:
“I have never taken a dollar from anyone connected to the pharmaceutical industry. Never have, never will.”
A reporter spends three months pulling records from public registries. The story: technically, the statement is defensible at every single hop. Collectively, it’s false.
Sources
Section titled “Sources”| Source | Authority | What it contains |
|---|---|---|
public.lanier | Direct statement | The denial |
fec.filings | Federal Election Commission | Itemized contributions to campaign |
fec.pac_disclosures | FEC | The PACs’ own funding sources |
delaware.registry | Delaware Div. of Corporations | LLC ownership chains |
propublica.profile | NAICS + SEC EDGAR | Industry classification |
reporter.bank_records | Source-reporter corroboration | Wire transfer records |
The entity chain the engine reconstructed
Section titled “The entity chain the engine reconstructed”Starting from Lanier_campaign, walking backwards through the claims ledger:
Hop 1 — direct donors: Better_Tomorrow_Action_Fund -> Lanier_campaign [fec.filings] Progressive_Health_Futures_PAC -> Lanier_campaign [fec.filings]
Hop 2 — who funded the donor PACs: Meridian_Public_Affairs_Group -> Better_Tomorrow... [fec.pac_disclosures] Windhaven_Strategies_LLC -> Progressive_Health... [fec.pac_disclosures]
Hop 3 — who owns the funding LLCs: Carrington_Horizon_Holdings owns Meridian_Public_Affairs_Group [delaware.registry] Carrington_Horizon_Holdings owns Windhaven_Strategies_LLC [delaware.registry]
Hop 4 — ultimate beneficial owner: Kellner_Therapeutics_Group owns Carrington_Horizon_Holdings [delaware.registry]
Hop 5 — industry classification: Kellner_Therapeutics_Group is a member of pharma_industry [propublica.profile]Five hops across five independent public registries. Every hop is a structured claim with source attribution. YantrikDB walks the chain in one query.
The contradiction
Section titled “The contradiction”Lanier_campaign --received_funds_from--> pharma_industry (public.lanier) CLAIMS NO (derived from entity chain) CLAIMS YESLanier’s statement is not contradicted by a single opposing assertion — no single source says “Lanier took pharma money.” The contradiction emerges from the composition of five claims across five sources. That’s what makes it an investigative-journalism showcase: the structured lie is only visible if your memory system can walk the entity graph and reason over ownership relations.
The temporal query shows belief changing with the reporting
Section titled “The temporal query shows belief changing with the reporting”Before the town hall (2026-04-01): the public record shows only public.lanier’s denial (which doesn’t exist yet) and the fragments of donations that haven’t been connected. No single source contradicts him. The lie is defensible.
After the reporting (2026-08-01): the entity chain is assembled. The denial and the chain coexist in the ledger. The composition is the story.
Same database. Same claims. The journalistic question “what did the public record show on date X?” has a different answer at different points — because validity windows and source attribution are first-class.
Why couldn’t Postgres + embeddings + a dashboard do this?
Section titled “Why couldn’t Postgres + embeddings + a dashboard do this?”A keyword search or vector database would not find this story. None of the source documents mention each other textually. The Delaware LLC filing does not name Lanier. The FEC Form 3 doesn’t name Kellner Therapeutics. The town hall quote doesn’t name any PAC. The connection is ownership, not linguistic similarity.
A graph database could model the ownership chain — but it has no notion of polarity or validity. It cannot represent Lanier’s “I never took pharma money” (polarity=-1) as a claim that contradicts the derived polarity=+1 fact that follows from the ownership graph.
YantrikDB stores the direct denial and every hop of the entity chain as structured claims with source attribution and polarity. Walking the chain is one query per hop. Surfacing the contradiction at the top is the query result.
That’s the category.
What this unlocks
Section titled “What this unlocks”Any investigation where the contradiction lives in the composition of public records:
- Campaign finance — the scenario above
- Sanctions & beneficial ownership — stated non-exposure vs shell-entity chain evidence
- Supply-chain traceability — vendor certifications vs audit-trail contradictions via subcontractors
- Money-laundering investigations — ledger entries that individually pass but fail together
- Medical ethics — stated independence vs cross-referenced affiliations via foundations and consulting
- Regulatory capture — public lobbying disclosures vs the entity network they connect
Every one of these is an entity-graph problem with contradictions hiding at composition layers. Keyword and vector search miss them. YantrikDB surfaces them.
Run it yourself
Section titled “Run it yourself”git clone https://github.com/yantrikos/yantrikdb-serverpython yantrikdb-server/docs/showcase/journalism_engine.py \ ydb_your_token \ http://your-cluster:7438Requires yantrikdb-server v0.7.2+ and yantrikdb v0.6.1+.
Full script: journalism_engine.py
The denial and the chain, in one database. Follow the money.