← comparisons

A yfinance Alternative for Point-in-Time Fundamentals

If you searched "yfinance alternative" for fundamentals, you have probably already hit one of these: ticker.financials returned four columns when you needed twelve years, the numbers changed between two runs, or you tried to backtest a value screen and realised you had no idea when any of those figures became public.

Let us be clear about what this page is and is not. yfinance is excellent and you should keep using it. For prices, it is free, fast, and the default for good reason. Nothing here replaces that. This is about one specific thing it was never built to do.

We build Tradevo Data: point-in-time US equity fundamentals from SEC EDGAR, delivered as one JSON endpoint at $49/mo.

The actual problem, in one line of code

import yfinance as yf
yf.Ticker("PG").financials       # returns whatever Yahoo shows TODAY

There is no column in that frame for when the market learned this. So if you join it to prices by period end, your backtest reads P&G's fiscal-2015 revenue on 2015-06-30 — but that number was not public until 2015-08-07, 38 days later. Every fundamental signal in the test arrives roughly two months early.

That is not a yfinance bug. It is scraping what Yahoo displays, and Yahoo displays current values, because that is what a human looking up a stock wants. The mismatch only appears when you use it for history.

Three things that bite specifically

1. No filing date. Across our full dataset, US fundamentals became public an average of 66 days after the period ended (median 60, 90th percentile 90). A period-end join hands your strategy every number about two months early, on every row.

2. Values change underneath you. Companies restate, and Yahoo shows the current figure. P&G's FY2015 revenue was filed at $76.279B and reads $70.749B today. Same company, same period, 7% apart — and a screen ranking on revenue produces a different portfolio depending on the day you pulled the data. Nothing in the frame tells you a revision happened.

3. Retroactive splits, which are the nastiest. Amazon's FY2020 diluted share count was filed as 510,000,000 and reads 10,198,000,000 today, because the 2022 twenty-for-one split is applied backwards through history. Compute market cap or EPS from the current share count against a 2020 price and you are wrong by exactly 20×. This one survives every careful fix — even if you somehow knew the filing date, the date is right and the number is denominated in shares that did not exist yet.

4. Depth and stability. financials typically gives you about four annual periods, and because the source is a scrape, the shape can change when Yahoo changes their page.

Side-by-side

Tradevo Data yfinance
Price $49/mo Free
Prices / OHLCV Not offered Excellent — keep using it
Fundamentals history Up to 12 fiscal years ~4 annual periods typically
Filing date on each value Yes — first_filed No
Value as originally reported Yes — original_value No (current only)
Restatement flag Yes — 18,717 labelled No
Source SEC EDGAR directly Scraped from Yahoo Finance
Stability Versioned API Depends on Yahoo's page
Coverage 5,202 US companies Global, very broad
Per-row quality flags Yes — qa_status No

When yfinance is the right answer

Keep yfinance if:

When the difference actually costs you

Point-in-time matters exactly when you are asking "would this have worked?" — a factor backtest, an event study, an ML model trained on tabular fundamentals, or a paper you want someone else to reproduce. In all of those, using today's values means training on information that did not exist, and the result is a strategy that looks good in testing and fades in live trading.

If that is you, the fix is mechanical: join on the date the number became public, and use the value as first reported.

# what you could HONESTLY know on a given date
GET /v1/fundamentals?ticker=PG&as_of=2015-07-01&concept=Revenue
# -> FY2014, because FY2015 was not filed until 2015-08-07

Check it yourself before paying anything

The free sample is 40 large caps, 3,280 point-in-time rows, full methodology, CC0, no signup: github.com/christianpichichero-max/pit-fundamentals

Pull the same tickers from yfinance and diff them. The differences you find are the size of the problem for your specific strategy — which is a better reason to buy (or not) than anything on this page.

If it fits, the $49/mo API issues a key instantly and cancels anytime.


Not investment advice. yfinance is an independent open-source project and is not affiliated with us; its behaviour and Yahoo's underlying data can change at any time — verify current behaviour yourself. Tradevo Data figures stated as of August 2026.

See for yourself — free sample, no signup.

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