US Equities OTC Security Master
One row per algoseek ASID holding the complete history of each OTC security attribute (symbol, names, class, type, status, ISIN, FIGI, share-class FIGI, LEI, OTC SecIds/CompIds) as semicolon-separated values paired with date-range columns. Used to track symbol/name changes and cross-reference OTC securities.
How to use it
Rows are effective-dated. Answer point-in-time questions with the row in force on the as-of date, never the latest row. SecId and ASID are both durable AlgoSeek security keys but different values (the ASID lookup links them); tickers are reused across companies, so resolve a ticker to a key with a trade date.
Typical use
Point-in-time security identity, corporate-action adjustment, and universe construction for US equities.
Limitations
Vendor-curated reference data: rows can be restated when AlgoSeek learns of a late or corrected event, so land each delivery as a snapshot rather than overwriting history. Shape: this is a 'history in one row' table. Each attribute X is a list column paired with XDateRange; the i-th element of X applies to the i-th StartDate:EndDate of XDateRange. Parse by splitting on ';' and then the range on ':'; keep empty elements (they are meaningful 'no value' periods). Attributes have independent period boundaries, so do not zip lists of different attributes together. Point-in-time lookup: for date D, take the element whose StartDate <= D <= EndDate. End dates are inclusive per the guide example. 29991231 is a sentinel for open-ended, not a real date; when a value changes the sentinel is replaced by the real end date, so the same ASID row mutates over time (no row-level version columns). Identifiers: ASID is algoseek's stable key (sample values are 16-digit, prefix 121; listed-equity ASIDs in other datasets start 101). OTCSecId/OTCCompId are OTC Markets Group IDs and one ASID can hold several OTCSecIds (reverse splits, name changes; 11 of 100 sample rows). The OTC Market Compliance dataset's SecId and CompId are these OTC Markets IDs; join to this table via OTCSecId/OTCCompId element ranges, not to ASID directly. Cross-reference identifiers: ISIN comes from algoseek internal lookups on the OTC ticker; FIGI (composite) and ShareClassFIGI come from the OpenFIGI API; LEI is mapped from ISIN using GLEIF files, so a security without an ISIN has no LEI. These identifier fields refresh only in the PM update.
Coverage
All OTC securities, November 1, 2024 to present with daily updates. Built from OTC Markets Compliance Data, algoseek ISIN lookups, OpenFIGI, GLEIF ISIN-to-LEI mappings and FINRA Daily List links; related SecIds changed through corporate actions are joined under one ASID using the OTC Corporate Actions dataset.
Venues (1)
- OTC (OTCBB and Other OTC)
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 discrepancyEvery page of the guide carries the running title 'US Equities OTC Corporate Actions Guide' although the cover and content are the OTC Security Master guide (copy-paste error); the file name and cover identify the Security Master.
- Documentation discrepancyGuide Table 2 types the Ticker list as 'tricker1;ticker2' (typo) and describes ShareClassFIGIDateRange as 'for each FIGI'; FIGI is described as a composite FIGI and ShareClassFIGI as a 'global' FIGI.
- Documentation discrepancyGuide Table 2 marks Ticker, SecurityClass, SecurityType, ISIN, FIGI, ShareClassFIGI and LEI as 'Blank' (field may be empty) and every DateRange as 'Never', while Key Concepts says empty values are valid data tracked with their own date ranges; the sample confirms an empty value field can have a populated range (LEI blank in 75 of 100 rows, LEIDateRange always set) and empty list…
- Documentation discrepancyIn 2 of 100 sample rows (ASID 1210000000022635 and 1210000000022668) SecurityClass is an empty string while SecurityClassDateRange has two periods, so a fully-empty list does not repeat delimiters; for all other attributes list and range have the same element count.
- Documentation discrepancyGuide Table 2 describes SecurityStatus as 'e.g., active, suspended, delisted' but Key Concepts defines six codes (A, S, H, I, R, D); the sample only has A, D and H.
- Documentation discrepancyGuide does not enumerate SecurityType values (examples only); the sample shows eight values including 'Ordinary Shares', 'Other Security Type' and 'Exchange-Traded Fund'.
- Documentation discrepancyGuide implies a continuous timeline per attribute, but sample ranges for one attribute are not always contiguous: gaps of 2-4 days (weekends/holidays) and 51-116 days occur (e.g. Ticker 20241206:20251208;20260128:29991231), and SecurityStatus can run to 29991231 as D after the Ticker/ISIN ranges have ended.
25 columns in delivery order · file or table name eq_otc_sec_master. Types are ODCS logical types; the format line shows how values are written.
| Column | Type | Key | Description |
|---|---|---|---|
| ASID | integeri64 | Key 1 · Required | algoseek unique security identifier, retained across symbol changes, name changes and corporate actions; one row per ASID. Missing values: Never · Source: vendor guide and sample |
| OTCSecId | stringsemicolon-separated list, one element per period | Required | OTC Markets Group SecIds related to the security structure; several when SecId changed through corporate actions such as reverse splits. Missing values: Never · Source: vendor guide and sample |
| OTCSecIdDateRange | stringyyyymmdd:yyyymmdd;... (StartDate:EndDate per period, 29991231 = still active) | Required | Start:end dates for each element of OTCSecId; end date 29991231 means the value is still in use. Missing values: Never · Source: vendor guide and sample |
| OTCCompId | stringsemicolon-separated list, one element per period | Required | OTC Markets Group company identifiers related to the issuer; may list several. Missing values: Never · Source: vendor guide and sample |
| OTCCompIdDateRange | stringyyyymmdd:yyyymmdd;... (StartDate:EndDate per period, 29991231 = still active) | Required | Start:end dates for each element of OTCCompId; end date 29991231 means the value is still in use. Missing values: Never · Source: vendor guide and sample |
| Ticker | stringsemicolon-separated list, one element per period | All symbols the security has used, oldest first; repeats allowed when a symbol is reused (e.g. WNFT;WNFTD;WNFT). Missing values: Blank · Source: vendor guide and sample | |
| TickerDateRange | stringyyyymmdd:yyyymmdd;... (StartDate:EndDate per period, 29991231 = still active) | Required | Start:end dates for each element of Ticker; end date 29991231 means the value is still in use. Missing values: Never · Source: vendor guide and sample |
| SecurityName | stringsemicolon-separated list, one element per period | Required | Security names over time (OTC Markets short-form upper-case names in sample). Missing values: Never · Source: vendor guide and sample |
| SecurityNameDateRange | stringyyyymmdd:yyyymmdd;... (StartDate:EndDate per period, 29991231 = still active) | Required | Start:end dates for each element of SecurityName; end date 29991231 means the value is still in use. Missing values: Never · Source: vendor guide and sample |
| CompanyName | stringsemicolon-separated list, one element per period | Required | Company (issuer) names over time. Missing values: Never · Source: vendor guide and sample |
| CompanyNameDateRange | stringyyyymmdd:yyyymmdd;... (StartDate:EndDate per period, 29991231 = still active) | Required | Start:end dates for each element of CompanyName; end date 29991231 means the value is still in use. Missing values: Never · Source: vendor guide and sample |
| SecurityClass | stringsemicolon-separated list, one element per period | Security class (e.g. A, B, C) over time; blank in 93 of 100 sample rows. Missing values: Blank · Source: vendor guide and sample | |
| SecurityClassDateRange | stringyyyymmdd:yyyymmdd;... (StartDate:EndDate per period, 29991231 = still active) | Start:end dates for each element of SecurityClass; end date 29991231 means the value is still in use. Missing values: Never · Source: vendor guide and sample | |
| SecurityType | stringsemicolon-separated list, one element per period | Security type over time (e.g. common, unit, warrant); sample values include Common Stock, Ordinary Shares, Warrants, Units. Missing values: Blank · Source: vendor guide and sample | |
| SecurityTypeDateRange | stringyyyymmdd:yyyymmdd;... (StartDate:EndDate per period, 29991231 = still active) | Required | Start:end dates for each element of SecurityType; end date 29991231 means the value is still in use. Missing values: Never · Source: vendor guide and sample |
| SecurityStatus | string · enum (6)semicolon-separated list, one element per period | Trading-status codes over time, e.g. A;D or A;H;A. Missing values: Never · Source: vendor guide and sample 6 allowed values
| |
| SecurityStatusDateRange | stringyyyymmdd:yyyymmdd;... (StartDate:EndDate per period, 29991231 = still active) | Required | Start:end dates for each element of SecurityStatus; end date 29991231 means the value is still in use. Missing values: Never · Source: vendor guide and sample |
| ISIN | stringsemicolon-separated list, one element per period | ISIN codes over time; an empty element means no ISIN during that period (e.g. ';US5147005418'). Missing values: Blank · Source: vendor guide and sample | |
| ISINDateRange | stringyyyymmdd:yyyymmdd;... (StartDate:EndDate per period, 29991231 = still active) | Required | Start:end dates for each element of ISIN; end date 29991231 means the value is still in use. Missing values: Never · Source: vendor guide and sample |
| FIGI | stringsemicolon-separated list, one element per period | Composite FIGI codes over time (OpenFIGI); empty elements allowed. Missing values: Blank · Source: vendor guide and sample | |
| FIGIDateRange | stringyyyymmdd:yyyymmdd;... (StartDate:EndDate per period, 29991231 = still active) | Required | Start:end dates for each element of FIGI; end date 29991231 means the value is still in use. Missing values: Never · Source: vendor guide and sample |
| ShareClassFIGI | stringsemicolon-separated list, one element per period | Share-class (global) FIGI codes over time (OpenFIGI); empty elements allowed. Missing values: Blank · Source: vendor guide and sample | |
| ShareClassFIGIDateRange | stringyyyymmdd:yyyymmdd;... (StartDate:EndDate per period, 29991231 = still active) | Start:end dates for each element of ShareClassFIGI; end date 29991231 means the value is still in use. Missing values: Never · Source: vendor guide and sample | |
| LEI | stringsemicolon-separated list, one element per period | Legal Entity Identifiers over time, mapped from ISIN via GLEIF; blank in 75 of 100 sample rows. Missing values: Blank · Source: vendor guide and sample | |
| LEIDateRange | stringyyyymmdd:yyyymmdd;... (StartDate:EndDate per period, 29991231 = still active) | Start:end dates for each element of LEI; end date 29991231 means the value is still in use. Missing values: Never · 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
- errorprimary_key_uniqueuniqueness
The declared primary key is unique within each delivered partition (one file or table snapshot).
duplicateValues (properties: ASID) must be 0
Delivery
S3 flat files
AlgoSeek flat-file delivery (the layout the schema below describes).
- Layout:
- Single gzip-compressed CSV, file name eq_otc_sec_master.csv.gz; fixed header in the first row; records sorted by ASID.
- Compression:
- gzip
- Access:
- Bucket access is granted per subscription; bucket names arrive with license provisioning.
Service levels
- History starts
- 2024-11-01
- First trade date of the vendor history.
- Update frequency
- Daily
- Retention
- Bounded by the license term
- Retention of landed copies is bounded by the AlgoSeek license; purge on termination.
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.