Data Provenance for AI: The Anti-Hallucination Contract
Provenance means every number an agent states carries a link to its primary source. The contract, the response schema, and the enforcement rules.

The short version
Data provenance means every datapoint an AI system touches carries a machine-readable record of its origin: the source document, the entity that reported it, and when it was filed and retrieved. For financial data the gold standard is a link to the primary SEC filing itself, identified by its EDGAR accession number. An agent that follows one rule, "no citation, no claim," becomes structurally unable to hallucinate a number, because every figure it states traces to a document a human can open. This article covers what that contract looks like in practice and how to enforce it.
What data provenance actually means
Provenance answers three questions about any datapoint: where did it come from, when was it observed, and what happened to it between the source and the value in front of you. Most data pipelines destroy those answers at ingestion. A vendor parses a filing, normalizes it, merges it with other feeds, and ships a clean number under a footer that says "sourced from public filings." That footer is provenance theater. It is unfalsifiable, because you cannot get from any specific number back to any specific document.
US securities filings make real provenance unusually tractable, because the primary source is public and permanently addressable. Every document filed with the SEC receives an accession number, a unique identifier shaped like 0001067983-26-000012: the filer's CIK, a two-digit year, and a sequence number. That one string locates the exact filing on EDGAR forever. A holdings row that carries its accession number is not "data from a vendor." It is a claim with a primary document stapled to it.
The bar is per datapoint, not per dataset. Arkolith's Q1 2026 13F dataset covers 1,824 institutional filers and 1.87 million long positions representing $53.7 trillion in reported value, and each position row resolves back to the accession number of the filing it was parsed from. The same applies to the 51,000+ insider transactions tracked from Form 4 filings. When an agent pulls a number, the receipt arrives in the same payload.

