US Options Trade and Top of Book Quote
Tick-level OPRA option trades, each row carrying the latest option NBBO, the latest top-of-book bid/ask from every options exchange (as semicolon lists) and a full set of underlying quote and last-trade fields.
How to use it
Identify a contract by underlying, expiration, strike and call/put. Most options tick files carry no underlying/root column: the underlying comes from the file path or API identifier, so keep it alongside every row you land. Strikes and prices are plain decimals (not scaled). EventType is a bit field: low 4 bits message type, 16 cancel, 32 call, 64 NBBO, 128 buy/bid side. Check OCC special settlements before comparing prices across a corporate action.
Typical use
Options pricing, volatility, and flow research on US-listed equity and index options.
Limitations
Delivered as recorded from the source feed: AlgoSeek does not remove crossed or locked quotes, bad prints, or out-of-sequence packets unless contracted to. Consumers own cleaning. Contract identity per row = Ticker (option root/underlying, sample AAPL) + ExpirationDate + StrikePrice + CallPut; UnderSymbol repeats the underlying. No OSI/OCC symbol column exists; one could be built from these fields. StrikePrice (e.g. 192.5) and all option and underlying prices are plain decimals in dollars per share, not scaled by 1000; the contract multiplier is not in the file. EventType decoding verified on the sample: 33 = 32 call + 1 Trade; 1 = put Trade; NBBO bit is clear on trade rows and Side is blank. Bit 4 (16) would mark a cancelled prior trade; no cancel rows appear in the sample, but cancel conditions A, C, E, G exist in Conditions. LastNBBO* fields give the best bid/ask (with posting exchange) before the trade; List* fields give each exchange's own last bid/ask. In the sample the NBBO bid price always equals the List price at its exchange (100 of 100).
Coverage
Trades and top-of-book quotes from the 16 SEC-approved options exchanges via OPRA for options on equities, ETFs, ETNs and ADRs (guide); the product page says all listed US options contracts disseminated via OPRA. Start date not stated.
Venues (31)
- AM (AMEX)
- AR (ARCA)
- BA (BATS)
- BY (BATS_Y)
- BO (BOSTON)
- C2 (C2)
- CB (CBOE)
- CS (CSE)
- EA (EDGA)
- EX (EDGX)
- FI (FINRA)
- IE (IEX OPTIONS)
- IS (ISE)
- IG (ISE_GEMINI)
- IM (ISE_MERCURY)
- LT (LTSE)
- MI (MIAX)
- MP (MIAX_PEARL)
- ME (MIAX_EMERALD)
- MS (MIAX_SAPPHIRE)
- MX (MEMX)
- M2 (MX2 OPTIONS)
- NA (NASDAQ)
- NB (NASDAQ_BX)
- NP (NASDAQ_PSX)
- NS (NSE)
- NY (NYSE)
- OP (OPRA)
- SI (SIAC)
- TH (THOMSON)
- UN (UNKNOWN)
Usage constraints
- Licensed vendor data: never export raw rows to a tenant-local destination or include them verbatim in a public artifact; serve only through entitlement-checked platform reads.
- Do not treat the vendor's `Ticker` as a stable identity across time; join on an AlgoSeek security key (SecId or ASID, which are distinct) or the platform symbol mapping.
Known issues (18)
- Primary key is inferred; AlgoSeek's guide does not name one.
- Documentation discrepancyGuide field table orders EventType, Side, Action; the sample header orders EventType, Action, Side.
- Documentation discrepancyGuide Table 1 intro says the table is for the 'Options Trade Only data file' (copy-paste from the Trade Only guide).
- Documentation discrepancyGuide types EventType as 'string'; sample values are decimal integers rendered as text (1, 33).
- Documentation discrepancyGuide types UnderLastTradeSize as 'decimal'; every sample value is a whole number.
- Documentation discrepancyGuide describes UnderTotalTradeSize and UnderTotalTradeCount as the size and count of the last trade; sample values grow monotonically with time (609460 to 645508; 3616 to 4122), so they behave as cumulative running totals for the underlying.
- Documentation discrepancyGuide gives no code tables for UnderBidConditions, UnderAskConditions, UnderLastTradeConditions (sample: 8-character values like 00000001, 80000001, A0000201) or for the single-letter Under*Exchange codes (sample: Z, Q, X, P, U, V, N, D, J, Y); Table 2 covers options exchanges only.
- Documentation discrepancyNumber of elements in the List* columns varies by row (16 in 81 rows, 15 in 19 rows; AR is absent from the shorter lists) and exchange order differs from row to row.
- Documentation discrepancyListLastQuoteCondition equals ListLastBidCondition in all 100 sample rows and ListLastAskCondition in 99; the guide does not explain how it differs.
- Documentation discrepancyGuide intro says top-of-book quotes and all trades, but the sample (and page) contain only trade rows (Action 'T'); quote events are not rows.
- Documentation discrepancyProduct page says coverage includes all listed US options contracts; the guide scopes it to options on equities, ETFs, ETNs and ADRs.
- Documentation discrepancyGuide Table 3 (Action) adds HB = Heartbeat that does not appear in the other options guides; Table 7 still lists Heartbeat as not in use.
- Documentation discrepancyGuide intro says 16 options exchanges, but Table 2 lists 31 codes including FINRA, OPRA, SIAC, THOMSON and UNKNOWN.
- Documentation discrepancyGuide Table 6 says bits 0-3 are a '3-bit' message type, but bits 0-3 are 4 bits and Table 7 runs to value 11.
- Documentation discrepancyGuide Table 7 names message type 10 'UnderlyingValueSell' while Table 3 names the matching action 'UnderlyingValueSale'.
- Documentation discrepancyGuide Table 7 has no type 12 (Indicative); Table 3 lists action 'I' = Indicative Value and 'IN' = Invalid with no message-type value. The AlgoSeek decoder convention assigns 12 = Indicative.
- Documentation discrepancyGuide describes Quantity as 'Underlying asset quantity'; sample values (1..3444, quote sizes) behave as option contract counts.
- Documentation discrepancyGuide expands OPRA as 'Options Pricing Authority' while the product pages say 'Options Price Reporting Authority'.
51 columns in delivery order · file or table name opt_ttob. Types are ODCS logical types; the format line shows how values are written.
| Column | Type | Key | Description |
|---|---|---|---|
| Date | dateyyyymmdd | Key 1 · Partition · Required | Trading date of the event in yyyymmdd; the guide marks the column as optional. Missing values: unstated (guide marks column optional) · Source: vendor guide and sample |
| Timestamp | timeHHMMSSmmm | Key 2 · Required | Event time in US Eastern clock time to the millisecond, no date part; keep as text (Excel mangles it). Source: vendor guide and sample |
| Ticker | string | Key 3 · Partition · Required | Symbol of the option's underlying/root (sample: AAPL). Guide calls it 'Symbol name'. Source: vendor guide and sample |
| CallPut | string · enum (2)C | P | Key 4 · Required | Option type: C for call, P for put. Source: vendor guide and sample 2 allowed values
|
| StrikePrice | number | Key 5 · Required | Strike price of the contract in dollars (index points for index options), e.g. 4555 or 202.5. Unit: USD · Source: vendor guide and sample |
| ExpirationDate | dateyyyymmdd | Key 6 · Required | Expiration date of the option contract in yyyymmdd. Source: vendor guide and sample |
| EventType | integeri64 | Key 7 · Required | Numeric byte mask: bits 0-3 message type, bit 4 cancel, bit 5 call, bit 6 NBBO, bit 7 buy/bid side. Action is its text form. Source: vendor guide and sample |
| Action | string · enum (11)space-separated tokens, e.g. 'T' | Text form of EventType: message-type token plus NB when the NBBO bit is set (e.g. 'FQ NB'). Side is a separate column. Source: vendor guide and sample 11 allowed values
| |
| Side | string · enum (2)B | A | blank | Side of the book for quote events: B bid, A ask. Blank for trade events. Missing values: Empty for trade events (guide) · Source: vendor guide and sample 2 allowed values
| |
| Price | number | Key 9 · Required | Trade price for trades; bid or ask price (per Side) for quote events. Option premium per underlying unit. Unit: USD · Source: vendor guide and sample |
| Quantity | integeri64 | Key 10 · Required | Event size: traded size for trades, quote size for quotes. Guide says 'underlying asset quantity'; values behave as contract counts. Unit: contracts · Source: vendor guide and sample |
| Exchange | string · enum (31)2-letter code | Key 8 · Required | Two-letter code of the options venue that reported the trade or posted the quote (guide Table 2). Source: vendor guide and sample 31 allowed values
|
| Conditions | string · enum (34)single character (space is a valid value) | Single-character trade condition (guide Table 4); sample shows I, f, g, S, j, a. Source: vendor guide and sample 34 allowed values
| |
| LastNBBOBidTime | timeHHMMSSmmm | Time of the last option NBBO bid before the trade (ET, ms). Source: vendor guide and sample | |
| LastNBBOBidExchange | string · enum (31)2-letter code | Exchange code posting the last option NBBO bid. Source: vendor guide and sample 31 allowed values
| |
| LastNBBOBidPrice | number | Price of the last option NBBO bid. Unit: USD · Source: vendor guide and sample | |
| LastNBBOBidSize | integeri64 | Size of the last option NBBO bid. Unit: contracts · Source: vendor guide and sample | |
| LastNBBOBidCondition | string · enum (11)single character (space is valid) | Condition of the last option NBBO bid (quote conditions, guide Table 5). Source: vendor guide and sample 11 allowed values
| |
| LastNBBOAskTime | timeHHMMSSmmm | Time of the last option NBBO ask before the trade (ET, ms). Source: vendor guide and sample | |
| LastNBBOAskExchange | string · enum (31)2-letter code | Exchange code posting the last option NBBO ask. Source: vendor guide and sample 31 allowed values
| |
| LastNBBOAskPrice | number | Price of the last option NBBO ask. Unit: USD · Source: vendor guide and sample | |
| LastNBBOAskSize | integeri64 | Size of the last option NBBO ask. Unit: contracts · Source: vendor guide and sample | |
| LastNBBOAskCondition | string · enum (11)single character (space is valid) | Condition of the last option NBBO ask (quote conditions, guide Table 5). Source: vendor guide and sample 11 allowed values
| |
| ListQuoteExchange | stringsemicolon-separated exchange codes; element order varies by row (15 or 16 elements in sample) | Exchanges whose top-of-book quote is listed; every other List* column is aligned to this order. Source: vendor guide and sample | |
| ListLastBidTime | stringsemicolon-separated list aligned to ListQuoteExchange | Last bid time per exchange in ListQuoteExchange order (HHMMSSmmm each). Source: vendor guide and sample | |
| ListLastBidPrice | stringsemicolon-separated list aligned to ListQuoteExchange | Last bid price per exchange in ListQuoteExchange order. Source: vendor guide and sample | |
| ListLastBidSize | stringsemicolon-separated list aligned to ListQuoteExchange | Last bid size per exchange in ListQuoteExchange order. Source: vendor guide and sample | |
| ListLastAskTime | stringsemicolon-separated list aligned to ListQuoteExchange | Last ask time per exchange in ListQuoteExchange order (HHMMSSmmm each). Source: vendor guide and sample | |
| ListLastAskPrice | stringsemicolon-separated list aligned to ListQuoteExchange | Last ask price per exchange in ListQuoteExchange order. Source: vendor guide and sample | |
| ListLastAskSize | stringsemicolon-separated list aligned to ListQuoteExchange | Last ask size per exchange in ListQuoteExchange order. Source: vendor guide and sample | |
| ListLastQuoteCondition | stringsemicolon-separated single characters aligned to ListQuoteExchange | Last quote condition per exchange in ListQuoteExchange order; a space is a valid element. Equals the bid list in all sample rows. Source: vendor guide and sample | |
| ListLastBidCondition | stringsemicolon-separated single characters aligned to ListQuoteExchange | Last bid condition per exchange in ListQuoteExchange order; a space is a valid element. Source: vendor guide and sample | |
| ListLastAskCondition | stringsemicolon-separated single characters aligned to ListQuoteExchange | Last ask condition per exchange in ListQuoteExchange order; a space is a valid element. Source: vendor guide and sample | |
| UnderSymbol | string | Underlying symbol name (sample: AAPL). Source: vendor guide and sample | |
| UnderBidTime | timeHHMMSSmmmuuunnn (15 digits, ns) | Time of the underlying's bid quote (ET, ns resolution). Source: vendor guide and sample | |
| UnderBidPrice | number | Bid price of the underlying security. Unit: USD · Source: vendor guide and sample | |
| UnderBidSize | integeri64 | Bid size of the underlying (shares inferred from values 100-600). Unit: shares · Source: vendor guide and sample | |
| UnderBidConditions | string8-character hex-like mask (e.g. 00000001); format evident in sample only | Condition flags of the underlying's bid quote. Guide gives no code table. Source: vendor guide and sample | |
| UnderBidExchange | stringsingle letter | Exchange of the underlying's bid; single-letter equity venue code (sample: Z, Q, X, P, U). Guide Table 2 does not cover these. Source: vendor guide and sample | |
| UnderAskTime | timeHHMMSSmmmuuunnn (15 digits, ns) | Time of the underlying's ask quote (ET, ns resolution). Source: vendor guide and sample | |
| UnderAskPrice | number | Ask price of the underlying security. Unit: USD · Source: vendor guide and sample | |
| UnderAskSize | integeri64 | Ask size of the underlying (shares inferred). Unit: shares · Source: vendor guide and sample | |
| UnderAskConditions | string8-character hex-like mask (e.g. 00000001); format evident in sample only | Condition flags of the underlying's ask quote. Guide gives no code table. Source: vendor guide and sample | |
| UnderAskExchange | stringsingle letter | Exchange of the underlying's ask; single-letter equity venue code (sample: P, Q, V, N). Not defined in the guide. Source: vendor guide and sample | |
| UnderLastTradeTime | timeHHMMSSmmmuuunnn (15 digits, ns) | Time of the underlying's last trade before this trade, ns resolution (ET). Missing values: Blank (empty if no trade price is available) · Source: vendor guide and sample | |
| UnderLastTradePrice | number | Price of the underlying's last trade before this trade. Unit: USD · Missing values: Blank (empty if no trade price is available) · Source: vendor guide and sample | |
| UnderLastTradeSize | integeri64 | Size of the underlying's last trade before this trade; guide types it decimal but sample values are whole numbers. Unit: shares · Missing values: Blank (empty if no trade price is available) · Source: vendor guide and sample | |
| UnderLastTradeConditions | string8-character hex-like mask (e.g. 80000001) | Condition flags of the underlying's last trade. Guide gives no code table. Missing values: Blank (empty if no trade price is available) · Source: vendor guide and sample | |
| UnderLastTradeExchange | stringsingle letter | Exchange of the underlying's last trade; single-letter venue code (sample: D, Z, P, V, J, Y). Not defined in the guide. Missing values: Blank (empty if no trade price is available) · Source: vendor guide and sample | |
| UnderTotalTradeSize | integeri64 | Guide: total trade size of the last trade; sample values rise steadily with time, i.e. a cumulative running volume of the underlying. Unit: shares · Missing values: Blank (empty if no trade price is available) · Source: vendor guide and sample | |
| UnderTotalTradeCount | integeri64 | Guide: total trade count of the last trade; sample values rise steadily with time, i.e. a cumulative running trade count of the underlying. Unit: count · Missing values: Blank (empty if no trade price is available) · Source: vendor guide and sample |
- errorrow_count_positivecompleteness
Every delivered partition (trade date, or snapshot) carries at least one row.
rowCount must be greater than 0
- warningprimary_key_uniqueuniqueness
Best-effort key for an event stream: same-timestamp events from one venue can repeat, so duplicates are reported, not rejected.
duplicateValues (properties: Date, Timestamp, Ticker, CallPut, StrikePrice, ExpirationDate, EventType, Exchange, Price, Quantity) must be 0
- errorLastNBBOAskSize_non_negativeaccuracy
LastNBBOAskSize is never negative.
SELECT COUNT(*) FROM {object} WHERE LastNBBOAskSize < 0 - errorLastNBBOBidSize_non_negativeaccuracy
LastNBBOBidSize is never negative.
SELECT COUNT(*) FROM {object} WHERE LastNBBOBidSize < 0 - errorQuantity_non_negativeaccuracy
Quantity is never negative.
SELECT COUNT(*) FROM {object} WHERE Quantity < 0 - errorUnderAskSize_non_negativeaccuracy
UnderAskSize is never negative.
SELECT COUNT(*) FROM {object} WHERE UnderAskSize < 0 - errorUnderBidSize_non_negativeaccuracy
UnderBidSize is never negative.
SELECT COUNT(*) FROM {object} WHERE UnderBidSize < 0 - errorUnderLastTradeSize_non_negativeaccuracy
UnderLastTradeSize is never negative.
SELECT COUNT(*) FROM {object} WHERE UnderLastTradeSize < 0 - errorUnderTotalTradeCount_non_negativeaccuracy
UnderTotalTradeCount is never negative.
SELECT COUNT(*) FROM {object} WHERE UnderTotalTradeCount < 0 - errorUnderTotalTradeSize_non_negativeaccuracy
UnderTotalTradeSize is never negative.
SELECT COUNT(*) FROM {object} WHERE UnderTotalTradeSize < 0
Delivery
S3 flat files
AlgoSeek flat-file delivery (the layout the schema below describes).
- Layout:
- Plain-text CSV with a fixed header, trade events ordered by time. Guide: one file per option contract per trading day, with the example of all AAPL calls and puts for one expiration on one trading date consolidated in one file; each CSV gzip-compressed (about 7x expansion). No bucket/path/file-name pattern is given. Sample rows span many strikes and both calls and puts of one AAPL expiration, i.e. chain-level.
- Compression:
- gzip
- Access:
- Bucket access is granted per subscription; bucket names arrive with license provisioning.
Service levels
- Update frequency
- Daily
- Retention
- Bounded by the license term
- Retention of landed copies is bounded by the AlgoSeek license; purge on termination.
- History starts
- Not stated in the vendor documentation
Service levels describe the vendor feed as documented. They are draft values, not a commitment by AlphaSwarm.
Data Contract Editor · read-only preview — edits are not saved
Open-source Data Contract Editor (MIT). Changes stay in this browser tab: Cancel restores the published contract, and Download copy saves your edited YAML to your device only.
Contracts follow the Open Data Contract Standard (Bitol, LF AI & Data).
Vendor names are trademarks of their owners.