US Equities OTC Quote
One row is one quote record from the OTC Link inter-dealer quotation system (individual market-participant quote events plus derived inside-market quotes), as compiled in OTC Markets Group's end-of-day Quote History file. Used to study quoting activity in OTC securities.
How to use it
Times are local US Eastern clock times (DST-aware), not UTC. Treat TRADE NB / NBBO-flagged rows as the backtest-grade subset. Cancellations reference earlier trades and can arrive hours later, so aggregate only after the session closes. Prices are unadjusted unless the dataset name says Adjusted; join us-equities-*-adjustment-factors on SecId for adjustment.
Typical use
Backtesting, execution and microstructure research, feature engineering for US equities.
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. Sample channel: S3 CSV (sample_channel s3/cloud_storage, eq_otc_taq.csv, 100 rows, GBRRF on 2024-01-25); no ArdaDB table sample. The JSON preview is identical to the CSV. Mixed record kinds in one table: QuoteUpdateType 6 rows are derived OTC Link inside-market quotes (MMID and Trader blank, InsideReason set); types 1-5 are individual participant quote events. Filter by type before aggregating sizes to avoid double counting. Blank semantics per guide: MMID, Trader and InsideReason are Blank (empty) where not applicable (MMID/Trader empty on type 6; InsideReason empty on types 1-5); all other fields are 'Never' missing. Unpriced sides use Type U with Price 0 and Size 0 (not empty). In the sample all 34 type-6 rows immediately follow an individual-quote row with the same Timestamp and a QuoteId 3 higher; not every individual update produces an inside row (only when the inside changes), and an inside size can aggregate several participants (e.g. AskSize 2000 vs 1000).
Coverage
All quotes submitted to the OTC Link inter-dealer quotation system and distributed in OTC Markets Group's OTC Quote History file; inside quotes cover quotes entered in OTC Link only (other inter-dealer systems are excluded). History start is not stated.
Venues (1)
- OTC Link (OTC Markets Group inter-dealer quotation system)
Answers to common questions
- What time zone are the timestamps in?
- US Eastern local time with daylight saving (the guides label it EST/ET).
- Are prices adjusted for splits and dividends?
- Only in datasets whose name contains Adjusted; all others are as traded.
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 (7)
- Primary key is inferred; AlgoSeek's guide does not name one.
- Documentation discrepancyUnsolicitedFlag: guide documents only '1 = Unsolicited Flag True'; every sample row is '0' (an undocumented value, presumably false).
- Documentation discrepancyBidType/AskType: guide lists A, U and OW (bid) / BW (ask); the sample only shows A and U.
- Documentation discrepancyTimestamp: the field table gives no time zone; only the trading-hours section mentions ET. Sample start-of-day records are stamped 00:50:04.760, outside the stated OTC Link hours (06:00-17:00 ET).
- Documentation discrepancyQuoteId is described as 'unique' without a scope; in the sample it is unique per row and rises with time, and each update of the same participant's quote (e.g. MCAP) carries a new QuoteId, so it behaves like a record sequence number rather than a stable id for one quote across its updates.
- Documentation discrepancyPrice precision text (4 decimals under $1, 2 above) is a maximum; sample prices such as 0.742, 0.43 and 0.0001 show 1-4 decimals and unpriced sides are 0.
- Documentation discrepancyNo history start date is given in the guide or on the page; the guide cites 2023-10-25 as an example date and the sample is 2024-01-25.
17 columns in delivery order · file or table name eq_otc_taq. Types are ODCS logical types; the format line shows how values are written.
| Column | Type | Key | Description |
|---|---|---|---|
| TradeDate | dateyyyymmdd | Key 1 · Partition · Required | Trading date of the quote record. Missing values: Never · Source: vendor guide and sample |
| Timestamp | timeHH:MM:SS.mmm | Quote time of day to the millisecond; zone not stated in the field table (guide's trading-hours section uses ET). Missing values: Never · Source: vendor guide and sample | |
| QuoteUpdateType | integer · enum (6)i64 | Required | Record type of the quote: update, add, delete, start-of-day, open/close update, or inside-market quote. Missing values: Never · Source: vendor guide and sample 6 allowed values
|
| Ticker | string | Key 2 · Partition · Required | Security symbol. Missing values: Never · Source: vendor guide and sample |
| Name | string | Required | Security name. Missing values: Never · Source: vendor guide and sample |
| BidType | string · enum (3) | Kind of bid: priced, unpriced, or offer wanted. Missing values: Never · Source: vendor guide and sample 3 allowed values
| |
| BidPrice | number | Required | Bid price: 4 decimals under $1, 2 above; minimum $0.0001, maximum $999,999.99; 0 when the bid is unpriced. Unit: USD · Missing values: Never · Source: vendor guide and sample |
| BidSize | integeri64 | Required | Bid size in shares, at most 999,999,999; 0 when unpriced. Unit: shares · Missing values: Never · Source: vendor guide and sample |
| AskType | string · enum (3) | Kind of ask: priced, unpriced, or bid wanted. Missing values: Never · Source: vendor guide and sample 3 allowed values
| |
| AskPrice | number | Required | Ask price: 4 decimals under $1, 2 above; minimum $0.0001, maximum $999,999.99; 0 when the ask is unpriced. Unit: USD · Missing values: Never · Source: vendor guide and sample |
| AskSize | integeri64 | Required | Ask size in shares, at most 999,999,999; 0 when unpriced. Unit: shares · Missing values: Never · Source: vendor guide and sample |
| UnsolicitedFlag | string · enum (2)0/1 flag | 1 marks an unsolicited quote; the sample only ever shows 0. Missing values: Never · Source: vendor guide and sample 2 allowed values
| |
| MMID | string | Market participant that submitted the quote; blank on inside quotes (QuoteUpdateType 6). Missing values: Blank · Source: vendor guide and sample | |
| Trader | string | Trader id of the submitting trader; blank on inside quotes (QuoteUpdateType 6). Missing values: Blank · Source: vendor guide and sample | |
| OpenCloseStatus | integer · enum (2)i64 | Required | Whether the quote is open (1) or closed (0); only open quotes feed the inside market. Missing values: Never · Source: vendor guide and sample 2 allowed values
|
| QuoteId | integeri64 | Key 3 · Required | Unique quote identification number; every one of the 100 sample rows has a different value. Missing values: Never · Source: vendor guide and sample |
| InsideReason | string · enum (5) | Why the inside market changed; populated only when QuoteUpdateType is 6, otherwise blank. Missing values: Blank · Source: vendor guide and sample 5 allowed values
|
- 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: TradeDate, Ticker, QuoteId) must be 0
- errorAskSize_non_negativeaccuracy
AskSize is never negative.
SELECT COUNT(*) FROM {object} WHERE AskSize < 0 - errorBidSize_non_negativeaccuracy
BidSize is never negative.
SELECT COUNT(*) FROM {object} WHERE BidSize < 0
Delivery
S3 flat files
AlgoSeek flat-file delivery (the layout the schema below describes).
- Layout:
- Plain-text CSV with a fixed header row; by default one file per symbol per trading day (e.g. all AAALY events on 2023-10-25 in one file); gzip-compressed (.csv.gz, ~8:1). Source is the OTC Markets Group SFTP server; no bucket/key path is documented.
- 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-equity/otc-taq/: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.