Karen Bass is going to November no matter what. The real race is for the second ticket, and after building a little two-lever model and stress-testing it against the registration, the polls, and the ballots still sitting uncounted, I've talked myself into Nithya Raman edging out Spencer Pratt. Here's the whole reasoning, caveats and all.
| Candidate | Party | Votes | Share |
|---|---|---|---|
| Karen Bass (incumbent) | D | 195,449 | 35.1% |
| Spencer Pratt | R | 163,549 | 29.4% |
| Nithya Raman | D (progressive) | 130,473 | 23.4% |
| Others (long tail) | various | ~67,000 | ~12.1% |
LA's mayoral primary is nonpartisan: clear a majority and you win outright, otherwise the top two advance to a November 3 runoff. Bass at 35% is miles from a majority but locked into first. So the headline number is a red herring. The entire contest is the second slot, and it's Pratt (R) vs. Raman (D), with Pratt up by 33,076 votes. The only question that matters: does the November ballot read Bass vs. Pratt or Bass vs. Raman?
Everything rides on how the ~311,000 ballots still uncounted break. So I built a model to pull that apart.
I didn't want a single "who's winning" dial. I wanted to separate the two different things that are actually going on in the late count. So the model has two independent levers acting on the remaining ballots:
The nice thing is every candidate moves: Pratt rises with A, Bass falls as either lever climbs, and Raman falls with A but rises with B. Drag the two sliders and watch the second ticket flip.
—
Here's the full 3×3, from "nothing changes" to "everything breaks Raman's way":
| # | Late-mail D-skew (A) | Age/prog. skew (B) | Bass | Pratt | Raman | #2 | Margin |
|---|---|---|---|---|---|---|---|
| 1 | None | None (40%) | 35.1% | 29.4% | 23.4% | Pratt | Pratt +51.7k |
| 2 | None | Moderate (50%) | 33.0% | 29.4% | 25.5% | Pratt | Pratt +33.5k |
| 3 | None | Strong (60%) | 30.9% | 29.4% | 27.6% | Pratt | Pratt +15.3k |
| 4 | Moderate (22%) | None (40%) | 36.7% | 26.7% | 24.5% | Pratt | Pratt +19.5k |
| 5 | Moderate (22%) | Moderate (50%) | 34.3% | 26.7% | 26.8% | Raman | Raman +1.0k |
| 6 | Moderate (22%) | Strong (60%) | 32.0% | 26.7% | 29.2% | Raman | Raman +21.5k |
| 7 | Strong (15%) | None (40%) | 38.2% | 24.2% | 25.5% | Raman | Raman +11.0k |
| 8 | Strong (15%) | Moderate (50%) | 35.6% | 24.2% | 28.1% | Raman | Raman +33.6k |
| 9 | Strong (15%) | Strong (60%) | 33.0% | 24.2% | 30.7% | Raman | Raman +56.3k |
Two things jump out. Bass finishes first in all nine. She's never in danger; this is purely a fight for second. And the second slot flips along a diagonal: Bass+Pratt in 4 of 9, Bass+Raman in 5 of 9.
Want that as a probability instead of a grid? Run the likely-moderate settings (Pratt 22% of the remaining, Raman 50% of Democrats) through 50,000 simulations, letting each lever wobble, and the coin flip is literal:
This is where I went from "fun model" to "okay, I actually believe this." Neither lever is a guess. There's data pinning each one down.
The composition of what's left is heavily, structurally Democratic:
Put those together and the remaining pile is the late-returned mail: the bluest, most-Democratic slice of the electorate, with the Republican vote already banked in the count so far. Registration backs this up. LA County is ~52% Democratic / ~19% Republican, and the City of LA is bluer still (Republican registration closer to ~13%), per CA SoS, Feb 2025. Pratt is pulling 29.4% off a 13 to 19% Republican base, which means he's already maxed out on the early-voting independents and protest voters who break for an outsider. There just isn't much of that left in a late, Democratic mail pile. Pratt's share of the remaining should fall, moderately at least, maybe a lot.
So the levers aren't arbitrary: the ballot composition says A = at least moderate, and the polls plus crosstabs say B = around moderate (~50% of Democrats), maybe a touch more.
I solved the model for the break-even line, the combinations of the two levers where Raman exactly ties Pratt for second:
And here's the number that made me sit up. At the most defensible central case, moderate on both levers (Pratt 22%, Raman 50% of Democrats, Scenario 5), Raman now edges ahead by about 982 votes. She's half a percentage point over the line. Still essentially a tie, but with this larger remaining pool it has tipped to Raman. (On the earlier ~287k remaining estimate this same cell had Pratt holding by ~1,662; a bigger uncounted pile gives the late-mail skew more room to help the trailing candidate.)
Because of where the central case sits, and one thing the grid doesn't show on its own: the two levers are correlated. They're driven by the same people: young, progressive Democrats who vote by mail and return it late. That cohort makes the remaining ballots both bluer (Lever A, hurting Pratt) and more pro-Raman within the Democrats (Lever B). You don't get a strong A with a dead-flat B; they move together.
And the dead-center estimate now has Raman just ahead. She doesn't need a blowout, or even much beyond moderate. Nudge each lever slightly over moderate, which given everything above is genuinely my base case, and the edge widens:
Pratt ~20% of the remaining, Raman ~52% of the Democratic vote → Bass 34.2%, Raman 27.7%, Pratt 26.0%. Raman takes the second ticket by ~14,500 votes.
That's not the model straining at an edge case. It's the central estimate nudged by a point on each lever in the direction every piece of evidence is already pointing. So if I have to call it: Bass vs. Raman in November. Roughly a 58 to 60% call, a lean and not a lock.
I want to be honest about how thin the margin is:
This is the part I like: it's falsifiable as the count rolls in. For each new batch the registrar posts, work out each candidate's share of just that increment (new votes ÷ new total). The test is simple: Raman needs to be beating Pratt by more than ~10.6 points in the new ballots to be on pace to catch him. If the next few drops show her up 12 to 15 on Pratt in the marginal vote, the blue shift is real and she's getting there. If Pratt stays within ~10 of her in the new batches, he holds and I was wrong.
The topline shares barely move day to day; the marginal batch is where the late-mail skew shows up first. That's the number I'll be watching.
When I published this, the model set a clean, falsifiable bar: to erase Pratt's 33,076-vote lead, Raman had to win the remaining ballots by more than ~10.6 points over him. Anything less and Pratt holds.
Then the first big batch landed. The count jumped from ~64% to ~71% in, about 60,000 new votes, and Raman won that batch by +20.6 points over Pratt, nearly double the pace she needed. The second-place gap closed from 33,076 to 20,672, and on the topline Raman climbed 23.4% → 24.9% while Pratt actually fell 29.4% → 28.2%, the exact fade the model expected from a bluer late count.
So I re-centered the two levers on what that batch actually did (Pratt taking just 17.8% of the late vote, Raman 53.1% of the late Democrats) and re-ran the 50,000 simulations. The coin flip became a clear favorite: about 95% Bass + Raman (range 85–100% across how wide I let the levers vary), median final margin Raman +28k.
The next batch landed, and it broke even harder. Raman won the new ballots by +22.4 points over Pratt, her biggest margin yet. That makes three batches in a row pulling the same way: +13.4, then +20.6, now +22.4 points.
Pratt's second-place lead has collapsed from 20,672 to just 7,494, and on the topline they're now barely a point apart: Pratt 27.3%, Raman 26.2%. At this pace she clears the rest of the gap in roughly the next drop, crossing him somewhere around 82% counted.
Re-running the simulation on these numbers, the forecast tightens from ~95% to about 99% Bass + Raman (range 95–100%, even when I let the levers swing hard against her). The whole distribution now sits on Raman's side of zero:
The one caveat I keep flagging is now all that stands between this and certainty: a sudden Republican-heavy late drop. Nothing in three batches hints at one, but the count isn't finished, and Raman hasn't technically passed Pratt yet (gap 7,494, closing fast).
With roughly 83% of the expected vote counted, Nithya Raman has passed Spencer Pratt for the second runoff slot, leading 27.1% to 26.7%, a margin of about 3,100 votes. Absent a late reversal with no precedent in this count, she will face Karen Bass in November.
The batch that flipped the order was consistent with the prior releases: Raman carried the new ballots by +22.4 points over Pratt, her third straight drop in that range (+20.6, +22.4, +22.4). The crossover occurred at 83.2% counted, close to the model's projection of ~82%.
With about 146,000 ballots still outstanding and Raman's margin widening with each release, the recalibrated forecast now stands at roughly 99.95% Bass + Raman, with a median final margin near +33,000.
As to when the outcome is settled: Raman already leads, so the only open question is the point past which Pratt can no longer recover. To do so he would need to begin winning the late mail, having lost it by about 22 points in each of the last three batches. That threshold arrives quickly: she is effectively out of reach within the next one or two releases (~88–90% counted), and mathematically secure by ~93%. Certification is scheduled for June 26.
This is the question the model was built to address, Pratt or Raman, and the count has now resolved it.
The count is effectively complete, and the result is settled. Nithya Raman finishes second at 29.0% to Spencer Pratt's 25.5%, a final margin of about 29,550 votes, and joins Karen Bass on the November runoff ballot.
The central call, first made back at the 64% baseline when Raman still trailed Pratt by 33,000 votes, held up across every test the model set for itself:
That is the case for this kind of analysis in a single race: measure how the ballots are actually breaking, project it honestly, state the caveat plainly, and let the count settle it. The question this page set out to ask now has its answer. On to November.
Want to see all the math? Open the full model.