quantlab.dataset.sharadar.actions#

Sharadar corporate actions (ACTIONS) as a daily panel by family, keyed by permaticker.

ACTIONS holds one row per security, action and date: a dividend, a split, a takeover, a delisting, a ticker change. Its action column takes one of 66 names, most of them a handful of rows (30-odd acquisition* names record the exact consideration of single deals). SharadarActionsDataset folds them into families, one variable or a few per family, each row placed on its effective date (date; for a takeover or a delisting the security’s last trading day): on the first SEP trading day on or after it, and on no other day (quantlab.dataset.sharadar.filings.FilingPanelDataset). A day without the action is NaN for a value and False for a flag.

The families and the vendor names in each (FAMILIES), with what each value means as Sharadar’s descriptions table (actiontypes rows, 2026-10-16) states it:

  • dividend (dividend): cash per share paid on the ex-date, USD. The vendor adjusts the value for every split it had applied when the file was pulled; the panel multiplies it back by the ratios of the security’s ACTIONS split rows dated after the ex-date and before the file’s pull day (quantlab.dataset.sharadar.tables.split_basis_change), so it is the cash per share held on the day. Several on one day are summed.

  • split (split): shares held after the split per share held before, on its effective date. Several on one day are multiplied.

  • spinoff (spinoff, spunofffrom): spun-off shares issued per parent share, on the parent (spinoff) and on the spun-off security (spunofffrom); spinoff_value (spinoffdividend) the USD value of those shares per parent share, restored for later splits like a dividend; spinoff_counterparty the other side’s permaticker; spinoff_side 1 parent, 2 spun off, 3 both.

  • acquisition (acquisitionby on the acquired company, acquisitionof on the acquirer): the acquired company’s final market cap, USD millions; acquisition_counterparty the other side’s permaticker; acquisition_side 1 acquired, 2 acquirer, 3 both; acquisition_consideration what the acquired company’s holders received, from every other acquisition* row of the day: 1 cash, 2 stock, 3 mixed (several kinds), 4 other (warrants, special securities). A consideration row also follows a merger.

  • merger (mergerto on the non-surviving company, mergerfrom on the survivor): the non-surviving company’s final market cap, USD millions; merger_counterparty; merger_side 1 non-surviving, 2 surviving, 3 both.

  • delisting (delisted, regulatorydelisting, voluntarydelisting, bankruptcyliquidation): the final market cap, USD millions (empty when the security is not the company’s primary common stock); delisting_reason 1 delisted, 2 regulatory, 3 voluntary, 4 bankruptcy or liquidation, the largest when several.

  • flags, True on the action’s day: listed, initiated (coverage start of an already listed security), ticker_change, name_change, exchange_change, sic_change (each from its ...from/...to pair), spac_merger, spac_unit_separation, relation, reorganization (reorganizationfrom, reorganizationto, reorganizationpostsplitcommon) and equity_cancellation.

adrratiosplit (a split of an ADR’s ratio) is read and left out: ADRs are outside the panel’s universe and SEP’s prices do not apply it. An action name in none of these is refused, naming it, so a new vendor action is never dropped silently: add it to FAMILIES.

Each variable’s attributes give its description, unit, the vendor actions it is built from and, for a coded variable, codes (code, as a string, to meaning). A counterparty is the permaticker SEP’s TICKERS rows give the row’s contraticker as of the raw file’s pull, like the row’s own ticker (quantlab.dataset.sharadar.permatickers); NaN when it maps to no SEP security (a private acquirer, a fund, N/A), and the smallest one when a day has several. A contraticker TICKERS gives to several permatickers is not guessed either: the counterparty is NaN and the rows are counted in <store>.counterparties.json ({"owner", "unmapped": [{"contraticker", "first_date", "last_date", "rows", "reason"}]}, deleted when there are none), with a warning. ACTIONS is keyed by SEP’s tickers and also holds funds’ rows; a row mapping to no SEP security is left out. The panel covers the whole market’s common stock by default (SEP’s category filter).

ACTIONS is pulled whole every day; update() appends the new trading days and never rewrites a stored one. The vendor can record an action weeks after its effective date; a stored store keeps the days as built, and only a rebuild shows such a late row.

Examples#

Build the store and read a quarter’s dividends:

config = SharadarActionsConfig(
    zarr_file_path="/data/quantlab/market/sharadar/sharadar_actions_1d/sharadar_actions_1d.zarr",
    raw_data_dir_path="/data/quantlab/downloads/sharadar",
)
SharadarActionsDataset(config).update()
panel = SharadarActionsDataset(config).panel("2024-01-02", "2024-03-28")
panel["dividend"].attrs["unit"]  # 'USD/share'

Classes

SharadarActionsDataset

Daily panel of corporate actions by family, each on its effective date.

Variable

One panel variable: the vendor actions it reads and how a day's rows combine.