How it works
Everything here comes from EDGAR. Most of the engineering is not in fetching it — it is in knowing when the thing you fetched is not what you asked for.
A ticker becomes a CIK through EDGAR's own index — which is keyed by array position rather than by ticker, and hands CIKs back as integers that need zero-padding to ten digits before anything downstream will accept them. A ticker with no filer behind it is refused before anything is charged.
A company's full XBRL fact set is 3.8 MB for Apple and 7.9 MB for JPMorgan. One concept is about 18 KB. Filings Desk asks for concepts, never the whole set, and requests are spaced to the SEC's fair-access rate — EDGAR publishes no throttle header and returns no 429, so the only safe assumption is that its limit is real and silent.
A 10-K runs to 220,000–1,400,000 characters. Two of them will not fit in any prompt worth paying for, so the section is located and extracted first, by the widest-gap rule — and then checked to make sure it reads like the section it claims to be.
Paragraphs are matched by similarity and sorted into added, removed and reworded. Only after that does a language model see anything, and what it sees is the comparison's output — never the filings. It can describe what was found; it cannot invent what was not.
The widest-gap rule
Search a 10-K for “Item 1A. Risk Factors” and the first hit is almost always the table of contents. Take the last hit instead and you get nothing on a filing like Crocs’, which contains twelve of them and whose final one falls after its final Item 1B.
So neither end works. What works is the gap: for every “Item 1B. Unresolved Staff Comments” heading, take the last “Item 1A” before it, and keep whichever pair is furthest apart. The contents-page pair spans a few characters; the real one spans forty to a hundred and fifty thousand.
Two details are load-bearing. Non-breaking spaces and zero-width characters sit inside the heading in most filings’ HTML and have to be stripped before matching, or nothing matches at all. And filings before 2005 have no Item 1B, so the section is bounded by Item 2 instead.
Locating the section is not the same as having it. The extracted text has to be long enough to be a section and has to read like one before it is compared. Three ways that check fires, all of them real:
In every one of those cases you get the reason, and you are not charged.
Matching
Filings are re-paginated, re-ordered and re-numbered every year. Compare paragraph four with paragraph four and one insertion at the top makes everything below it look rewritten. So each paragraph becomes a set of word bigrams and is matched to its closest counterpart wherever that counterpart ended up.
≥ 0.985
unchanged
≥ 0.55
the same paragraph, reworded
no match
added, or removed
Tags
XBRL has no single tag for most concepts, and the wrong choice fails silently. Apple carries Revenues — with no data after FY2018 — alongside the tag it actually uses. JPMorgan carries the first and not the second. A priority list that stops at the first tag returning data reports seven-year-old revenue for Apple as current.
So every candidate is queried, the one with the most recent annual coverage wins, and the tag that answered is named in the response along with the ones that were tried. You can check the choice yourself.
What this is not
Filings Desk reports what a company filed and how the language changed. It is not investment advice and it is not a recommendation.
There is no score, no rating and no outlook anywhere in this product, and there never will be. EDGAR holds filings, not quotes — so there is no price data here either. What you get is what a company wrote, and how the writing moved.