Traditional polls are slow, expensive, and harder to field every year. So we built a different instrument: simulate every real voter from the voter file with AI, then correct the result against certified election outcomes — for candidate races, starting from each county's own last certified result, the way any serious forecast does. Across three states it called the 2024 presidential margin in all 234 counties to an average of 1.7 points, and six Florida ballot measures to between 2 and 5. Then we took it past prediction: the same engine now tests which messages move your voters — and turns every poll into a ranked list of the specific voters worth contacting.
Every stage runs on the same scored voter file — so the poll, the message test, the turnout screen, and the outreach list are never four different models. Act, then re-poll to measure the lift.
Score every voter, calibrated to certified results.
234 counties · 0 callsSee which argument moves which voter.
ranked by liftThe poll doubles as a ranked voter list.
292 toss-ups found NEWOf those, who’ll actually show up.
81% vs 61% gut rule NEWContact them — calls, mail, doors, ads.
ranked & readyModern survey research rests on a chain of assumptions that each passing decade has made harder to satisfy. Three gaps motivate a different kind of instrument.
Telephone response rates fell from about 36% in 1997 to roughly 6% by 2018, and keep sliding. When fewer than one in ten people respond, the estimate depends entirely on whether the people who answer resemble the people who don't, and they don't.
36% → 6% response rate, 1997–2018 Source: Pew Research CenterA single quality poll costs thousands of dollars and several days. Presidential and marquee races are polled constantly, while county offices, judgeships, school boards, ballot measures, and primaries number in the thousands and are almost never polled at all.
Granular + broad is priced out of reach Source: Roper Center for Public Opinion ResearchEven a perfect survey measures what people say, which diverges from what they do. In corruption research a roughly 30-point penalty in surveys falls to near zero in real-world behavior. Stated answers carry a built-in validity ceiling.
~30 pts in surveys → ~0 in the field Source: Incerti (2020), American Political Science ReviewThe unit of simulation is a single real voter. We build a short profile from public records, ask an AI to answer the question in that voter's voice, add up thousands of them, then apply a standard correction so the numbers line up with real results.
Start with real registered voters: registration, vote history, and donor records where they exist.
A short profile for each voter from public data: age, party, and other registration signals.
Ask an AI to answer the question in that voter's voice, a few times each to reflect uncertainty.
Add the answers up across the whole population into one synthetic poll: a margin, or a yes share.
Apply our standard correction — for candidate races, anchored to the county's last certified result — for the final number, with an honest range.
Throughout, the load-bearing ground truth is certified election results on the actual population we deploy on.
Every serious election forecast starts from how a place actually voted last time — public information, on the shelf before any election, for every county in America. Our candidate-race correction does the same: it takes each county's certified margin from the previous presidential election as the starting point, and the AI engine measures the shift from there — who has moved, in which direction, and by how much. Nothing private, nothing that wouldn't be public before election day. And the test stays closed-book: every county below is predicted with that county held out of the fit.
Each county is shaded by our prediction. Pick a question and a state, then hover or tap any county to compare it against the actual certified result and see the error.
“In the 2024 election for President, did you vote for the Democratic candidate (Kamala Harris), the Republican candidate (Donald Trump), or another candidate?”
Checked against official certified county results from the N.C. State Board of Elections, the Florida Division of Elections, and the Pennsylvania Department of State.
Blue = Democratic, red = Republican. One fixed scale across all three states.
Counties: NC 100, FL 67, PA 67 (234 total). 1,000 voters sampled per county. Every county predicted out of sample (leave-one-county-out), anchored to its own previous certified presidential result.
Every figure here is measured out of sample, on counties held out of the fit. Lower is better: the average distance from the certified result, in points.
Each county starts from its own last certified presidential result — public, pre-election information — and the engine measures the shift from there. Across all 234 counties, out of sample, the average miss on the 2024 presidential margin is 1.7 points; the statewide margin lands within 0.4 points in North Carolina, 0.7 in Florida, and 0.5 in Pennsylvania. These are 2024 presidential backtest figures, anchored; the full validation study is available on request.
On the six 2024 Florida ballot measures, our predicted yes share lands about 2 to 5 points from the certified result. Tap a measure to read it on Ballotpedia.
Certified results: Florida Division of Elections. Measure text via Ballotpedia.
The plus or minus we report comes from the method's own track record on held-out data, not a textbook sampling margin. Tested out of sample, the 95% range contained the truth about 96% of the time, narrower where the method is proven and wider where it's weaker.
The method is strongest at relative comparisons (which county leans more, how places rank) and at absolute levels where local ground truth exists. North Carolina is the hard case — the widest spread in the study: deep-blue urban, the rural Black Belt, deep-red rural — and the anchor carries it: the statewide margin lands within half a point. The clearest follow-up is cross-race validation — calling a different office from the same anchor.
Beyond vote choice and ballot measures, we tested character questions: “would you vote for a candidate who did X?” No certified result can grade these — people famously claim a scandal would change their vote, then don't — so we validate and sell the order (which attack hurts most), never the point swing.
Published experiments on real voters rank four scandals from most to least damaging: corruption, sexual harassment, financial impropriety, an affair. The simulator was never shown those studies — and produced the identical order.
Four for four, most to least damaging. Spearman rank correlation +1.00, where 1.00 means the exact same order. Benchmark: Doherty, Dowling & Miller (2014).
Gallup asked Americans whether they’d vote for a qualified candidate who is over 80, an atheist, a socialist — 12 traits in all — and published the share saying yes for each. Twelve real numbers to hit. Our simulated voters answered the same 12 questions on a 0–10 scale: the trait order came out nearly perfect, and the average miss was 8.3 points.
Gallup’s 12 candidate traits, 500 simulated national voters. We ask every question 0–10 rather than yes/no — a flat yes/no forces hesitant voters to a hard no and roughly doubles the miss.
Surveys say a corruption scandal costs a candidate about 41 points; in real elections it moves roughly zero. The simulator lives in the survey world, so its magnitudes run about 2 to 3 times too high. That makes it reliable for ranking which attacks and traits land hardest, and an upper bound — not a forecast — on the raw points.
A prediction tells you where the race stands. Campaigns get paid to change it. So we re-poll the same simulated electorate once per message and measure every voter’s movement against their own baseline — here on a live 2026 Kansas judicial amendment: 2,000 real registered Johnson County voters, five messages, and a no-message control.
“Electing judges in partisan races means campaign donors and party bosses in the courtroom. Judges would owe their seats to the special interests that fund their campaigns. Kansas courts should answer to the law, not to campaign cash.”
The quote above is one of five messages we tested, all written to sound like real campaign copy. Two argue for Yes, two argue for No, and the fifth makes no argument at all — it simply lists who has endorsed each side. Each of the 2,000 voters answered the same ballot question after reading each message, and once more with nothing shown — that last run is the “no message” control row in the table below.
| Message shown | All 2,000 | Toss‑ups (292) | Lean Yes (974) | Lean No (734) | Rep. (818) | Dem. (621) | Unaff. (531) |
|---|---|---|---|---|---|---|---|
| “Campaign cash in the courtroom” · for No | −12.6 | −25.1 | −13.3 | −6.6 | −10.2 | −4.2 | −25.0 |
| “60 years of merit selection” · for No | −11.8 | −23.4 | −12.3 | −6.6 | −9.8 | −4.2 | −23.8 |
| Endorsement lineup · names only, no argument | −4.3 | −12.3 | −1.3 | −5.1 | +0.2 | −4.2 | −10.9 |
| “Lawyers picking judges” · for Yes | +3.4 | +5.7 | +0.3 | +6.5 | +0.2 | +5.8 | +5.5 |
| “Your right to elect judges” · for Yes | +2.2 | +6.5 | +0.3 | +3.1 | +0.2 | +1.8 | +6.0 |
| No message · re-ask control | +0.2 | +0.1 | 0.0 | +0.5 | 0.0 | +0.5 | +0.1 |
Purple = toward No, green = toward Yes, grey = within re-ask noise. Toss-up and lean groups use each voter’s calibrated baseline; Libertarian and other small registrations (30 voters) are in the totals but not broken out. Full validation and caveats: in the complete study, available on request.
The two No arguments moved the electorate 12.6 and 11.8 points; the two Yes arguments managed 3.4 and 2.2. That asymmetry — attacks beat positives on ballot measures — is exactly what published experiments find, and the engine reproduced it blind in replication before we ever saw it live.
Toss-ups swung 25.1 points under the strongest attack — nearly twice the movement of Yes-leaners and four times that of No-leaners — and they moved first or a close second on all five messages. The persuasion opportunity concentrates exactly where the race is decided.
The fifth “message” made no argument at all — it just named each side’s backers. Republicans heard that their party leads the Yes side and didn’t move (+0.2). Unaffiliated voters heard the same list and broke 10.9 points toward No. Who stands behind a measure is a message.
Re-asking with no message moved voters by about 0.07 on the 0–10 scale — under a point. Every real message produced 4 to 19 times that. When a segment doesn’t move in this table, that’s a finding too: it means don’t spend there.
The unit of simulation is an individual registered voter — so the same run that produces the topline also scores every voter in it: how close they sit to the fence, how unstable their answers are across repeated asks, whether they’re cross-pressured against their registration, and which message moved them most.
Among Johnson County’s 2,000 scored voters, 292 sat genuinely on the fence. Every one of them moved toward No by double digits (upper bound) under their best message, and 152 were also movable toward Yes; across the full file, 265 voters could be pulled in both directions — the conflicted middle every campaign is guessing at. Each exported row carries a best-message tag: which argument moved that voter most.
Lists export ranked, by county and precinct, ready for calls, mail, and canvass. In this run a mailing address was on file for 100% of voters and a phone for 63% (the Kansas file carries no emails). And the per-voter scores must re-aggregate exactly to the published topline — 52.1% calibrated Yes here — or the run fails loudly. The list is never a different model from the poll.
| Started at (0–10) | Registration | Strongest pull toward No | Strongest pull toward Yes | Contact on file |
|---|---|---|---|---|
| 5.0 · toss-up | Libertarian, 30s | −37 pts · campaign cash | +3 · lawyers picking judges | address |
| 4.7 · toss-up | Unaffiliated, 30s | −23 pts · campaign cash | +7 · right to elect judges | address |
| 7.6 · leans Yes | Republican, 70s | −10 pts · campaign cash | 0 · none landed | address · phone |
| 2.2 · leans No | Democrat, 50s | −7 pts · campaign cash | +3 · right to elect judges | address |
| 1.6 · leans No | Democrat, 30s | 0 · none landed | +10 pts · right to elect judges | address |
Real rows from the Johnson County export with identity withheld — the delivered file carries name, mailing address, phone where on file, precinct, and district on every row, none of which belongs on a public web page. Per-voter movement is an upper bound; the ranking is the product.
Names and identities are never sent to the AI. Each stand-in is built from voter-file traits — age, party, registration signals — and identity is rejoined only inside our systems, at export time. Exports leave our hands with their permitted-use terms attached: voter-file use is restricted by state law (in Kansas, political use is permitted and commercial use is prohibited), and the limitations header travels with the file.
And because the ballot is secret, no individual ground truth exists — for anyone. Per-voter scores are validated at the aggregate level and rank-ordered at the individual level: a smarter ordering of the call sheet, not a claim to know any single person’s vote.
A ranked list only pays off if those voters actually vote. But the “likely voter” score every campaign leans on — the one already in your file — is really just one number: a voter’s participation rate — of every past general election on their record, the share they actually turned out for. Score everyone that way, call the reliable ones “likely,” and target them. It’s a rear-view mirror — fine for a high-turnout presidential year, but on the low-turnout primaries and municipals that decide most offices, last cycle’s voters and this cycle’s are barely the same people.
So we lined it up against the real thing. For nine states we hold the actual voter file — every registered voter, and exactly who turned out in 2024. For each one, both the participation rate and the Civly Turnout Score make a single call — likely to vote, or not — and we check it against what the voter really did. How often is each right?
Voter by voter, the call — will vote or won’t — is right 84% of the time with the Civly Score, versus 78% for the participation rate. More accurate in all nine.
On a 2025 municipal — the off-cycle races that decide most offices — the old rate gets barely two-thirds of its calls right (67%). The Civly Score: 83%.
Where it costs you most: of the “likely voters” the participation rate flags on that low-turnout race, only 62% actually cast a ballot — nearly four in ten, and the budget behind them, go to people who stay home.
Every segment a message moves is also an ad audience. The same run that scores each voter and tags the message that moved them most will package any slice of the file as a Meta Custom Audience — matched, hashed, and formatted to Meta’s own upload spec, ready for Facebook and Instagram. Your poll is your ad list.
Straight off the message test — say the 292 toss-ups, or the unaffiliated the endorsement list moved. A filter on a run you already have.
Name, phone, and address rejoin only inside our systems, at export — never sent to the AI.
Every match key is SHA‑256 hashed the way Meta requires, before the file leaves our hands.
Deduplicated, in Meta’s exact column format. Upload to Facebook & Instagram, or seed a lookalike.
One export, cut from the scored run: the phone bank and the ad buy hit the same modeled voters — not two lists from two models.
The run defined them, so exporting one is a filter, not a fresh build: the 292 toss-ups, the 531 unaffiliated who broke 10.9 points toward No on a bare endorsement list, the 974 Yes‑leaners worth shoring up. And because every row carries its best‑message tag, the creative you run is the argument the model already said would move that segment — message and audience ship together.
Meta matches strongest on email and phone. This Kansas file carries a phone for 63% of voters and no emails, with name, full address, and birth year on 100% as secondary keys — and Meta matches only a subset of any list to real accounts. So we give you the matchable count before you spend, not a surprise after. An audience you can’t reach is not a number we hide.
| Column (Meta’s spec) | What Meta matches on | On file, this run | How it ships |
|---|---|---|---|
| Primary match key | 0% · none in file | — | |
| phone | Primary match key | 63% | SHA‑256 |
| first / last name | Secondary match key | 100% | SHA‑256 |
| city / state / zip | Secondary match key | 100% | SHA‑256 |
| birth year | Secondary match key | 100% | SHA‑256 |
Meta’s Customer List schema, unchanged — the file we output is the file Meta ingests. No real values are shown: every identifier is SHA‑256 hashed before the export leaves our systems, so Meta receives scrambled keys, never a name, number, or address in the clear.
The run already sorted the electorate, so the buy is mostly deciding what each group is for. Usually that’s one dominant message pointed at the people it moves — and the discipline to leave everyone else alone.
| Audience | Who — straight from the run | Creative the test picked | Budget |
|---|---|---|---|
| Persuade the middle | 292 toss-ups + 531 unaffiliated | “Campaign cash in the courtroom” · swung both ~25 pts | The bulk of it |
| Reinforce your side | 734 already leaning your way | Mobilization creative — the attack is spent effort here | Light, ramps late |
| Expand past the file | A lookalike seeded from the movers | The same winning attack, new faces | Test, then scale |
| Exclude the immovable | Anyone the test parked at the noise floor | — a flat cell is a buy signal in reverse | $0 |
Why a handful, not dozens: Meta needs enough matched people and budget behind each audience to deliver — slice a county list too thin and every ad set starves, so the count is bounded by list size, match rate, and spend. And campaign ads run inside Meta’s Special Ad Category: your custom-list segments are allowed — that’s the whole export — but standard lookalikes give way to coarser Special Ad Audiences, so expansion is broader-brush than it is for commercial advertisers.
Same discipline as the call sheet. Identity is rejoined only inside our systems, and every match key is SHA‑256 hashed before the file leaves — Meta’s standard Customer List flow — so Facebook never receives a name, phone, or email in the clear. And permitted use travels with the file here too: voter-file use is restricted by state law (in Kansas, political use is permitted and commercial use is prohibited), and that limitation applies to a Meta upload exactly as it does to a phone bank.
The secret ballot still holds. An audience is a modeled segment — the voters the run scored as movable, and the message it scored as moving them — not a claim about how any one person voted. You’re buying a smarter ad, not a dossier.
Synthetic polling is a complement to traditional polling, not a replacement. Where a high-quality field poll exists it remains a valuable anchor. We're deliberate about where the method is reliable and where it isn't.
Vote choice is checked across North Carolina, Florida, and Pennsylvania; policy only in Florida. Going further needs certified results we don't yet hold, which we treat as future work.
The direction of the correction is universal, but its size is state and topic specific. Borrowing one state's correction for another can do more harm than no correction at all.
For "would you vote for someone who did X" questions the engine reproduces the real ordering of scandals and traits very well, but the stated effect sizes run larger than real behavior, so we treat them as ceilings.
In production the service plans for free (scoring the question, expected accuracy, and projected effort), and nothing runs until the plan is explicitly approved.
Synthetic polling reaches the places and questions conventional polls can't — every county, every down-ballot race, every issue, in hours rather than weeks. And it no longer stops at the number: test your messages on your electorate, then walk away with the ranked list of voters to go move.