Stock Quotes API
Access historical end-of-day (EOD) stock prices, intraday 1-minute OHLCV bars, live-merged daily data, and a single-row latest-price snapshot through one API endpoint — where most providers require three or more separate endpoints and manual data stitching. The daily mode automatically injects the latest live trading bar into your historical series during market hours, eliminating the glue code other APIs force you to write, while mode=snapshot gives you the current price for a ticker in one lightweight call. Query one or many tickers at once — multi-ticker responses return a dictionary keyed by ticker, each with isolated metadata and data blocks, not a mixed flat array. The API is free to use.
Four data modes in one endpoint:
https://data.businessquant.com/quotes?ticker={ticker}&mode={mode}&api_key={api_key}
Related endpoints: Use the Stock Screener API to build a filtered universe, then pull price history here. Pair with the Financial Statements API for fundamental + price analysis. Add the Dividends API for yield-adjusted returns.
Stock Price API Capabilities
Most stock price APIs split EOD, intraday, live, and latest-price data across separate endpoints — often three or more. This endpoint unifies all four behind a single mode parameter — daily, eod, and minute-bars return the same clean OHLCV structure regardless of resolution, paginated and filterable by date, while snapshot returns a single current-price row per ticker for dashboards that don't need a series.
Historical EOD Prices
Clean, historical end-of-day OHLCV data spanning multiple years — suitable for backtesting trading rules, factor strategies, and historical performance analysis across long time horizons.
Intraday 1-Minute Bars
High-resolution intraday price series at 1-minute intervals via mode=minute-bars. Use for intraday strategy development, event-driven analysis, and session-level monitoring.
Smart Daily Mode
mode=daily returns historical EOD data and, during active market hours, automatically appends the latest live bar at the top — one endpoint for both historical and current-day data.
Multi-Ticker Support
Request multiple tickers in a single call with ticker=AAPL,MSFT. The response is a dictionary keyed by ticker — each with its own isolated metadata and data blocks — instead of a mixed flat array.
Flexible Time Filters
Use relative period strings (1d, 1mo, 1y) or explicit from_date/till_date in YYYY-MM-DD format to define the historical window for any resolution mode.
Robust Pagination
Every response's metadata.pagination object includes current_page, limit, total_records, and total_pages so you can reliably iterate through large historical price series.
Latest Price Snapshot
mode=snapshot returns exactly one current-price row per ticker — whichever is newer between the latest settled EOD close and the latest intraday tick. Lighter than daily for tickers, watchlists, and portfolio widgets that only need "the price right now."
EOD, Daily, Intraday & Snapshot Data Modes
The mode parameter controls the resolution and live-data behavior of the response. daily, eod, and minute-bars use the same endpoint URL and return the same OHLCV field structure — no need to learn separate APIs or parse different response schemas. snapshot trades that series structure for a single flat row per ticker, optimized for "what's the price right now" lookups.
1. Request Parameters
The Quotes endpoint uses URL query parameters to define the target securities, the data resolution (EOD vs intraday vs snapshot), and the historical horizon. Query one or many tickers, choose between smart daily, strictly historical EOD closes, intraday 1-minute bars, or a latest-price snapshot, and control how much history you retrieve using period or explicit from_date/till_date bounds — note that period, dates, page, and limit are all ignored in snapshot mode, since it always returns a single current row per ticker.
| Parameter | Description |
|---|---|
| api_key |
Required
Your unique API key for authentication.
|
| ticker |
Required
String
A single stock ticker or a comma-separated list of tickers for a multi-ticker request.
Single:
ticker=AAPLMulti:
ticker=AAPL,MSFT |
| mode |
Optional
Data resolution and live-data behavior. Valid values: daily (default — historical EOD + live merge), eod (strictly historical closes only), minute-bars (intraday 1-minute OHLCV bars), snapshot (single latest-price row per ticker — ignores period/dates/page/limit).
Default:
mode=daily |
| period |
Conditional
Relative lookback from today. Determinants: d (days), w (weeks), mo (months), y (years). Use this or explicit dates — not both.
Examples:
period=1mo · period=1y · period=5y |
| from_date |
Conditional
Start date for an explicit historical range. Use with till_date; cannot be combined with period.
Format:
from_date=2020-01-01 |
| till_date |
Conditional
End date for an explicit historical range. Use with from_date; cannot be combined with period.
Format:
till_date=2023-12-31 |
| page |
Optional
Page number for paginating through large historical series. Default is 1.
Format:
page=1 |
| limit |
Optional
Maximum records per page. Use with page to iterate through long price histories.
Format:
limit=100 |
curl -X GET "https://data.businessquant.com/quotes?ticker=AAPL&mode=daily&period=1mo&limit=100&api_key=YOUR_API_KEY"
{
"metadata": {
"cik": 320193,
"ticker": "AAPL",
"companyname": "Apple Inc.",
"companyname_short": "Apple",
"from_date": "2023-11-20",
"till_date": "2023-12-20",
"mode": "daily",
"pagination": {
"current_page": 1,
"limit": 100,
"total_records": 22,
"total_pages": 1
}
},
"data": [
{
"date": "2023-12-20 16:00:00",
"open": 196.90,
"high": 197.68,
"low": 194.83,
"close": 194.83,
"volume": 52242815
},
{
"date": "2023-12-19 16:00:00",
"open": 196.16,
"high": 196.95,
"low": 195.89,
"close": 196.94,
"volume": 40714051
},
{
"date": "2023-12-18 16:00:00",
"open": 196.09,
"high": 196.63,
"low": 194.39,
"close": 195.89,
"volume": 55751861
},
{
"date": "2023-12-15 16:00:00",
"open": 197.53,
"high": 198.40,
"low": 197.00,
"close": 197.57,
"volume": 128256749
},
{
"date": "2023-12-14 16:00:00",
"open": 198.02,
"high": 199.62,
"low": 196.16,
"close": 198.11,
"volume": 66831581
}
]
}
2. Architecture: Multi-Ticker & Smart Daily Merging
Two behaviors of this endpoint distinguish it from a standard price feed — multi-ticker dictionary wrapping and automatic live-bar injection in daily mode. Understanding both prevents integration surprises when parsing responses.
1. Multi-Ticker Output Structure
When querying multiple tickers (e.g., ticker=AAPL,MSFT) in daily, eod, or minute-bars mode, the API returns a dictionary object keyed by ticker — each containing its own isolated metadata and data blocks. This avoids mixing price series from different companies into a flat array and makes per-ticker access O(1) by key. mode=snapshot is the one exception: since it's already a single row per ticker with no series to isolate, it returns a flat array instead — see the snapshot example in section 4.
{
"AAPL": {
"metadata": { ... },
"data": [ ... ]
},
"MSFT": {
"metadata": { ... },
"data": [ ... ]
}
}
2. Real-Time Interim Merging (Daily Mode)
When fetching daily data during active market hours, the API queries the Interim Real-Time Engine and injects the current live trading bar at index 0 of the data array — merging historical EOD and live data into one continuous stream without a separate endpoint.
Smart EOD Lock-in
If the market has closed but EOD processing hasn't completed, the live bar locks in at 16:00:00. This guarantees you always have the latest daily close without polling a separate real-time endpoint or waiting for batch finalization.
3. Coverage & Data Details
Scope, field definitions, and update cadence for both the historical EOD and intraday 1-minute price series.
Instruments & Markets
Historical EOD and intraday 1-minute prices for US-listed equities and ETFs. Use a valid exchange ticker symbol as the identifier — the same symbol accepted by the Company Profile API and Stock Screener API.
OHLCV Fields
Every record in the data array contains six fields: date (timestamp for the period), open, high, low, close (all in the trading currency), and volume (shares traded during the interval). For EOD records the timestamp resolves to 16:00:00; for intraday minute bars it reflects the bar open time.
Historical Depth
End-of-day price history extends back many years for actively traded large-caps and ETFs — use period=all or set wide explicit dates to retrieve the full available range. Intraday 1-minute bars cover a rolling recent window; use mode=eod or mode=daily for long historical lookbacks and mode=minute-bars for high-frequency recent sessions.
Update Cadence
Intraday bars are refreshed continuously during market hours. The live bar injected by mode=daily reflects the most recent trading activity. EOD records are finalized after market close once official end-of-day processing completes — typically within minutes of the 16:00 ET session close.
Pagination for Long Histories
When pulling multi-year historical series, use limit and page together and iterate using metadata.pagination.total_pages to know when to stop. Each page is guaranteed to be consistent — the total_records count does not change between pages for the same query.
4. Endpoint Variations
Copy any of the requests below directly into your application, replacing YOUR_API_KEY with your credentials.
https://data.businessquant.com/quotes?ticker=AAPL&mode=minute-bars&period=1d&limit=500&api_key=YOUR_API_KEY
https://data.businessquant.com/quotes?ticker=AAPL&mode=eod&period=1mo&limit=100&api_key=YOUR_API_KEY
https://data.businessquant.com/quotes?ticker=AAPL,MSFT&mode=daily&from_date=2020-01-01&till_date=2023-12-31&api_key=YOUR_API_KEY
https://data.businessquant.com/quotes?ticker=AAPL&mode=eod&period=10y&limit=500&page=1&api_key=YOUR_API_KEY
https://data.businessquant.com/quotes?ticker=AAPL,MSFT&mode=snapshot&api_key=YOUR_API_KEY
snapshot mode does not follow the metadata / data shape used by the other three modes — it returns a flat array with one object per ticker, in the order requested:
[
{
"ticker": "AAPL",
"name": "Apple Inc.",
"name_short": "Apple",
"exchange": "NASDAQ",
"price": 194.83,
"pricechange": -2.85,
"pricechange_pct": -1.44,
"pricedate": "2023-12-20T16:00:00Z"
},
{
"ticker": "MSFT",
"name": "Microsoft Corporation",
"name_short": "Microsoft",
"exchange": "NASDAQ",
"price": 374.58,
"pricechange": 1.92,
"pricechange_pct": 0.52,
"pricedate": "2023-12-20T16:00:00Z"
}
]
5. Sample Response
Apple's daily OHLCV data for the past month. The first row shows the most recent trading session. Switch to JSON to inspect the full response structure including the pagination metadata.
File not found:
templates/api-responses/quotes-daily.json
Frequently Asked Questions
What data modes does the Stock Quotes API support?
Four modes: daily returns historical EOD prices and, during active market hours, automatically injects the latest live trading bar at index 0. eod returns only confirmed end-of-day closes with no live data — ideal for backtesting. minute-bars returns intraday 1-minute OHLCV bars. snapshot returns a single latest-price row per ticker with no series or pagination.
How is snapshot mode different from the other three?
mode=snapshot returns exactly one row per ticker — the current price, change, and percent change — instead of a data array of historical records. It picks whichever is more recent between the settled end-of-day close and the latest intraday tick, so you always get the true current price without deciding which source to check yourself. period, from_date, till_date, page, and limit are all ignored in this mode, and the response is a flat array rather than the metadata/data wrapper used elsewhere.
Can I request prices for multiple tickers in one API call?
Yes. Pass a comma-separated list (e.g., ticker=AAPL,MSFT,GOOGL). The response returns a dictionary keyed by ticker, each with its own metadata and data blocks, rather than a mixed flat array.
How does the daily mode differ from eod mode?
The eod mode returns only completed, confirmed end-of-day closing prices — ideal for backtesting and factor models. The daily mode returns the same historical data but, during active market hours, automatically injects the latest live trading bar at index 0, merging historical and current-day data into one seamless series.
What time periods can I query?
Use relative period strings (1d, 1w, 1mo, 3mo, 1y, 5y) or explicit from_date/till_date in YYYY-MM-DD format. Results are paginated with total_records and total_pages in the metadata.
Is the Stock Quotes API free to use?
Yes, the Stock Quotes API is free to use. Sign up for an API key to start pulling EOD prices, intraday bars, and live daily data immediately.