Reference

Accuracy and method

Some of our endpoints derive data that no filing states outright. This page says how each one was measured, against how many filings, and what it does not cover. Where there is no defensible number yet, it says that instead of estimating one.

Which endpoints need this page

Most of our endpoints normalize. EDGAR says a company's assets were $364.98 billion, and we hand you $364.98 billion under a consistent key. There is nothing to be accurate about beyond fetching the right filing, and a bug there is a bug, not a rate.

Four endpoints are different. They read prose and return a typed answer the filing never stated in that form. A Schedule 13D says "the Reporting Persons intend to engage with the Board regarding capital allocation." It does not say strategy_operations. We decided that. Once we decide something, you are entitled to know how often we get it right.

Every derived endpoint below carries a method, a measurement, a sample size, and a list of what it misses. Two of the four have a measured number today. One has a benchmark that runs on every change. One has neither yet, and says so.

Schedule 13D activist intent

GET /v1/activism/{cik} types the free-text Item 4 "Purpose of Transaction" into a ten-value taxonomy, with a source quote for each demand it finds.

Method

Two model passes and a deterministic resolver. Pass 1 runs the Anthropic Citations API over the Item 4 text, which returns quotes the API guarantees are exact substrings. Pass 2 runs a typed extraction that produces the categories and stances. A resolver then drops any entry it cannot verify, applies precedence, and picks the single primary category.

The resolver is ordinary code, not a model. It is the part that decides what ships.

What is measured

Not yet measured · 30 Schedule 13D filings, 24 labeled

The held-out sample is 24 of 30 labeled. The 6 blanks are the shortest filings in it (median 49 words against 310.5 for the labeled rows), which makes them the hardest, so a score on the labeled subset would run high by an amount nobody can compute.

Baseline. The bar to beat is a classifier answering passive_investment every time — that would score about 70.8% on the 24 rows labeled so far. Read any figure against it, not against zero.

What it cannot see. Share of operating companies filing contested proxy material in the window that filed no Schedule 13D at all. A floor: campaigns settled before a contested proxy is filed are invisible to the frame too.

Measured over the 70 operating companies that filed contested proxy material between 2025-01-01 and 2026-08-16: 59% filed no Schedule 13D at all. As EDGAR spells them, they include UNITED STATES STEEL CORP, MATTHEWS INTERNATIONAL CORP, Quanterix Corp, ZEVRA THERAPEUTICS, INC., TEJON RANCH CO, NATIONAL HEALTH INVESTORS INC, GENWORTH FINANCIAL INC, DENNY'S Corp.

The deploy gate is a coverage-complete set of hand-labeled filings, scored on the majority of three runs. It is not an accuracy estimate, and we will not quote it as one. Its filings are the ones that shaped the classifier, and scoring a model against the examples used to fix it measures fit rather than skill.

Two more things to hold against any figure we eventually print. Model output at temperature 0 is greedy, not repeatable — across the gate filings, one changed its own answer between repeat runs. And categories[] completeness has no measurement at all. Every entry in it is checked against the filing text, so what is there is real. Whether anything is missing is unknown. Do not read an array of one as proof the filing made one demand.

What this endpoint cannot see

A Schedule 13D is only owed above 5% ownership. Below that, an investor can build a stake, publish demands, run a full board slate, and threaten litigation without ever filing one. The figure above is the measured cost of that.

So: this endpoint reports activist intent as disclosed in a structured Schedule 13D Item 4. It is not activism coverage, and we will not describe it as such. Combining it with contested proxy filings would close most of the gap, and that work is not built.

Two narrower limits. Only filings from December 2024 onward carry a tagged Item 4 block, so earlier filings return category: null with reason: "not_structured". And an amendment that does not restate Item 4 returns the same thing.

What the source quote proves

Every quote we return is checked to be a verbatim substring of the filing's Item 4 text. That check is deterministic code, and an entry that fails it is dropped rather than repaired. You can paste any quote into the filing and find it.

It proves less than it might appear. The quote is not required to come from the independent Pass 1 citation set, so it shows the words appear in the filing rather than that a separate pass picked them as the evidence. Watch quality.droppedEntries and quality.modelDisagreed for records worth a second look.