The anti-hallucination contract
A language model has no internal gate that distinguishes a remembered fact from a plausible invention. Ask one for "Berkshire's largest holding last quarter" and it will produce a confident, well-formatted answer whether or not it knows. Prompting "do not make things up" barely helps, because the failure is architectural: the model is a text generator, not a database. We covered the model-side failure modes in How to Stop Your AI from Hallucinating Numbers; this article is about the data-layer half of the fix.
The contract has three clauses, split between the data layer and the agent:
- The data layer returns the source with every value. Not a dataset-level disclaimer: a per-row accession number, filer CIK, report period, filing date, and a URL to the document.
- The agent only states numbers it fetched, and cites them. Training-data recall is treated as untrusted by default. If a figure did not arrive through a tool call, it does not appear in the answer.
- "Not in the data" is a valid answer. The agent reports absence instead of filling gaps. An honest "no filing covers that period" beats a fluent guess every time.
Clause one is why provenance has to be a property of the API, not a property of the prompt. Arkolith serves the same provenance fields through both the MCP server and the REST API (the tradeoffs between the two transports are covered in MCP vs REST API), so the contract holds whether your agent speaks tools natively or you are wiring HTTP calls by hand.
What a provenance-carrying response looks like
Strip the idea down to its schema and it is small. These are the fields that matter:
| Field | Example | What it tells the agent |
|---|---|---|
sourceForm |
13F-HR |
Which disclosure regime the number lives under |
accessionNumber |
0001067983-26-000012 |
The exact filing on EDGAR |
cik |
0001067983 |
The SEC's permanent identifier for the filer |
periodOfReport |
2026-03-31 |
The date the snapshot describes |
filedAt |
2026-05-15 |
When the public actually learned it |
sourceUrl |
https://www.sec.gov/... |
One click from value to document |
The split between periodOfReport and filedAt is not bureaucratic detail. A 13F is due 45 days after quarter end, so a position dated March 31 may only have become public in mid-May. An agent that conflates the two will describe stale positioning as current. Carrying both dates in every payload makes the lag impossible to ignore.
Fetching a sourced view of a real portfolio is one call:
curl -H "Authorization: Bearer YOUR_KEY" "https://arkolith.com/api/v1/funds/0001067983/holdings"
That CIK is Berkshire Hathaway's 13F filer (the human-readable version lives at /fund/warren-buffett-fund). Every position in the response carries its filing reference, so the agent's downstream answer can read "per the 13F-HR for the period ended 2026-03-31, accession number attached" instead of "Berkshire reportedly holds." Field-level details for every endpoint are in the API docs.
How an agent should actually use provenance
Provenance only pays off if the agent's loop enforces it. The working pattern has four steps.
Resolve the entity first. Names are ambiguous; identifiers are not. Start from search to pin down the CIK or ticker before fetching anything:
curl -H "Authorization: Bearer YOUR_KEY" "https://arkolith.com/api/v1/search?q=berkshire"
Fetch at answer time, never from memory. Even when the model "knows" the answer, the tool call is what upgrades it from plausible to sourced, and it picks up amendments the training data never saw.
Cite in the final answer. A grounded agent's output names the value, the report period, and the filing reference. This is cheap to enforce: a system-prompt rule plus a post-hoc check that every numeric claim in the answer maps to a fetched row.
Make verification one click. Because the citation is an accession number, a human reviewer (or a second, adversarial agent) can open the source document on EDGAR and read the original line item. Verification stops being an act of faith in the pipeline.
Two judgment rules complete the loop. When filings disagree, the later-filed amendment supersedes the original. When periodOfReport is months old, the agent says so explicitly rather than presenting the snapshot as live. And when the question asks for something the dataset cannot answer (intraday moves, short books), the agent declines instead of improvising.
The same trail backs the human surfaces: the institutional-ownership view on a page like /stock/NVDA renders from the same sourced rows the API serves, so what your agent cites and what an analyst eyeballs never diverge. To wire this into Claude or any other MCP-capable agent, start with the quickstart.
Provenance tells you who said it, not that it is true
It is worth being blunt about the limits. Provenance authenticates the chain of custody: this value came from this document, filed by this entity, on this date. It does not certify that the filer reported correctly. SEC filings are self-reported, and academic work on 13F data has generally found that errors, omissions, and inconsistencies occur at a nonzero rate. How Accurate Is 13F Data? walks through the failure modes that matter in practice.
The disclosure regimes also differ in scope and speed, and an agent reasoning about freshness needs the deadlines in hand:
| Form | What it discloses | Deadline |
|---|---|---|
| Form 4 | Insider trades | 2 business days after the trade |
| Schedule 13D | Large activist ownership stakes | 5 business days |
| Form 3 | Initial insider ownership | 10 days after becoming an insider |
| Form 13F | Long US equity positions of $100M+ managers | 45 days after quarter end |
| Form 5 | Year-end catch-up insider report | 45 days after fiscal year end |
For 2026 the quarterly 13F deadlines fall on Feb 17, May 15, Aug 14, and Nov 16 (the full calendar is in 13F Filing Deadlines 2026, and the SEC's own 13F FAQ covers the rule mechanics). 13Fs omit short positions and most derivatives entirely. None of this weakens the case for provenance. It strengthens it: only when each number carries its form type and both of its dates can an agent reason correctly about what that number can and cannot support.

Frequently asked questions about data provenance for AI
What is data provenance in AI?
Provenance is the per-datapoint record of origin: which source document a value came from, who reported it, when it was filed, and when it was retrieved. In an AI context it is what lets an agent cite its claims and lets a human verify them. Without it, every number an agent states is an unfalsifiable assertion.
How does provenance reduce AI hallucinations?
It changes the agent's job from recalling numbers to fetching and citing them. If the agent only states values that arrived through a tool call with a source attached, it cannot invent a figure without breaking an enforceable rule. Hallucination becomes a detectable contract violation instead of a silent failure.
What is an SEC accession number?
It is the unique identifier EDGAR assigns to every filing, formatted as the filer's CIK, a two-digit year, and a sequence number (for example 0001067983-26-000012). It permanently locates one specific document on EDGAR. That permanence is what makes it the right citation target for financial datapoints.
Does provenance mean the data is accurate?
No. Provenance proves where a number came from, not that the filer reported it correctly. Filings are self-reported, arrive with regulatory lag, and are sometimes amended after the fact. Treat provenance as the precondition for verification, not a substitute for it.
This article explains public filings and data concepts. It is not investment advice.
Keep reading

How AI Agents Cite Sources: Auditable AI Citations
Auditable agent answers need structured citations: accession-level source links, filing dates, and UI receipts. The schema and the enforcement rules.

Why LLMs Get Stock Data Wrong: A Failure Taxonomy
Training cutoffs, ticker collisions, merged share classes, and invented numbers: the four ways language models botch stock data, and what fixes each.
Build a 13F Tracker with AI: Raw EDGAR vs a Clean API
An honest build-vs-buy tutorial: what parsing raw EDGAR 13F filings yourself really costs, versus pointing your AI agent at a clean, provenance-tracked API.