Coverage & Limitations
Universe
Roughly 32,000 US-listed mutual funds and ETFs, keyed by bare ticker (code, e.g. SPY).
Each fund carries reference metadata: name, country, exchange, currency, type, isin,
and its available return-date range (min_return_date / max_return_date).
History depth
History extends back to each fund's inception — there's no fixed start date. min_return_date
tells you how far back a given fund goes; return_earliest_available gives its since-inception
annualized return.
Survivorship-bias-free
Delisted and closed funds are kept, with their full historical returns intact — they're never
dropped from the dataset. Inactive funds are marked is_inactive = true with an inactive_date.
This means backtests and historical comparisons include funds that no longer trade, so results
aren't skewed by only looking at today's survivors.
What's covered
- Trailing total returns for 16 periods:
1d,1w,1m,3m,6m,ytd,1y,2y,3y,4y,5y,7y,10y,15y,20y, and since-inception (earliest_available). - Calendar-year total returns, one per fund per year, back to inception.
- Fund reference data for search and lookup.
What's not covered
To set expectations up front, the API is fund-level returns only. It does not provide:
- Individual equities, bonds, or other non-fund securities — mutual funds and ETFs only.
- Non-US funds — the universe is US-listed. (
marketis accepted on requests but is informational today; all codes resolve as US tickers.) - Intraday or real-time prices — returns are computed from end-of-day pricing.
- Raw price series / NAV history — you get computed returns, not the underlying daily prices.
- Holdings, expense ratios, AUM, fund flows, or other fundamentals — performance returns only.
- Arbitrary date-range series — endpoints are point lookups (latest, a specific
as_ofdate, or a specific calendaryear), not a from/to time series. One fund has far too many daily rows to page a full range through the API; for full history in bulk, use the Snowflake Marketplace dataset.
Freshness
Data is refreshed on trading days — incremental updates five days a week and full rebuilds twice a week. See Freshness & updates for the exact schedule.