US Equities OTC Corporate Actions
One row per corporate-action record for OTC equities from FINRA's OTC Equities Daily List: security additions, changes and deletions plus dividend/distribution/split additions, changes and cancellations, with old and new symbol, name, class, round lot, market category and regulatory attributes. Used for symbol/name tracking and price adjustment.
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. No SecId, ASID, CUSIP or ISIN in this dataset: securities are identified only by OldTicker/NewTicker plus names. The OTC Security Master uses this dataset to join related OTC SecIds under one ASID, so link to it by ticker and date, and expect ticker reuse. Event model by CorporateActionCode: SA adds a security to the OTC master (SecurityAddFlag=Y), SD removes it (SecurityDeleteFlag=Y, NewTicker blank), SC changes attributes with Old*/New* pairs (ChangeSecurityAttributeFlag=Y), DA announces a dividend/distribution/split, DC revises one, DD cancels one. Flags agree with codes in the sample (SA/SD/SC rows carry the matching flag; DA/DC/DD rows carry none). SA/SD describe membership of the OTC Equity Security Master, not listing direction: in the sample, 'Market Center Change Delisted from NYSE' is an SA (the security appears on OTC) and 'Market Center Change Listed on NASDAQ' is an SD (it leaves OTC). A DD record repeats the DividendId of the DA it cancels but has its own CorporateActionId and a note such as 'will reannounce' (sample: FBSE and RGBP); a cancelled action may be re-announced later with a new DividendId. DC rows in the sample have their own DividendIds.
Coverage
OTC securities from 2014-11-17 to present with daily updates. FINRA Daily List archives supply 2014-11-17 to 2018-12-17; the FINRA public API supplies 2018-12-18 onward. The feed format changed on 2018-12-18, and several fields exist only from then on.
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)
- Documentation discrepancyGuide marks CorporateActionCode, CorporateActionId, DividendADRFlag, DividendNonADRFlag, SecurityAddFlag, SecurityDeleteFlag, BankruptcyFlag and all Change*Flag fields as Missing = 'Never', but also says every (*) field is always blank before 2018-12-18; 'Never' holds only for post-2018-12-18 records.
- Documentation discrepancyGuide FAQ says 'all eleven Change...Flag fields' but only eight columns are named Change*Flag; eleven is reached only if SecurityAddFlag, SecurityDeleteFlag and BankruptcyFlag are counted.
- Documentation discrepancyAdjustmentFactor is empty in every sample row and the guide says it is always empty in this version, although the intro says the dataset supports historical price adjustment; adjustment must be derived from SplitRatio, ReverseSplitRatio and CashAmount.
- Documentation discrepancyGuide Appendix B lists near-duplicate reason strings (Failure to Comply w/with FINRA Rule 6530; Rule 15c-211 vs 15c2-11; Forward Split Cusip Change vs Forward Split/CUSIP Change; Reverse Split/Cusip Change vs /CUSIP; 12(j) Registration vs 12(j)Registration).
- Documentation discrepancyGuide leaves several code sets undocumented that appear in the sample: DividendTypeCode (CD, RS, SD, FS), PaymentMethod (PUS, MOD), OldMarketCategory 'u', FinancialStatus (N, M), DividendCriteria (Yes, No, Unknown), and the Y/N flag values.
- Documentation discrepancyGuide Table 1 gives EffectiveTime Missing = 'Blank'; the sample EffectiveTime is populated in every row, with 00:00:00 in 81 of 83, so 00:00:00 acts as 'no time' rather than a real timestamp (same for AnnounceTime).
- Documentation discrepancySample Notes field contains an HTML-escaped character ('Prdct chng OTCE-OTCE>UTP-NSDQ'); the guide says nothing about escaping.
- Documentation discrepancyHeader name ADRWitholdingTaxPercentage is spelled with one 'h' in both guide and sample (not corrected here; do not 'fix' it in a contract).
62 columns in delivery order · file or table name eq_otc_corp_actions. Types are ODCS logical types; the format line shows how values are written.
| Column | Type | Key | Description |
|---|---|---|---|
| AnnounceDate | dateyyyymmdd | Required | Date the corporate action was announced, i.e. published on the FINRA OTC Equities Daily List. Missing values: Never · Source: vendor guide and sample |
| AnnounceTime | timeHH:MM:SS | Time the corporate action was announced; 00:00:00 appears in 13 of 83 sample rows (likely a default). Missing values: Never · Source: vendor guide and sample | |
| EffectiveDate | dateyyyymmdd | Date the action takes effect (e.g. symbol change official date, dividend ex-date). Missing values: Blank · Source: vendor guide and sample | |
| EffectiveTime | timeHH:MM:SS | Time the action takes effect; 00:00:00 in 81 of 83 sample rows. Missing values: Blank; Always blank before 2018-12-18 (legacy FINRA format). · Source: vendor guide and sample | |
| CorporateActionCode | string · enum (6) | Event type code, one of six values; see CorporateActionCode. Missing values: Never (guide), but always blank before 2018-12-18 · Source: vendor guide and sample 6 allowed values
| |
| CorporateActionReason | string | Required | More detailed reason for the action; one of 82 listed values (guide Appendix B). Missing values: Never · Source: vendor guide and sample |
| CorporateActionId | integeri64 | Key 1 · Required | Unique numeric identifier of each corporate action record. Missing values: Never (guide), but always blank before 2018-12-18 · Source: vendor guide and sample |
| OldTicker | string | Required | Symbol before the effective date of the action. Missing values: Never · Source: vendor guide and sample |
| NewTicker | string | Symbol from the effective date; blank for deletions (SD) and dividend cancellations (DD) in sample. Missing values: Blank · Source: vendor guide and sample | |
| OldSecurityClass | string | Security class before the effective date. Missing values: Blank · Source: vendor guide and sample | |
| NewSecurityClass | string | Security class from the effective date. Missing values: Blank · Source: vendor guide and sample | |
| OldSecurityName | string | Required | Security name before the effective date. Missing values: Never · Source: vendor guide and sample |
| NewSecurityName | string | Security name from the effective date. Missing values: Blank · Source: vendor guide and sample | |
| DividendTypeCode | string | Type of dividend announced; codes CD, RS, SD, FS occur in sample but are not enumerated in the guide. Missing values: Blank · Source: vendor guide and sample | |
| DividendTypeDescription | string | Descriptive name of the dividend type (Cash Dividend, Reverse Split, Stock Dividend, Forward Split in sample). Missing values: Blank; Always blank before 2018-12-18 (legacy FINRA format). · Source: vendor guide and sample | |
| DeclarationDate | dateyyyymmdd | Date the issuer declared or approved the action. Missing values: Blank · Source: vendor guide and sample | |
| RecordDate | dateyyyymmdd | Date the company's books close to determine holders entitled to the distribution. Missing values: Blank · Source: vendor guide and sample | |
| PaymentDate | dateyyyymmdd | Date the payment is sent to the record owner. Missing values: Blank · Source: vendor guide and sample | |
| PaymentMethod | string | Method of receiving a new distribution (surrender certificates or not); PUS and MOD occur in sample, undocumented. Missing values: Blank · Source: vendor guide and sample | |
| StockPercentage | number | Distribution amount expressed as a percentage per share. Unit: percent · Missing values: Blank · Source: vendor guide and sample | |
| CashAmount | number | Distribution amount as cash per share; currency not stated. Missing values: Blank · Source: vendor guide and sample | |
| DividendId | integeri64 | Unique numeric identifier of the dividend event; a DD row repeats the DividendId of the dividend it cancels (sample). Missing values: Blank; Always blank before 2018-12-18 (legacy FINRA format). · Source: vendor guide and sample | |
| DividendADRFlag | stringY/N (per sample) | Whether the security whose dividend, split or distribution is announced is an ADR. Missing values: Never (guide), but always blank before 2018-12-18 · Source: vendor guide and sample | |
| DividendNonADRFlag | stringY/N (per sample) | Whether the security whose dividend, split or distribution is announced is NOT an ADR. Missing values: Never (guide), but always blank before 2018-12-18 · Source: vendor guide and sample | |
| ADRGrossRate | number | ADR gross dividend cash amount. Missing values: Blank · Source: vendor guide and sample | |
| ADRNetRate | number | ADR net dividend cash amount. Missing values: Blank · Source: vendor guide and sample | |
| ADRFeeAmount | number | Fee charged by the depository bank for processing the dividend. Missing values: Blank · Source: vendor guide and sample | |
| ADRTaxReliefAmount | number | Fee charged by the depository bank for tax purposes; empty in all 83 sample rows. Missing values: Blank · Source: vendor guide and sample | |
| ADRWitholdingTaxPercentage | number | ADR tax percent withheld on the distribution; header spelling 'Witholding' is as published. Unit: percent · Missing values: Blank · Source: vendor guide and sample | |
| ADRIssuanceFeeAmount | number | Fee for issuing additional ADRs to current holders; empty in all 83 sample rows. Missing values: Blank · Source: vendor guide and sample | |
| DividendCriteria | string | Whether the distribution meets the criteria for lower capital-gains tax; Yes, No, Unknown in sample. Missing values: Blank · Source: vendor guide and sample | |
| SplitRatio | stringnew:old, e.g. 2.4:1 (per sample) | New and old share amounts resulting from a stock split. Missing values: Blank · Source: vendor guide and sample | |
| ReverseSplitRatio | stringnew:old, e.g. 1:15 (per sample) | New and old share amounts resulting from a reverse stock split. Missing values: Blank · Source: vendor guide and sample | |
| AdjustmentFactor | number | Adjustment factor for the action; guide says it is always empty in this dataset version. Missing values: Blank (always empty in this version) · Source: vendor guide and sample | |
| CorporateActionIndicator | string · enum (2) | Indicates a corporate action without (CA) or with (CD) a distribution. Missing values: Blank · Source: vendor guide and sample 2 allowed values
| |
| OldADRRatio | stringratio, e.g. 1:20 (per sample) | Ratio of ADR shares to underlying shares before the effective date. Missing values: Blank · Source: vendor guide and sample | |
| NewADRRatio | stringratio, e.g. 1:20 (per sample) | Ratio of ADR shares to underlying shares from the effective date. Missing values: Blank · Source: vendor guide and sample | |
| OldRoundLot | integeri64 | Required | Round lot size before the effective date. Unit: shares · Missing values: Never · Source: vendor guide and sample |
| NewRoundLot | integeri64 | Round lot size from the effective date. Unit: shares · Missing values: Blank · Source: vendor guide and sample | |
| OldMaturityDate | dateyyyymmdd | Maturity date before the effective date, if applicable. Missing values: Blank · Source: vendor guide and sample | |
| NewMaturityDate | dateyyyymmdd | Maturity date from the effective date, if applicable. Missing values: Blank · Source: vendor guide and sample | |
| OldMarketCategory | string | Whether the security was other-OTC or OTCBB before the effective date; sample value 'u' is not explained. Missing values: Never · Source: vendor guide and sample | |
| NewMarketCategory | string | Whether the security is other-OTC or OTCBB from the effective date. Missing values: Blank · Source: vendor guide and sample | |
| OldFinancialStatus | string | Financial status code before the effective date; N and M occur in sample, undocumented. Missing values: Blank · Source: vendor guide and sample | |
| NewFinancialStatus | string | Financial status code from the effective date. Missing values: Blank · Source: vendor guide and sample | |
| OldOATSFlag | stringY/N (per sample) | Required | Whether trades were OATS-reportable before the effective date. Missing values: Never · Source: vendor guide and sample |
| NewOATSFlag | stringY/N (per sample) | Whether trades are OATS-reportable from the effective date. Missing values: Blank · Source: vendor guide and sample | |
| OldRegFeeFlag | stringY/N (per sample) | Required | Whether a regulatory transaction fee applied before the effective date. Missing values: Never · Source: vendor guide and sample |
| NewRegFeeFlag | stringY/N (per sample) | Whether a regulatory transaction fee applies from the effective date. Missing values: Blank · Source: vendor guide and sample | |
| OfferingType | string | Required | Whether the security is 144A, Reg S or freely tradable ('No Restrictions', '144A', 'Reg S' in sample). Missing values: Never · Source: vendor guide and sample |
| SecurityAddFlag | stringY/N (per sample) | Y when the record is a security addition event (SA). Missing values: Never (guide), but always blank before 2018-12-18 · Source: vendor guide and sample | |
| SecurityDeleteFlag | stringY/N (per sample) | Y when the record is a security deletion event (SD). Missing values: Never (guide), but always blank before 2018-12-18 · Source: vendor guide and sample | |
| BankruptcyFlag | stringY/N (per sample) | Whether the security is flagged for bankruptcy. Missing values: Never (guide), but always blank before 2018-12-18 · Source: vendor guide and sample | |
| ChangeFinancialStatusFlag | stringY/N (per sample) | Required | Whether the financial status of the security changed. Missing values: Never (guide), but always blank before 2018-12-18 · Source: vendor guide and sample |
| ChangeOATSFlag | stringY/N (per sample) | Required | Whether the OATS-reportable status changed. Missing values: Never (guide), but always blank before 2018-12-18 · Source: vendor guide and sample |
| ChangeOTCBBQuoteFlag | stringY/N (per sample) | Required | Whether the OTCBB quote status changed. Missing values: Never (guide), but always blank before 2018-12-18 · Source: vendor guide and sample |
| ChangeRegFeeFlag | stringY/N (per sample) | Required | Whether the regulatory fee status changed. Missing values: Never (guide), but always blank before 2018-12-18 · Source: vendor guide and sample |
| ChangeRoundLotFlag | stringY/N (per sample) | Required | Whether the round lot quantity changed. Missing values: Never (guide), but always blank before 2018-12-18 · Source: vendor guide and sample |
| ChangeSecurityAttributeFlag | stringY/N (per sample) | Required | Whether a security attribute changed; Y on all SC rows in sample. Missing values: Never (guide), but always blank before 2018-12-18 · Source: vendor guide and sample |
| ChangeSecurityNameFlag | stringY/N (per sample) | Required | Whether the security name changed. Missing values: Never (guide), but always blank before 2018-12-18 · Source: vendor guide and sample |
| ChangeTickerFlag | stringY/N (per sample) | Required | Whether the symbol changed. Missing values: Never (guide), but always blank before 2018-12-18 · Source: vendor guide and sample |
| Notes | string | Free-text comments on the corporate action; may contain HTML-escaped characters (> in sample). Missing values: Blank · 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: CorporateActionId) must be 0
Delivery
S3 flat files
AlgoSeek flat-file delivery (the layout the schema below describes).
- Layout:
- gzip-compressed CSV, one file per announcement trading day named yyyymmdd.csv.gz (yyyymmdd = announcement date in the OTC Equities Daily List); fixed header first; records sorted by AnnounceDate, AnnounceTime, EffectiveDate, EffectiveTime.
- Compression:
- gzip
- Access:
- Bucket access is granted per subscription; bucket names arrive with license provisioning.
Service levels
- History starts
- 2014-11-17
- 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.