Call time is the most expensive hour in a political campaign. The candidate is personally making the calls. The staff is sitting there feeding lists. Every minute that call goes to someone who was never going to give, or who would have given $25 regardless of a four-minute pitch, is a minute that wasn’t spent calling someone who would have written a $2,800 check.
So the question isn’t whether to score donors. Every sophisticated campaign scores donors. The question is how — and almost every public method we’ve seen has a hole in it.
The flaw in single-dimensional scoring
The most common approach, even in expensive vendor products, is what we’d call a scalar “donor score”: a single 0–100 number meant to represent how likely this person is to give. The scoring is usually a mix of past giving behavior, partisanship signals, demographic correlates, and sometimes modeled wealth.
The problem is that a single score conflates two genuinely different questions:
- Is this person going to give at all? (Propensity — a probability.)
- If they give, how much? (Capacity — a conditional dollar expectation.)
These are not the same thing, and the correlation between them is messier than you’d think. A retired teacher who gives $25 to every progressive candidate in her state has a 95% probability of giving and an expected gift of $25. A surgeon who has given to exactly two campaigns in his life has a 12% probability of giving and an expected gift of $2,800.
A single score forces you to pick: either you rank the teacher higher (because her propensity is high) or the surgeon (because his capacity is high). Neither is right. The right move is a two-dimensional score that lets you rank on expected value — P(give) × E(gift | give) — which is the quantity you actually care about when you’re deciding who to call next.
What we model
We model two separate estimators, trained on the same underlying data (FEC federal filings back to 1985, state filings as we ingest them, and any first-party giving history a campaign uploads):
P(give | candidate, cycle, context): Logistic outcome. Features include:
- Historical giving count to the relevant partisan column
- Recency of last gift (months)
- Giving to comparable candidates (same office, same state, same cycle phase)
- Small-dollar signal (median gift size < $100)
- Peer-group base rates (ZIP, occupation, employer)
- Candidate proximity (is this donor in the district? adjacent?)
- Cycle-of-life signals (donor’s first federal gift was recent → net new giver)
E(gift | give, candidate, context): Log-normal regression. Features:
- Historical gift distribution (mean, median, 80th percentile)
- Max gift to any candidate
- Wealth correlates from public filings (where legally usable)
- Peer-group gift distributions
- Candidate-specific priors: Senate race donors give more than State House
How we evaluate
On held-out historical FEC cycles — trained through 2020, tested on 2022 and 2024 — the P(give) model achieves AUC ≈ 0.82 for the federal itemized donor universe. More practically: if you rank donors by model score and walk down the list, the top decile contains roughly 5.7× the giving rate of the bottom decile, and the top quartile captures ~62% of actual giving volume.
The E(gift) model is harder to summarize cleanly because it’s heteroskedastic — the variance in expected gift grows with the mean — but on a log scale, held-out R² lands at 0.54 for federal itemized. For the 80th-percentile donor and above, it identifies the right decile of gift size correctly about 71% of the time.
None of this is magic. The signal was in the data the whole time; it just wasn’t being separated into the two questions that matter. A campaign that walks its call list in EV order — P(give) × E(gift) — rather than by a conflated scalar score sees, in backtesting, roughly 2.4× the dollars per hour of call time at the top decile.
Why state data matters so much
Federal FEC data is the cleanest, deepest, most consistent donor dataset in the United States. It’s also not representative of who gives to most campaigns.
A state house race in Nevada cares very little about who gave $50 to a presidential primary in Iowa. It cares a great deal about who gave $100 to the Clark County sheriff’s race, $250 to a state senator, and $500 to the state party. That signal lives only in state donor disclosure databases — and state donor disclosure is a patchwork.
Nevada publishes through the AURORA system and publishes well. California’s Cal-Access is rich but painful. New York’s system is being rebuilt. A few states effectively bury the data behind search interfaces that don’t bulk-export.
We ingest, normalize, and cross-link state-level donors back to FEC federal records where possible, which means a Nevada donor who gave to a state assembly race in 2022 and a federal congressional race in 2024 appears as one entity with a unified giving history. The cross-linking matters because state-federal behavior is a strong predictor: a donor who gives to both is materially more likely to give to a new state-level candidate than one who only gives federally.
State file coverage rolls out state by state. Nevada is live. We’re building in priority order by a mix of race competitiveness and publisher quality.
The ethical guard rails
Donor data is public by disclosure law — federal donors appear on FEC filings, state donors on state filings. That makes the raw data fair game. But “fair game” is not the same as “anything goes.”
A few rules we hold ourselves to:
- Propensity models inform calls, not coercion. We do not expose or feature any attribute that looks like intimidation leverage. No “likely to respond to pressure” score. No employer-targeting features.
- Wealth features come from public filings only. We do not join to consumer marketing data or credit-bureau derivatives. The models are built from civic data about civic behavior.
- Model output is explainable. Any score a campaign sees can be clicked through to the top three reasons it was assigned. Black-box donor scoring creates weird incentives and worse fundraising.
- The models don’t predict individuals who haven’t entered the donor universe. We don’t score every voter as a prospective donor. Only people who have an actual giving record — federal, state, or first-party — get scored.
What this lets a campaign actually do
Concretely, a candidate running a state senate race opens Civitas and sees a call list sorted by EV. The top names are donors the candidate has never met, with an explanation like: “Gave to three comparable state-senate races in 2022 at average $750. Cycle-recent. Cross-partisan-donor: low. Call window: weekday mornings per past finance-director notes.”
The list updates in real time as calls are logged. Donors who refused get re-weighted down. Donors who gave get decayed out of the pool for 90 days unless they explicitly opt back in. The candidate’s four call-time hours produce about 2.4× the dollars they would have produced on a conflated scalar list, because the list understood the two questions separately.
That’s the whole thing. The methodology is public. The features are documented. The evaluation numbers are re-computable on any historical cycle. If you disagree with any of it, we’d like to hear why — the model gets better when more smart people look at it.
Call the right people. That’s it.