DEF 14A executive compensation

GET /v1/edgar/forms/def14a/compensation/{cik} extracts incentive plan design from a proxy statement: metrics, weights, payout ranges, and vesting.

Method

A deterministic section finder locates the Compensation Discussion and Analysis, then the same two-pass split as above. Pass 1 produces grounded quotes through the Citations API. Pass 2 produces the typed structure. A verifier snaps any drifted quote back onto a real one.

The split exists because one call cannot do both. Ask a model for structured JSON and its quotes drift into paraphrase, which is fatal when the quote is the evidence. Ask for citations and you get exact quotes with no structure.

What is measured

Measured 2026-08-31 · 5 proxy statements · claude-haiku-4-5-20251001

FilingField accuracySource fidelity
DPZ96.2%100%
AAPL100%100%
JPM94.1%100%
COST100%100%

DHR returned schema-invalid output on this run and is excluded from the range. Pass 2 does not run under a strict grammar, so the model can omit a required field. The same input can succeed on the next call.

Field accuracy is the share of extracted fields matching the hand-checked answer. Source fidelity is the share of quotes that are exact substrings of the proxy.

Read the range, not an average. A handful of filings is enough to show the method works and nowhere near enough to support a headline rate.

10-K and 10-Q section extraction

The /sections routes split an annual or quarterly report into its numbered items.

No model is involved. This is a parser, so it either finds a boundary or it does not, and the same filing gives the same answer every time.

Benchmarked against hand-reviewed section boundaries across filings chosen for their difficulty: Berkshire Hathaway, Citigroup, JPMorgan Chase, Duke Energy, Progressive, Tesla, Danaher, and Apple.

Measured 2026-09-04 · 9 filings

MeasureResult
Items found190 of 190
False positives0
Content checks passed36 of 36

Content checks confirm the extracted text actually belongs to the item, which catches a boundary that lands in the right place and returns the wrong section.

The benchmark runs on every parser change. A filing that breaks it does not ship.

Alignment Scorecard

GET /v1/alignment/{cik} composes three inputs into a 0-100 score for how well management incentives line up with shareholders.

This one is a published formula rather than a prediction, so accuracy is the wrong question to ask of it. The right question is whether you can reproduce the arithmetic, and the answer is that you can.

Published 2026-09-04 · method version 0.2.0

Sub-scoreWeightBuilt from
Incentive quality0.4DEF 14A pay design
Skin in the game0.35Form 4 insider transactions
Smart-money conviction0.2513F institutional holdings

Weighted mean of whatever sub-scores are available, renormalized by the weights that contributed. A company with no recent proxy is scored on the other two rather than penalized to zero. With no input available the score is null, never 0.

CompositeBand
0-39Misaligned
40-59Mixed
60-79Aligned
80-100Strongly aligned

The score inherits the limits of its inputs. The incentive-quality half rests on the DEF 14A extraction above, so whatever floor that section reports is a floor here too. Every response carries its methodVersion, and a change to the weights or the bands changes that version.

How to read these numbers

Three habits will keep you from over-reading anything on this page, ours included.

Check the sample size before the percentage. At 5 filings, one debatable call moves the figure by 20 points. At 13, a 12-of-13 result is consistent with a true rate anywhere from about 67% to 99%. Small samples produce confident-looking numbers that mean very little.

Compare against the base rate, not against zero. When one label dominates a set, a classifier that always guesses it already scores high without reading anything. An accuracy figure a few points above that bar is close to worthless, and one below it is worse than useless. Every section above prints its base rate beside its result so the comparison is available.

Treat a benchmark and an estimate as different claims. The section-extraction result is a regression fence — it says those boundaries still resolve, and says nothing about the next filing. A held-out sample is an estimate of future performance. Only the second kind generalizes, and each section above says which one it is.

Corrections

If an endpoint returns something you can show is wrong, send us the accession number and what you expected. Filings are public and immutable, so a disagreement is always checkable against the source.

Errors we confirm are fixed, and the measurement is re-run and updated here. This page is versioned with the site, so its history is the record of what we knew and when.