← comparisons

A Finnhub Alternative for Point-in-Time Fundamentals

If you are weighing Finnhub against something else for point-in-time fundamentals, the useful question is narrower than "which API is better." Finnhub is a broad, well-documented vendor — its Swagger spec at finnhub.io/static/swagger.json lists 116 paths behind a single API key, with official Python, Go and JavaScript clients. On surface area it does far more than Tradevo Data does. The narrow question is whether the fundamentals it returns are vintaged — whether you can ask "what did the market know on 2021-06-30?" and get an answer excluding everything filed afterward and everything revised since. This page is written by a competitor, so we will be specific about where Finnhub wins, and name our own limits before you find them.

A filing date is not point-in-time

A filing-date field tells you when a number first became public. Necessary, not sufficient. If a vendor stores one mutable value per fiscal period next to that date, the date describes the original filing while the number beside it may have been revised years later. The row looks point-in-time. It is a current value wearing a historical timestamp.

Two cases, both checked against SEC's companyconcept API:

Any backtest reading the second number while trusting the first date is using information from the future.

What Finnhub actually provides — read from its own docs

We have not exercised their API with a live key. Everything below comes from their docs, Swagger spec and pricing page as of August 2026 — a starting point for your own verification, not a test result.

Their as-reported endpoint carries real SEC provenance. /stock/financials-reported returns, per filing, accessNumber (the SEC accession), cik, year, quarter, form (e.g. 10-K), startDate, endDate, filedDate and acceptedDate — timed to the second in their sample. You can pull a single filing by accession number, and values sit in a report object split into bs, cf and ic maps keyed by the issuer's own XBRL tags. That is genuine provenance, and their pricing table shows it on the free tier.

But point-in-time is not a product feature there. The strings "point-in-time," "as-of," "restated" and "vintage" appear zero times in that Swagger spec, and no fundamentals endpoint takes an as_of parameter. The from and to parameters on financials-reported are both documented as "Filter for endDate" — period end, not filing date — so the "what was knowable on date X" query is not expressible; you pull history and filter on filedDate yourself. Their standardized /stock/financials sample response documents line items plus period and year: no filing date, no accession, no amendment flag.

Two things we could not verify and will not assert either way: whether financials-reported returns amended filings (10-K/A) as additional records for the same period — structurally possible via form plus accessNumber, but never documented, and an amend boolean appears only on their filings-search objects, not on financials data — and whether /stock/financials overwrites historical values when a restatement lands. Those answers decide whether original-versus-restated is reconstructable at all, so ask their sales team or test against a restatement you know. Same for as-reported history depth: their docs say "30+ years" for standardized statements and publish no figure for as-reported.

Side by side

Finnhub Tradevo Data
Point-in-time query No as_of; from/to filter endDate Server-side as_of; only rows where first_filed <= as_of
Original vs current value Not documented either way original_value and latest_value on every row
Restatement labeling No restated or amend field on financials objects restated flag; 18,712 labelled
Concept breadth Standardized and as-reported statements 7 concepts
Periodicity Annual, quarterly, plus TTM and YTD Annual 10-K/10-K-A only
Geography Coverage row reads US on Free, Global on All-In-One; as-reported scope not stated separately US only
Pricing shape Free tier plus paid plans; figures render at runtime — read their pricing page $49/mo flat, 5,000 req/day, cancel anytime

When Finnhub is the better choice

Often. Pick Finnhub if any of this describes you:

Three structural terms to read first, quoted from their own materials. Their signup form asks you to confirm you are "either a qualified non-professional (personal use) under our terms or a commercial/professional user with our written approval." Their FAQ answers "Do I get to keep the data after the subscription ended?" with "No, you must delete all of our proprietary data at the end of your subscription" — the subscribe confirmation extends that to "derived data" and states no refunds, worth thinking through if you store computed features. And their Fundamental-1 and Fundamental-2 plan tables carry an Access row reading "1 market per subscription," so global coverage multiplies the bill. Prices render at runtime, so read current figures off finnhub.io/pricing rather than trusting any number quoted anywhere, including here.

Our limits, stated first

When we are the better choice

When lookahead bias is what would invalidate your work. One request — ?ticker=AAPL&as_of=2021-06-30 — does the vintage join server-side, and every row carries first_filed, original_value, latest_value, a restated flag and qa_status.

Judge it without paying: the CC0 sample is 40 large caps, 3,280 rows, no signup, at github.com/christianpichichero-max/pit-fundamentals. Check original_value against a restatement you already know.

If breadth is what you need, use Finnhub. If vintaged core fundamentals are what you need, that is what we built.


Not investment advice. Finnhub's features, pricing and terms change — verify on their docs and pricing page before deciding.

See for yourself — free sample, no signup.

40 large caps, 3,280 point-in-time rows, full methodology.