agentsclimarketplace

Corp actions reconciler

Skill rgourley/quant-garage/skills/corp-actions-reconciler

Analyst workflows as Claude skills. 62+ tools and 8 workflows spanning earnings, comps, valuation, options flow, factor research, sizing, risk, TCA, and ops. Built in the garage, not the trading floor.

Install
npx -y skills add rgourley/quant-garage --skill corp-actions-reconciler

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 6 stars6 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Reconcile a position file against splits, dividends, and spinoffs to catch breaks before they hit P&L or T+1 settlement. Use when an operator hands over a CSV of positions and asks "are these right after the recent corporate actions." Runs on a free Massive Basic key.

SKILL.md

5.6 KB, as published. Nobody here has run it

corp-actions-reconciler

You hand over a CSV of positions. The skill walks every line against the splits and dividends history, flags anything where the recorded share count or cost basis is off, and emits a clean reconciliation report with citations.

This is the highest-grounding-value workflow in the suite. LLMs hallucinate split factors constantly (was it a 3-for-1 or 7-for-1? forward or reverse?). Massive's splits endpoint has the truth, so the skill never guesses.

When to invoke

  • Operator says "reconcile my positions" or "check this CSV against corporate actions"
  • A monthly close turned up a position-file break and you want to find which corporate action caused it
  • Before a T+1 settlement window when a stale position file would break settlement instructions

What you need

  • A position file in CSV format with columns: ticker, shares, cost_basis, as_of_date
  • A Massive API key (free Basic tier works)
  • MASSIVE_API_KEY exported in the environment

What you get back

The skill ships two output layers:

Layer 1: canonical JSON matching output-schema.json. This is what UI dashboards, downstream agents, and Python scripts consume. Every field is typed, every break carries its source endpoint and a fetched-at timestamp for audit trail.

Layer 2: rendered exception report for Claude Code users. See references/rendering.md for the full rendering rules. A short example:

2 BREAKS found across 47 positions checked.

BREAK 1: AAPL
  Recorded:    100 shares as of 2024-08-01
  Action:      2-for-1 split, ex-date 2026-03-10
  Expected:    200 shares
  Delta:       +100 (under-allocated)
  Source:      api.massive.com/v3/reference/splits?ticker=AAPL
  Verified:    2026-06-23T14:32:08Z

UI devs work from the JSON. Claude Code users see the rendered form. Same compute, two consumption surfaces.

How it works

  1. For each row in the input CSV, call the splits and dividends endpoints with ticker and execution_date > as_of_date (splits) and ex_dividend_date > as_of_date (dividends).
  2. Apply each split's split_to / split_from ratio to the recorded share count, in chronological order. Cost basis moves inversely.
  3. Walk dividend records and route by Massive's dividend_type. RC (regular cash) and SC (special cash) reduce cost basis per share by the cash amount. SD (stock dividend) and LT (large stock dividend, treated as a split per IRS Rev. Rul.) adjust share count and prorate basis. ST routes through the split path defensively. Unknown types are surfaced in tier_caveats rather than silently dropped. See dividends methodology.
  4. Read spinoff entries from a spinoffs.json overrides file (no dedicated Massive spinoffs endpoint as of June 2026); adjust the parent position's basis and create a new position for the subsidiary at the issuer's allocation. See spinoffs methodology.
  5. Compare projected share count and cost basis to the recorded values in the input file.
  6. Emit any mismatch as a BREAK with citation.

The four methodology references are the IP. Read them in this order if you're extending the skill:

  1. splits-methodology.md: forward and reverse splits, compounding, fractional results.
  2. dividends-methodology.md: cash, special, RoC, stock dividends, timing rule.
  3. spinoffs-methodology.md: parent basis allocation, new-position creation, Massive endpoint gaps and override file format.
  4. edge-cases.md: CIL, ADR/ordinary mapping, reverse-split delisting watch, symbol changes, same-day actions, FX.

Endpoints used

  • GET /v3/reference/splits (paginated; one call per ticker)
  • GET /v3/reference/dividends (paginated; one call per ticker)
  • GET /v2/aggs/ticker/{ticker}/range/1/day/{spin_date}/{spin_date} (only when computing first-session cost-basis allocation for a spinoff)

The splits and dividends endpoints are included in the free Basic tier. Rate-limited to 5 calls/min on free, so a CSV with more than ~50 rows will take a few minutes on a free key. Any paid tier eliminates the wait. The aggs call for spinoff basis allocation also runs on Basic.

Example

# Quick test against a small position file
echo "ticker,shares,cost_basis,as_of_date
AAPL,100,150.00,2024-08-01
GOOGL,50,2800.00,2022-06-01" > positions.csv

# Invoke from Claude Code
# > /corp-actions-reconciler positions.csv

The skill processes positions sequentially and writes a single JSON + rendered report at the end of the run.

Foundations used

Doesn't handle (yet)

  • Tender offers and exchange offers
  • Mergers (cash, stock, and mixed consideration)
  • Rights offerings (subscription rights)
  • Currency-redenominated cost basis (FX conversion of basis is the operator's settlement-system problem; see edge-cases.md)
  • ADR ratio changes that the splits endpoint misses (workaround: manual entry in spinoffs.json)

Add these in a PR if you need them. The patterns are straightforward extensions of the existing splits/dividends/spinoffs logic.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.