Our data

Options

Every listed contract in a chain with its strike and expiration, filtered by date, expiry and strike. Then bars, trades and quotes for any contract, or for the whole chain at once.

History

On futures
16 yrs
On stocks
13 yrs

Schemas

  • definitionOPRA.PILLAR, GLBX.MDP3The contracts in a chain, one day at a time
  • statisticsOPRA.PILLAR, GLBX.MDP3Settlement prices and open interest
  • trades, cmbp-1, tcbbo, cbbo-*OPRA.PILLAREquity options, 3 years
  • trades, mbp-1, mbp-10GLBX.MDP3Options on futures
  • Equity option chains are the stock plus .OPT (SPY.OPT); a contract is its OSI symbol, SPY 261218P00660000 with the root padded to six characters.
  • Options on futures use the option root plus .OPT: ES.OPT and NQ.OPT, but crude is LO.OPT and gold OG.OPT.

Fields

definition

raw_symbol
exchange symbol, e.g. the OSI symbol of an option
instrument_class
'C' call, 'P' put, 'F' future
strike_price
strike
expiration
expiry, UTC
underlying
underlying symbol
instrument_id
numeric id of the contract or stock

cbbo-1m

ts_recv
when the feed received it, UTC, to the nanosecond
ts_event
when the exchange stamped the event, UTC, to the nanosecond
rtype
record type
publisher_id
exchange and feed the record came from
instrument_id
numeric id of the contract or stock
side
'A' ask, 'B' bid, 'N' none; on a trade, the side that was hit
price
price of the event or trade
size
size of the event or trade
flags
record flags set by the feed
bid_px_00
bid price
ask_px_00
ask price
bid_sz_00
size resting at the bid
ask_sz_00
size resting at the ask
bid_pb_00
exchange showing the best bid
ask_pb_00
exchange showing the best ask
symbol
the symbol you asked for

Example data

Rows exactly as the API returned them.

SPY.OPT chain on 21 October 2026, 18 December expiry, strikes 655 to 665 · definition
raw_symbolinstrument_classstrike_priceexpirationunderlyinginstrument_id
SPY 261218C00660000C6602026-12-18T00:00:00+00:00SPY1375731864
SPY 261218P00660000P6602026-12-18T00:00:00+00:00SPY1409286560
SPY 261218P00665000P6652026-12-18T00:00:00+00:00SPY1409286729
SPY 261218P00655000P6552026-12-18T00:00:00+00:00SPY1409286939
SPY 261218C00655000C6552026-12-18T00:00:00+00:00SPY1375733399
SPY 261218C00665000C6652026-12-18T00:00:00+00:00SPY1375733771
SPY 18 December 2026 660 put, cbbo-1m · cbbo-1m
ts_recvts_eventrtypepublisher_idinstrument_idsidepricesizeflagsbid_px_00ask_px_00bid_sz_00ask_sz_00bid_pb_00ask_pb_00symbol
2026-10-22T13:31:00+00:00null193301409286280Nnull01922.392.424053462626SPY 261218P00660000
2026-10-22T13:32:00+00:00null193301409286280Nnull01922.382.414074192626SPY 261218P00660000
2026-10-22T13:33:00+00:002026-10-22T13:32:45.098573145+00:00193301409286280N2.411922.412.43407533421SPY 261218P00660000
2026-10-22T13:34:00+00:002026-10-22T13:32:45.098573145+00:00193301409286280N2.411922.362.3813463226SPY 261218P00660000

Times are UTC to the nanosecond; a bar is stamped at its open.

Request it

import quantpad_data as qpd

h = qpd.Historical()
chain = h.options.chain(
    dataset="OPRA.PILLAR", underlier="SPY.OPT", date="2026-10-21",
    expiration="2026-12-18", strike_min=655, strike_max=665,
)
quotes = h.timeseries.get_range(
    dataset="OPRA.PILLAR", symbols="SPY   261218P00660000",
    schema="cbbo-1m", start="2026-10-22", end="2026-10-23",
)

Or ask the agent in plain English; it writes the same call for you.