US Futures Multiple Depth
Level-2 order book updates for CME-listed futures: each row snapshots one side of the book with up to 10 price levels, each with price, aggregate size and order count.
How to use it
UTCDate/UTCTime are the event time in UTC and files cover UTC calendar days, so one CME overnight session spans two files and Sunday-evening trading lands under Monday's UTCDate. LocalDate/LocalTime are Chicago clock time and do not roll at the 17:00 CT session open; derive the exchange trade date yourself. The ticker is one contract month (e.g. ESZ3), not a continuous series; roll explicitly. Aggressor side comes from TypeMask bits 7 (buy) and 6 (sell); a plain TRADE means the initiator is unknown. Rows flagged as calculated (Flags 8) are not trades.
Typical use
Futures backtesting, roll research, and intraday microstructure on CME Group venues.
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. Row grain (from the sample and the guide's prose about snapshots): one row is a full snapshot of one side (B or S) of an instrument's book after an update, with up to 10 levels. At the same instant the sample shows a B row and an S row. There is no action/delta column and no sequence number; 57 of 100 sample rows share (UTCTime, Side) with another row, so rows within the same millisecond are ordered only by file position and the key is not unique. Guide says multiple snapshots can fall in the same millisecond for very active instruments because updates are published when an incremental book-update transaction (FIX batch) completes. Each row always has 10 Price/Size/Orders triples; only the first Depth levels carry data and the rest are zero (e.g. Depth 5 -> levels 6-10 are zero). Depth is 1, 2, 5 or 10 depending on instrument type; ES in the sample is 10. Treat level price 0 as 'no level', not a price. Level 1 is the best price: in the sample bid prices strictly fall and ask prices strictly rise from L1 to L10.
Coverage
Page: multi-level order book for CME-listed futures (CME, CBOT, COMEX, NYMEX), up to 10 levels per side; guide: 10 levels for all bids and asks of US exchange futures. Full historical archive plus daily automated updates per the page; start of history not stated.
Venues (4)
- CME
- CBOT
- COMEX
- NYMEX
Answers to common questions
- What time zone are the timestamps in?
- UTC, with LocalDate/LocalTime fields in US Central (Chicago) time.
- Which file holds a Sunday-evening CME session?
- The Monday UTCDate file; files are UTC calendar days.
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 (8)
- Primary key is inferred; AlgoSeek's guide does not name one.
- Documentation discrepancyGuide Table 2 swaps the formats of the local fields: LocalTime is typed string (yyyymmdd) and LocalDate string (HHMMSSmmm); the sample (and the descriptions) show LocalDate = yyyymmdd and LocalTime = HHMMSSmmm.
- Documentation discrepancyGuide Table 2 lists L4Price/L4Size/L4Orders twice and omits L5Price/L5Size/L5Orders; the sample header has L1..L10 in order, so the second 'L4' block is L5.
- Documentation discrepancySecurityID is described here as a 'CME security identifier', whereas the Futures TAQ and Trade Only guides call the same column an 'internal security ID used by algoseek'; ESZ3 has SecurityID 314863 in both the TAQ and depth samples of 2023-08-02.
- Documentation discrepancyGuide describes UTCDate/UTCTime/LocalDate/LocalTime with 'transaction' / 'trade' wording although these rows are book updates, not trades; no trade events exist in this dataset.
- Documentation discrepancyGuide says a trading session 'spans an entire week' and dates are cut in UTC, while the Daily File section says one file per symbol per UTC day (00:00-24:00); the carry-over of the book across UTC midnight is described only in prose.
- Documentation discrepancyGuide Table 1 example (GEH3, 2019) shows prices with 3-4 decimals and zero order counts at every level, whereas the 2023 ES sample has 6-decimal price strings and non-zero order counts; Table 1 omits UTCDate, UTCTime, SecurityID and levels 3-10 (guide says so).
- Documentation discrepancyGuide names no exchanges or venues, whereas the product page lists CME, CBOT, COMEX and NYMEX.
39 columns in delivery order · file or table name fut_multiple_depth. Types are ODCS logical types; the format line shows how values are written.
| Column | Type | Key | Description |
|---|---|---|---|
| UTCDate | dateyyyymmdd | Key 1 · Partition · Required | UTC calendar date of the book update; the daily file is one UTC day (00:00-24:00). Source: vendor guide and sample |
| UTCTime | timeHHMMSSmmm | Key 2 · Required | Update time in UTC, 9 digits HHMMSSmmm with no separators (ms precision), e.g. 220000003 = 22:00:00.003. Unit: ms · Source: vendor guide and sample |
| LocalDate | dateyyyymmdd | Chicago calendar date of the update. The guide's table lists this field with the time format (swapped with LocalTime). Source: vendor guide and sample | |
| LocalTime | timeHHMMSSmmm | Update time in Chicago local time (UTC-6 winter, UTC-5 DST), HHMMSSmmm. The guide's table lists the date format here (swapped). Unit: ms · Source: vendor guide and sample | |
| Ticker | string | Key 3 · Partition · Required | Instrument name, max 20 characters (e.g. ESZ3). Source: vendor guide and sample |
| SecurityID | stringnumeric string | Instrument id; this guide calls it the CME security identifier (the TAQ guides call it an internal algoseek id). Sample ESZ3 = 314863, same as in the TAQ sample. Source: vendor guide and sample | |
| Side | string · enum (2) | Key 4 · Required | Which side of the book the row's levels describe: B for bids, S for sells. Source: vendor guide and sample 2 allowed values
|
| Flags | integer · enum (2)i64 | Key 5 · Required | Marks a regular book event (0) or an implied one (1); implied levels come from spread relationships and may sit away from the regular bid/ask. Source: vendor guide and sample 2 allowed values
|
| Depth | integer · enum (4)i64 | Number of book levels shown for this instrument (1, 2, 5 or 10, by instrument type); levels beyond Depth are zero-filled. Unit: count · Source: vendor guide and sample 4 allowed values
| |
| L1Price | number | Price at book level 1 (level 1 is the best price; bids fall and asks rise with level). Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L1Size | integeri64 | Contracts resting at book level 1. Unit: contracts · Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L1Orders | integeri64 | Number of orders at book level 1. Unit: count · Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L2Price | number | Price at book level 2 (level 1 is the best price; bids fall and asks rise with level). Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L2Size | integeri64 | Contracts resting at book level 2. Unit: contracts · Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L2Orders | integeri64 | Number of orders at book level 2. Unit: count · Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L3Price | number | Price at book level 3 (level 1 is the best price; bids fall and asks rise with level). Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L3Size | integeri64 | Contracts resting at book level 3. Unit: contracts · Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L3Orders | integeri64 | Number of orders at book level 3. Unit: count · Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L4Price | number | Price at book level 4 (level 1 is the best price; bids fall and asks rise with level). Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L4Size | integeri64 | Contracts resting at book level 4. Unit: contracts · Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L4Orders | integeri64 | Number of orders at book level 4. Unit: count · Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L5Price | number | Price at book level 5 (level 1 is the best price; bids fall and asks rise with level). Missing from the guide's table (L4 is listed twice). Missing values: 0 when the level is unused · Source: sample file only | |
| L5Size | integeri64 | Contracts resting at book level 5. Missing from the guide's table. Unit: contracts · Missing values: 0 when the level is unused · Source: sample file only | |
| L5Orders | integeri64 | Number of orders at book level 5. Missing from the guide's table. Unit: count · Missing values: 0 when the level is unused · Source: sample file only | |
| L6Price | number | Price at book level 6 (level 1 is the best price; bids fall and asks rise with level). Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L6Size | integeri64 | Contracts resting at book level 6. Unit: contracts · Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L6Orders | integeri64 | Number of orders at book level 6. Unit: count · Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L7Price | number | Price at book level 7 (level 1 is the best price; bids fall and asks rise with level). Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L7Size | integeri64 | Contracts resting at book level 7. Unit: contracts · Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L7Orders | integeri64 | Number of orders at book level 7. Unit: count · Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L8Price | number | Price at book level 8 (level 1 is the best price; bids fall and asks rise with level). Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L8Size | integeri64 | Contracts resting at book level 8. Unit: contracts · Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L8Orders | integeri64 | Number of orders at book level 8. Unit: count · Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L9Price | number | Price at book level 9 (level 1 is the best price; bids fall and asks rise with level). Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L9Size | integeri64 | Contracts resting at book level 9. Unit: contracts · Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L9Orders | integeri64 | Number of orders at book level 9. Unit: count · Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L10Price | number | Price at book level 10 (level 1 is the best price; bids fall and asks rise with level). Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L10Size | integeri64 | Contracts resting at book level 10. Unit: contracts · Missing values: 0 when the level is unused · Source: vendor guide and sample | |
| L10Orders | integeri64 | Number of orders at book level 10. Unit: count · Missing values: 0 when the level is unused · 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: UTCDate, UTCTime, Ticker, Side, Flags) must be 0
- errorL10Size_non_negativeaccuracy
L10Size is never negative.
SELECT COUNT(*) FROM {object} WHERE L10Size < 0 - errorL1Size_non_negativeaccuracy
L1Size is never negative.
SELECT COUNT(*) FROM {object} WHERE L1Size < 0 - errorL2Size_non_negativeaccuracy
L2Size is never negative.
SELECT COUNT(*) FROM {object} WHERE L2Size < 0 - errorL3Size_non_negativeaccuracy
L3Size is never negative.
SELECT COUNT(*) FROM {object} WHERE L3Size < 0 - errorL4Size_non_negativeaccuracy
L4Size is never negative.
SELECT COUNT(*) FROM {object} WHERE L4Size < 0 - errorL5Size_non_negativeaccuracy
L5Size is never negative.
SELECT COUNT(*) FROM {object} WHERE L5Size < 0 - errorL6Size_non_negativeaccuracy
L6Size is never negative.
SELECT COUNT(*) FROM {object} WHERE L6Size < 0 - errorL7Size_non_negativeaccuracy
L7Size is never negative.
SELECT COUNT(*) FROM {object} WHERE L7Size < 0 - errorL8Size_non_negativeaccuracy
L8Size is never negative.
SELECT COUNT(*) FROM {object} WHERE L8Size < 0 - errorL9Size_non_negativeaccuracy
L9Size is never negative.
SELECT COUNT(*) FROM {object} WHERE L9Size < 0
Delivery
S3 flat files
AlgoSeek flat-file delivery (the layout the schema below describes).
- Layout:
- Plain-text CSV with a fixed header row, gzip-compressed (.csv.gz, about 8:1); by default one file per symbol per trading day (UTC 00:00-24:00); guide example: ticker GEH3 on 2019-09-09. No bucket, path or file-name pattern is given.
- Compression:
- gzip
- Access:
- Bucket access is granted per subscription; bucket names arrive with license provisioning.
REST API
AlgoSeek Datasets REST API (X-API-KEY header; JSON, CSV or gzipped CSV). Returns AlgoSeek's normalized API layout, which differs from the flat-file columns in this contract's schema.
https://api.algoseek.com/v1/data/us-futures/multiple-depth/:trade_date/:identifier
- Authentication:
- X-API-KEY header issued by AlgoSeek
- Response formats:
- json, csv, csv_gzip
- Pagination:
- offset + limit; tick endpoints take trade_date and identifier (Ticker or ASID) in the path
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.