PALS traces money from corporate PACs to individual candidates using FEC bulk data, then aligns each candidate with legislative scorecard ratings (e.g. HRC on LGBTQ+ equality, NRA on gun rights) to show how corporate political money lines up with legislative behavior.
Corporate PAC money rarely goes only directly to candidates. Much of it passes
through intermediaries — party committees, leadership PACs, joint fundraising
committees — before reaching a candidate's committee. PALS needs an algorithm
that attributes each dollar a candidate receives back to its originating
corporate PAC, both directly and indirectly, without double-counting and
while handling cycles in the committee network. See
openspec/changes/pals-foundation/ for
the design.
- Ingestion — download and cache FEC bulk files (committee master,
candidate master, committee-to-candidate
pas2, committee-to-committeeoth). - Money-flow attribution — propagate a source PAC's dollars through the committee graph to candidates.
- Scorecard alignment — join candidates to scorecard scores (HRC, NRA, ...).
- Website — Quarto site with visualizations, published via GitHub Pages.
- Pipeline — add companies via config and refresh FEC data regularly.
The pilot corporate PAC is Google.
Python (managed with uv), Jupyter notebooks, Quarto, GitHub Pages.
Project planning and change management use OpenSpec
(openspec/; start a change with /opsx:propose).
uv sync
uv run python -m pals.combine # writes data/processed/*.csv
uv run pytestOutputs: candidates_combined.csv (one row per FEC candidate with committee totals and
HRC score), scorecard_match_report.csv (status of every scorecard row),
committee_orphans.csv, match_summary.csv. Fix mismatches by adding rows to
data/overrides/scorecard_overrides.csv. The HRC score is for the 118th Congress
(2023-24), so challengers and non-incumbents have no score.
uv sync --group site
uv run python -m pals.donations # builds data/processed/pac_*.csv
uv run quarto render site # or: uv run quarto preview siteThe site shows corporate PAC direct contributions by candidate HRC score bin. It is deployed by
.github/workflows/publish.yml on every push to main. One-time setup: in the GitHub repo go to
Settings > Pages and set Source to GitHub Actions. The site will be at
https://gw-ospo.github.io/pals/.
Early setup. Exploratory notebooks in the repo root predate the package layout.