?>
ESC to close

Stock Quotes API

Maintained by Piyush Arora

Last updated:

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:

daily EOD + Live Merge eod Strictly Historical minute-bars Intraday 1-Min snapshot Latest Price
GET 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.

daily Default

Smart Daily

Returns historical end-of-day prices. During active market hours, automatically injects the current live trading bar at index 0 — merging historical and real-time data into one seamless series. Ideal for dashboards and monitoring.

eod

Strictly Historical EOD

Returns only fully completed, confirmed end-of-day closing prices. No live market data is ever appended. Use this mode for backtesting, factor models, and any workflow that requires a clean, immutable historical price series.

minute-bars

Intraday 1-Minute Bars

High-resolution 1-minute interval OHLCV bars for intraday granularity. Each bar covers a single trading minute. Use for intraday strategy development, session-level charting, and high-frequency event analysis.

snapshot

Latest Price Snapshot

Returns one row per ticker with the current price, change, and percent change — whichever is more recent between the settled EOD close and the latest intraday tick. No data array, no pagination, no date filters. Ideal for watchlists and portfolio tickers.

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=AAPL
Multi: 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
Example cURL Request (Single Ticker)
curl -X GET "https://data.businessquant.com/quotes?ticker=AAPL&mode=daily&period=1mo&limit=100&api_key=YOUR_API_KEY"
Sample Response (Single Ticker)
{
    "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.

Multi-Ticker Response Structure
{
  "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.

1. Intraday 1-Minute Bars
https://data.businessquant.com/quotes?ticker=AAPL&mode=minute-bars&period=1d&limit=500&api_key=YOUR_API_KEY
2. Strictly Historical EOD (No Live Data)
https://data.businessquant.com/quotes?ticker=AAPL&mode=eod&period=1mo&limit=100&api_key=YOUR_API_KEY
3. Custom Date Range — Multi-Ticker (Historical)
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
4. Long EOD History with Pagination
https://data.businessquant.com/quotes?ticker=AAPL&mode=eod&period=10y&limit=500&page=1&api_key=YOUR_API_KEY
5. Latest Price Snapshot — Multi-Ticker
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:

Sample Response — mode=snapshot
[
    {
        "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.

Response data not loaded.
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.