Delegation Decoded is a congressional accountability platform organized by state delegation, covering Congress year-round and the 2026 midterms. Each state dashboard connects its current lawmakers, votes, legislation, committees, campaign finance and 2026 candidate fields to the official records behind them, and the Compare tool places any two delegations side by side.
It is built for voters who need a factual starting point and journalists who need a transparent reporting tool. It is not an endorsement guide, election forecast or partisan scorecard.
537
members tracked
11,796
bills ingested
130,612
sponsorship links
1,533
roll-call votes
230
committees
3,934
committee assignments
2,949
finance records
The House and Senate disclosure pipelines and preview pages remain available while coverage, parser accuracy and member matching are validated. They are not yet a complete reporting dataset and are intentionally excluded from the main navigation, search emphasis and records assistant.
Preview infrastructure currently contains 466 filings and 7,348 parsed transaction rows. Those counts measure loaded records, not comprehensive member coverage.
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). Linked committees are also ingested — principal campaign committees, leadership PACs, and joint fundraising committees, with per-cycle totals — plus top contributors aggregated by donor employer from Schedule A itemizations. 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: the 119th Congress, 1,533 roll calls ingested. Historical roll calls are stored for current members only.
disclosures-clerk.house.gov
Preview ingestion of 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. Coverage and parser accuracy are still being audited; loaded rows must not be treated as a complete universe.
efdsearch.senate.gov
Preview ingestion of 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: 7,481 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.
The Ask feature uses OpenAI GPT-5.6 Terra as its primary provider and Anthropic Claude Sonnet 5 as an independent fallback. OpenAI uses strict schemas for every tool. Anthropic uses a deterministic topic router to expose only the relevant strict retrieval schemas, keeping grammar compilation within the request deadline. Both providers send arguments through server-side type, range and scope validation before any query runs. A terminal answer tool is required, and a factual answer is rejected unless at least one record lookup was completed.
Exact SQL retrieval is used instead of embedding search for votes, bills, finance, committees, terms and races because those are structured records where identifiers and dates must match. Each Race answers dual-read state-authority candidacies where a verified adapter exists and FEC filings elsewhere, preserving the coverage label in the model context. Each answer shows the record categories checked. Stock disclosures are not exposed to the assistant while that feature is under validation.
Questions are capped in length, same-origin POST requests are enforced, provider retries are disabled, and one provider fallback is allowed only when the primary is unavailable. Per-connection and daily provider limits cap abuse and spend. Fresh questions are screened with a free moderation model before any paid provider call; that check fails open, so a moderation outage never blocks the feature. IP-derived identifiers and cache keys are HMACed or hashed; questions are not stored in plaintext in the answer cache.
Every question and answer is kept in an audit log for 90 days, keyed to a hashed connection identifier rather than an address. The log records the model's own status for each reply — answered, no matching record, out of scope, or declined — plus the records checked, the provider used, latency, and what share of the answer's sentences carry a validated citation. That makes any answer the assistant ever served reproducible and correctable, and the health page publishes live totals from it. Replies that are not grounded answers are labeled in the interface, no answer is reviewed by a person before display, and every answer carries a report link for corrections.
Two ingestion pipelines use models. 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.
Campaign-site and official-member biography research uses OpenAI GPT-5.6 Terra with low reasoning and strict Structured Outputs, then falls back to Anthropic Claude Sonnet 5 when the primary provider is unavailable. Retrieval is deterministic and bounded: crawlers select only approved same-domain research pages, then supply their text directly. The model cannot browse or choose new URLs. Application code drops any output whose quote is not present in the cited snapshot, and a reviewer name and timestamp are stored before any fact can be published or supplied to Ask.
All other data — bills, sponsorships, votes, finance, committees and members — traces directly to an official API or community-maintained dataset, with no model in the loop.
Next.js 16 / TypeScript / Tailwind CSS 4
Neon Postgres / Drizzle ORM
Deployed on Vercel
Ingestion scripts: TypeScript + tsx
Reporters can bulk-download every dataset as CSV, with freshness timestamps and reporting tips, on the For Journalists page. The full pipeline status — per-source coverage, sync history, and any active issues — is public at /health.
Built by Trevor Brown. For corrections, questions, or licensing inquiries, reach out through the portfolio site.