/methodology

Every number on this site is imperfect in a specific, knowable way. This page is the ledger of those imperfections.

Public Filings republishes primary government records — nothing else. Below, per module: sources and their license conditions, coverage measured against the full corpus, known gaps, and the structural caveats that no amount of engineering removes. Everything here is regenerated fromstats.json on every build and is byte-verifiable against the published snapshot.

M1 — Congressional trading

build 20260914.1 · generated 2026-09-14
Standing caveat: trades are disclosed in statutory dollar ranges, never exact amounts, and may be filed up to 45 days after the trade — sometimes later. A filing is a disclosure event, not a market event.
93.9%
House e-file parse
5562 / 5922 e-filed
100%
Senate e-file parse
1821 / 1821 e-filed
72,010
rows filed since 2014
v_default_transactions
3053
paper filings need OCR
retained, zero rows
177
filer name-pairs unjoined
bioguide_id = null
+28d
median days to file
13,649 late of 71,798

Sources & conditions

House Clerk — PTR disclosures
us-gov-house · public record
Fetched sequentially with a contact UA. Raw PDFs archived; every rendered row links to its page.
Senate eFD
us-gov-senate · agreement-gated
Accessed only through the eFD prohibition agreement handshake; §13107(c) restrictions carried on every derived surface.
congress-legislators
cc0 · member identity
CC0 seed for congressional member IDs, parties, terms. Joins are conservative: unique-candidate only, publicly versioned aliases.
kadoa congress-trading seed
mit-kadoa-seed · backfill
MIT-licensed historical seed, imported under a blocking human audit gate; retired row-by-row as primary filings supersede it.

Known gaps — published, not hidden

· 3,053 paper filings needs OCR — counted in totals labeled *_including_excluded
· 177 filer name-pairs not yet joined to members — the join is name × chamber × term, only on a unique candidate; the alias file is version-controlled and public
· amendments carry amendment pending until amendment semantics are settled — the default view (v_default_transactions) excludes the superseded original, and both readings are queryable
· rows with defect flags are visible and flagged, never dropped

Whose trade is it — owner codes

· Filings under a member include transactions by spouse (SP), dependent children (DC), and joint accounts (JT) — the STOCK Act does not distinguish who directed a trade.
· Amounts are statutory ranges; member totals are therefore ranges too.

M2 — Institutional 13F

in this build · latest period 2026-06-30 · latest filing 2026-07-31
Standing caveat: 13F covers long positions in Section 13(f) securities — no shorts, no cash — as quarter-end snapshots filed up to 45 days late, in era-dependent value units. Only managers over $100M file: it is not a census.
9,451
filers on record
agg_filer_registry
2026-06-30
latest period
newest filing received
25
top-N ranking depth
a Public Filings build parameter

What our 13F derivations do — and refuse to do

· Amendments are typed: a restatement supersedes; new-holdings merges. Originals are kept and marked superseded, never deleted.
· A change with an undisclosed side is n/c — never coerced into add or trim.
· "Exit" is a fact about the filing sequence, not a sale: delisting, confidential treatment, and filer migration all look identical in the record.
· Cross-filer rankings stop at the aggregate's top-N slice, stated in place as a Public Filings build parameter.
· A manager that files its own 13F holdings report keeps its whole book, even when another manager's combination report names it: under the Form 13F instructions a holdings report carries all of that manager's holdings, and a position whose discretion is shared is reported by one manager only. Only a 13F notice — holdings reported entirely by someone else — is left out. Such pairs are marked shared discretion and are not netted against each other.
· Concentration is computed only when the denominator is disclosed; otherwise the stat prints "n/a" with its reason concentration_unavailable.
· Ticker→issuer joins use the SEC's present-day ticker file against entity-keyed issuers only — never a name match, never a guessed identity.

M3 — Company financials PLANNED

As-reported XBRL from EDGAR, for a curated universe. Standing caveat, committed now: as-reported ≠ normalized comparables — restatements and taxonomy drift will be shown as vintages, not silently overwritten. This section fills in when the module ships; its gates are published before its data.

M4 — Macro PLANNED

Treasury curve, CPI, employment, COT positioning from agency sources. Standing caveat, committed now: series are revised— each print carries vintage semantics per series, and BLS-derived responses carry the BLS-required citation and disclaimer verbatim.

Principles — what this site is for

The people's financial data, returned to the people. US financial-disclosure data — congressional trades, institutional holdings — pulled only from primary government sources, republished with its receipts. Others sell this free layer back at $30–200/month; here the public record itself is free forever. Convenience layers (alerts, integrations) may someday be paid — the data never will be.

The differentiator isn't coverage — anyone can scrape these filings. It's that every number here tells you exactly how stale it is, what it excludes, and how it was derived.

