ETFs market data API

Real-time quotes, trades and historical bars for exchange-traded funds over REST and WebSocket, addressed by generic code or by listing ticker.

Funds by exposure or by ticker

More than 5,000 funds. Generic codes say what you are holding, and listing tickers resolve as well. GET /etfs/symbols returns every code with its name.

  • US500ETFUS 500
  • US100ETFUS growth 100
  • US30ETFUS 30
  • WORLDETFGlobal blend
  • EMETFEmerging markets
  • EUROPEETFEurope region
  • USTECHUS technology sector
  • USENERGYUS energy sector
  • USSMALLUS small-cap
  • USGOLDGold
  • USBONDUS core bond market
  • USTBILLUS Treasury bills 0-3 month

Feed capabilities

Endpoints and channels available in the ETFs feed. Field-level details vary by endpoint; see the docs for nullability and optional fields.

Quotes and tradesBid and ask via /etfs/quote and the latest print via /etfs/trade/last, with etfs.quotes and etfs.trades for streaming.
OHLCV aggregatesMinute, hourly and daily bars with volume via /etfs/agg, and closed bars pushed live on etfs.agg.
Extended hours spreadAdd spread: "full" to see US after-hours books wider than 0.5% of the mid. The default stream stays as it is.
Symbols endpoint/etfs/symbols returns every code and its name, so you can resolve a watchlist before you connect.

Inside the ETFs feed

Field for field, the exact responses the API returns. What you see here is what production sends.

Latest quote

Best bid and ask with sizes from the aggregation layer, one call per ETF symbol.

  • Top-of-book bid and ask with sizes
  • Millisecond timestamps on every response
  • Generic codes such as US500ETF, or the listing ticker
  • Identical shape across every asset class
GET/etfs/quote/:symbol
{
  "symbol": "US500ETF",
  "bid": 718.65997,
  "ask": 718.65997,
  "bid_size": 90,
  "ask_size": 40,
  "timestamp": 1777555800000
}
GET/etfs/quote/:symbolLatest consolidated bid and askDocs
GET/etfs/trade/last/:symbolLast trade price and sizeDocs
GET/etfs/snapshot/:symbolQuote, last trade, prev close, and change in one responseDocs
GET/etfs/agg/:symbol/prevMost recent settled daily barDocs
GET/etfs/agg/:symbol/:multiplier/:timespan/:from/:toHistorical OHLCV range with paginationDocs
GET/etfs/symbolsSymbol discovery for the feedDocs
WSetfs.quotes · etfs.tradesStreaming quotes and trades by subscriptionDocs

Benchmarked against a selected market reference.

National best bid and offer from a consolidated US market reference.

Measured Sep 10, 2026, 13:45 to 14:06 UTC, one sample per second.

See the full ETFs benchmark

91.5%

Within 1 bp of the NBBO midpoint

90.1%

Quote ranges overlap

363 ms

Source to platform p95

Typical use cases

Use ETFs alongside stocks, indices, forex and other feeds with the same REST and WebSocket patterns.

Fund pages and charts

Intraday and daily bars with volume for fund charts, with a snapshot for the first paint.

Portfolio dashboards

Value ETF holdings next to stocks on one socket, with the same field names on both.

Spread and price alerts

Watch bid and ask on etfs.quotes to see what a round trip costs, and alert on price moves.

Sector and asset allocation research

Compare sector, region, bond and gold funds with one historical bar shape for all of them.

Delayed price, chart and key figures for popular symbols, with the exact API calls that return them live.

ETFs plans

Two self-service plans with hosted checkout, billed monthly or yearly. Yearly billing takes 20% off, and you can add other feeds to the same key at any time.

Individual

$59/ month

or $566 a year, 20% off

Internal use: research, testing and trading for your own account.

  • 250K API calls / month per feed
  • 10 requests / second REST rate limit
  • 1 WebSocket connection per feed
  • 10 WebSocket symbols per feed
  • Historical OHLCV bars, 1 minute to 1 day
  • Use in ChatGPT and Claude, no extra fee
  • Internal use only, not shown to other people
  • Standard support by email and chat
  • US-listed ETF quotes & OHLCV
Choose Individual

Business

Commercial use

$549/ month

or $5,270 a year, 20% off

Commercial use: inside your product, shown to your own users.

  • 25M API calls / month per feed
  • 100 requests / second REST rate limit
  • 10 WebSocket connections per feed
  • Unlimited WebSocket symbols
  • Historical OHLCV bars, 1 minute to 1 day
  • Use in ChatGPT and Claude, no extra fee
  • Commercial use, shown to your users in your product
  • Business support and guided onboarding
  • US-listed ETF quotes & OHLCV
Choose Business

Enterprise

Need more than a plan covers?

Redistribution and derived-data rights, custom symbols and markets, higher limits, a contractual SLA and a shared Slack channel, arranged directly with our team.

  • Redistribution rights
  • Custom symbols and markets
  • Slack support and SLA

Frequently asked questions

Talk to the team

Ask about coverage, limits, or the right plan for your use case.

What does the ETFs market data API return?

The market prices of exchange-traded funds as JSON: bid and ask, the last trade, snapshots with change metrics, and OHLCV bars. The same data streams over WebSocket on etfs.quotes and etfs.trades, with closed bars on etfs.agg.

How do I find an ETF symbol?

Two naming styles work side by side: generic codes that describe the exposure, such as US500ETF or USGOLD, and the listing ticker of the fund. GET /etfs/symbols returns every code with its name, and the symbol coverage checker resolves a whole watchlist.

Does the feed include NAV or holdings?

No. This is market data for the fund as a traded security. NAV, the intraday indicative value and holdings files are fund data, and they come from each fund.

What happens to ETF quotes outside US regular hours?

Outside 09:30 to 16:00 ET a US ETF quote is published while its spread stays within 0.5% of the mid. Send "spread": "full" on etfs.quotes, or ?spread=full on /etfs/quote, and the wider books arrive too.

Are these official exchange prices?

ETF prices on TickerLayer are indicative, derived market data, not official exchange data, and they may differ from official prices. Observed behaviour is published on the ETF data quality page.

Are ETFs and indices the same feed?

No. They are two feeds with their own prices and plans, on the same API key. An ETF is a traded fund with quotes and trades of its own; an index is a calculated level. See the indices market data page for the other feed.

Ready to integrate?

Create an account, explore the docs, and connect via REST or WebSocket in minutes.