Delegation Decoded is a congressional accountability platform organized by state delegation. Each state gets a dashboard tracking its senators and representatives across legislation, committee assignments, and campaign finance — drawn directly from official government records.
This is a public records project built for reporters, researchers, and anyone who wants to know what their state's delegation is actually doing. It is not a consumer app, a voter guide, or a partisan tool.
538
members tracked
6,192
bills ingested
86,411
sponsorship links
861
roll-call votes
230
committees
3,891
committee assignments
2,810
finance records
229
STOCK Act filings
4,393
disclosed trades
3,687
press releases
github.com/unitedstates/congress-legislators
Canonical member database. Biographical data, party affiliation, state, district, terms of service, social media handles, and cross-reference IDs to other government systems. This is the gold standard reference dataset used across civic tech — it provides the bioguide ID that links a member across Congress.gov, FEC, and every other system.
Access: Raw JSON from GitHub. No API key required. Updated weekly.
api.congress.gov/v3
Official Library of Congress API. Bills, resolutions, sponsorships, cosponsorships, committee reports, and legislative actions for the 119th Congress. This is the authoritative source for what legislation a member has introduced, cosponsored, or acted on.
Access: REST API with free key. Rate limit: 5,000 requests/hour. Bills are scanned sequentially; only those with a sponsor in the current member database are ingested.
api.open.fec.gov/v1
Federal Election Commission campaign finance data. Candidate financial totals, receipts, disbursements, cash on hand, and contribution breakdowns (small dollar, large individual, PAC). Members are matched by their FEC candidate ID stored in the @unitedstates dataset.
Access: REST API with free key via api.data.gov. Rate limit: 1,000 requests/hour. FEC data reflects filings as reported — quarterly filing schedules mean data can lag by weeks or months.
clerk.house.gov/evs · senate.gov/legislative
Official roll-call vote records. House votes are scraped from the Clerk's per-vote XML files; Senate votes are pulled from the Senate's legislative XML feed. Each vote is stored with the bill or measure it relates to, the result, and a position record per member.
Access: Public XML, no key. Coverage: 119th Congress, 861 roll calls ingested.
disclosures-clerk.house.gov
STOCK Act Periodic Transaction Reports for House members. The Clerk publishes annual ZIPs of PTR PDFs. Each PDF is parsed with Anthropic Claude Sonnet 4.6 in vision mode — the model reads the rendered form and returns structured JSON: ticker, asset description, owner, transaction type, transaction date, amount band, and a per-row confidence score. Rows below 80% confidence are flagged for review and rendered with a warning badge in the UI.
Access: PDF bulk download. Re-parsing is idempotent via PDF hash. Of 229 House and Senate filings ingested, 99.95% of rows score ≥80% confidence.
efdsearch.senate.gov
STOCK Act PTRs for senators. The Senate filing system serves structured HTML tables — every row already has a discrete ticker, owner code, asset type, transaction type, and amount band. Parsed deterministically with a cookie-jar + regex pipeline; no LLM required. Faster, free, and reliably high confidence (95% baseline when ticker present).
Access: Public web form, requires accepting an electronic terms-of-service before each session.
house.gov · senate.gov subdomains
Official press releases from member office websites. Each member's site is probed for one of six standard RSS feed paths (`/rss.xml`, `/feed/`, `/news/rss.xml`, etc.) and parsed with a small inline XML reader — no third-party dependencies. Used to power the press-release timeline and keyword analytics.
Coverage: 3,687 releases from members whose offices publish a feed. Members without an accessible feed are silently skipped.
All writes are idempotent upserts. Running the same ingestion twice produces the same result. No data is deleted during updates.
One pipeline uses AI: House PTR PDFs are parsed with Anthropic Claude Sonnet 4.6 in vision mode. The model reads the rendered disclosure form and returns structured JSON — ticker, asset description, owner, transaction type, transaction date, amount band — plus a per-row confidence score (0–100). Every row is stored with its score; rows below 80% are flagged in the UI and the user can see exactly which rows the parser was uncertain about. Senate PTRs do not use AI: they come back as structured HTML and are parsed deterministically.
All other data — bills, sponsorships, votes, finance, committees, members, press releases — traces directly to an official API or community-maintained dataset, with no model in the loop.
The codebase was built with the assistance of Claude Code.
Next.js 16 / TypeScript / Tailwind CSS 4
Neon Postgres / Drizzle ORM
Deployed on Vercel
Ingestion scripts: TypeScript + tsx
Built by Trevor Brown. For corrections, questions, or licensing inquiries, reach out through the portfolio site.