ESC to close

Historical & Intraday Stock Prices API

Access historical end-of-day (EOD) stock prices and intraday 1-minute OHLCV bars through a single API endpoint. Query one or many tickers at once, control the date range or lookback period, and paginate through clean, ready-to-use price series for backtests, dashboards, and trading systems.

GET https://data.businessquant.com/quotes?ticker={ticker}&mode={mode}&api_key={api_key}

How this fits the Business Quant API suite: Use the Stock Screener API to build a filtered universe of tickers, then pull price history for each one here. Pair with the Financial Statements API to combine price data with fundamental metrics for valuation and factor research.

Key Capabilities

Three resolution modes in one endpoint cover every price data use case — from long-horizon historical backtesting to live intraday monitoring. All modes return the same clean OHLCV structure, paginated and filterable by date.

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.

Three Data Modes

The mode parameter controls the resolution and live-data behavior of the response. Choose based on whether you need historical closes, real-time augmentation, or intraday granularity.

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.

1. Request Parameters

The Quotes endpoint uses URL query parameters to define the target securities, the data resolution (EOD vs intraday), and the historical horizon. Query one or many tickers, choose between smart daily, strictly historical EOD closes, or intraday 1-minute bars, and control how much history you retrieve using period or explicit from_date/till_date bounds.

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).
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), 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.

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