BBankrolledBetaHold them accountable

Methodology

How the numbers are built

Rosters

Each cycle has a roster file listing every race and its candidates with FEC candidate IDs. It is seeded from the FEC's elections endpoint (candidates who filed and raised money) and then edited by hand after primaries so that only nominees and active candidates appear. Withdrawn and defeated candidates stay in the file but are not shown.

Records

A nightly job asks Poliscope for each candidate's fundraising profile, contribution-size and geography breakdowns, PAC contributors, congressional profile and roll-call votes (current and previous Congress), STOCK Act trades and trade/lobbying overlap signals, gift and travel filings, independent expenditures targeting the candidate, dark-money traces for the groups that spent in their favor, revolving-door lobbying records, and executive-branch disclosures. Each section is fetched independently, so one failing source leaves a note on the profile rather than dropping the whole candidate.

Poliscope loads FEC reports on a delay, so the same job also asks the FEC for each candidate's official totals for the two-year cycle. When Poliscope's total matches, the profile says so. When it doesn't, usually because Poliscope has not loaded the latest report, the raised and spent figures across the site switch to the FEC's official totals, and the profile explains that the donor, PAC and sector breakdowns still come from Poliscope and may cover an earlier period. Totals cover the two-year cycle (January 2025 onward for 2026), including for senators; FEC.gov's headline figure for a senator covers the whole six-year term.

Outside-spending totals come from Poliscope's corrected independent-expenditure data, which counts each spender's current periodic reports and leaves out superseded filings and 24/48-hour notices. The nightly job also asks the FEC for its own regular-report totals per spender; when Poliscope's differ, usually because it has not loaded the latest reports, the FEC's figures are shown instead and the page says so. Spending in the final weeks is reported first in 24- and 48-hour notices. Notices dated after a spender's latest processed regular report are listed separately, labeled “reported in 24/48-hour notices; may overlap periodic reports,” and never added to the totals. A network's notices still count toward its flag, since they are its own filed spending in the race. Where a tracked donor gave a spending committee $100,000 or more this cycle, the donor is named on that committee's rows, and each donor's flag page lists everything the donor gave this cycle, including to super PACs and party committees; a candidate is flagged for a donor only through money traceable to that donor in filings. Two kinds of results are marked provisional until Poliscope finishes validating them: dark-money traces, which rest on spending-network data Poliscope has not yet republished, and anything built on donor identity, which includes top contributors, donor sectors and employers, and the donor, group and industry flags. An outside-spending figure marked “partial” (for example $1.2M (partial)) is a known subtotal: Poliscope could not reconcile some of the filings, so the complete total is unknown. It is not a minimum, because an unresolved amendment can lower the total as well as raise it.

The money race

Bars show total receipts for the cycle as reconciled by Poliscope from FEC candidate and principal-committee filings. Outside spending is the sum of Schedule E independent expenditures by committee and stance. “Dark money in” is the sum of grants a spending committee received from 501(c) nonprofits, as traced by Poliscope with exact identifier matches only.

Flags

Flags are defined in a single configuration file. A donor-network flag matches when (a) a named PAC or person gave directly to the candidate's committees in this or the previous cycle, or (b) a named super PAC ran independent expenditures supporting the candidate. Opposition spending is also recorded and labeled. Committee names are resolved to FEC IDs once and stored; unresolved names are skipped, never guessed, and spenders are matched by FEC ID rather than name. A committee belongs to a network only when FEC filings show the connection (for example, AIPAC is United Democracy Project's largest donor). Pop-up committees that press reports tie to a network are not counted, because the money is not visible in filings. Each flag's exact checks are listed on the hot buttons page. Being opposed by a network is shown separately from being funded by it.

Industry flags use Poliscope's sector classification of a candidate's individual donors by employer. A sector flag applies only when that sector is one of the candidate's three largest and gave at least $50,000; the same few sectors lead nearly every candidate's list, so appearing anywhere on it would mean nothing. Sector names are used as-is (the health care sector is mostly physicians and hospitals, not drug makers), and union PAC money is not captured by this classification. Record flags come from the candidate's own filings (any STOCK Act trade, any gift or travel filing, presence in lobbying registrations, and so on). Thresholds, such as “more than 60% out-of-state,” are stated in each flag's description. “Self-funded” counts FEC Schedule C loans the candidate marked as personal funds and made during the two-year cycle (reports keep listing loans from earlier campaigns until they are repaid; those are shown but not counted); a “campaign in debt” flag, built from Schedule D debts and unpaid third-party loans, is switched off until Poliscope reloads its Schedule D data, which is currently missing for nearly every committee.

Key votes

Key-vote flags are specific roll calls, identified by chamber, Congress, session, and roll-call number as the Senate and the House Clerk publish them, and matched to each member by Bioguide id using Poliscope's roll-call positions (from Congress.gov). Each flag states which position counts as “for” its question; on a motion to table, a Nay is the vote for the underlying measure. When a flag lists several roll calls, a member is placed by the latest one they voted on and every roll call they cast is shown on their page. Present and not-voting are not positions. Candidates who were not in Congress for a vote have no position, and a few House roll calls are not yet carried with member positions by Poliscope; those show no one until the source fills in.

Campaign spending

The spending section aggregates a principal campaign committee's FEC Schedule B operating expenditures by payee and stated purpose, from the most recent 2,000 disbursements Poliscope carries for the cycle. For large campaigns that is a recent window rather than the whole cycle, and the page says so.

Limits

Poliscope covers federal records only. Entity resolution across databases is probabilistic and errs toward not linking. FEC data lags by up to a quarter for some committees. Gift and travel coverage begins in 2018 (House) and 2022 (Senate). Amounts for stock trades are ranges, as reported. Nothing here establishes wrongdoing; it shows what was filed.

Attribution

Source: Poliscope (poliscope.org), based on FEC, Congress.gov, LDA, SEC, USAspending, OGE and congressional gift and travel records. Please cite Poliscope when reusing figures from this site.