The data is free forever
MIT-licensed code, per-source data conditions recorded and honored. Every row links to the government document it came from; every build is verifiable by hash.
Honest about its own gaps
Parse coverage, unjoined names, paper filings awaiting OCR — published on this page, which is a product surface here, not a footer link.
No cookies, no account required
No cookies, no profiles, nothing gated behind sign-up. Watchlists stay in your browser. Page traffic is measured in aggregate and without cookies — the privacy section below names the provider, the fields, and the retention. Also available as an MIT-licensed MCP server for analysts working inside an LLM client.

The published dataset. Every row remains in the published dataset: the congressional feed is served in full as byte-bounded per-year parts, listed with a direct download for each at congress/data, the institutional aggregate as paged files, and the signals as signals.v1.json. A table that shows fewer rows than it holds says so; nothing is withheld from the data.

What happens to a signal that stops matching. Signals are recomputed from scratch on every build over a fixed recent window. A signal keeps the same id and its original first-seen date for as long as it keeps matching. When one stops — the filing was amended, or it fell out of the window — it is kept in signals.v1.json rather than deleted, so a reader comparing two builds sees a departure instead of a silent gap. In the file those entries carry status of superseded and name the build they left in; the page counts them separately and never mixes them into a current total.

Ranges. Congressional amounts are disclosed as statutory ranges, never exact figures; totals over ranges are computed by interval arithmetic — a net range is the purchases interval minus the sales interval, and an open-ended bound propagates as open-ended. "At least $X" is the low end of the disclosed range.

How 13F data is read. Quarter-end positions are disclosed up to 45 days later; they are never current holdings and never a complete portfolio (cash, shorts and non-13(f) assets are absent). Changes are classified from comparable reported positions by share count; a missing position is not proof of a sale, and a value change alone is not a position change.

What counts as one position. A position is one issuer security × put/call × unit as the filer reported it; the producer classifies each change (new · add · trim · exit · no change) from the share delta between consecutive quarters, at that level.

Ticker mapping. A 13F row shows a ticker only where a reviewed, name-and-class keyed mapping row supplies one — verified against the SEC company list on the date the row states. Symbols are never inferred automatically; an unmapped security shows "Ticker not yet mapped".

CUSIP identifiers in disclosure text. Where a filer wrote a CUSIP into the text of a disclosure for a security that already has a reviewed ticker on this site, the published copy replaces that identifier with [CUSIP withheld] and keeps every other word. The marker is deliberately visible: a reader can always tell the published sentence differs from the filing, and the receipt link on the row still opens the unaltered source document. Nothing is withheld from the internal record, and no row is dropped. No disclosure in this build carries the marker.

Site weight. Every page and data file is byte-bounded: no served file exceeds the 1 MiB client-response ceiling for paged data, and the whole site stays under the hosting file-count and per-file caps. A table whose complete set is larger than a page states how many rows it shows and links the full published file.

Publication & verification

Immutable snapshots
Each release is a content-addressed snapshot; the page you are reading names the build it was rendered from.
Signed pointer
A signed pointer names the current release; per-artifact digests let anyone verify a downloaded extract byte-for-byte.
Reproducible builds
Same inputs, same bytes. The pipeline, its test suite, and this site's generator are MIT-licensed.
Raw documents retained
Every parsed filing links to its archived government document; reparses never re-fetch, so the archive is the evidence.
verify this page: populus verify --build 20260914.1

Privacy — the reader is not the product

Public Filings measures page traffic with Cloudflare Web Analytics, and nothing else. It sets no cookie, writes no storage key, and builds no fingerprint or cross-site identifier, and no account is required for anything on this site. What the beacon records is the page URL without its query string, the referrer, a coarse user-agent, a viewport bucket, load timing, and a country derived at the server from the connection. Cloudflare retains unsampled beacon data for 7 days, then aggregates it to roughly 10%; the previous six months remain accessible (Cloudflare Web Analytics FAQ, retrieved 2026-08-15). Free-text search never leaves your device — searches resolve to page paths client-side against an index that ships with the build. Watchlists live in your browser's localStorage and are never transmitted. If Public Filings ever offers paid conveniences (notifications, integrations), the records themselves stay free and ungated — a transparency site that paywalled the public record would contradict this page.

Required notices

Prohibited uses. Use of congressional financial-disclosure reports for commercial purposes, for determining credit, or for solicitation is restricted by 5 U.S.C. § 13107(c). Not financial advice. Public Filings reports disclosures; it recommends nothing. Attribution.Data remain U.S. government records; per-source conditions are recorded in the machine-readable conditions register and rendered inDATA-LICENSE ↗ andNOTICE ↗.