The betting markets called South Carolina right — and lost their nerve at the exact moment it mattered
Lindsey Graham won his Senate primary in June and died in July. His sister, Darline Graham Nordone, was appointed to his seat — but to keep it, she had to win the nomination herself. She fell short of 50% in an eleven-way race, which forced a head-to-head runoff against Ralph Norman, a five-term congressman. Trump endorsed her. Tuesday was the runoff.
While all this was happening, people were betting real money on the outcome. On Kalshi, a regulated exchange, you can buy a contract that pays $1 if a candidate wins. The price works like a probability: if the market as a whole thinks she has a 67% chance, her contract trades around 67 cents.
I record those prices second by second. I also collect every post about the race I can find on Bluesky, stamped to the same clock. So for one election night, I can show you exactly what the bettors believed, what everyone was saying, and which of them turned out to be right — down to the second.
The afternoon: everyone loses faith at once
At 1:29 PM Eastern, five and a half hours before polls closed, Graham Nordone's contract stood at 67¢ — the market saw her as a two-to-one favourite. By early evening it touched its high for the day, 72¢.
Then it started falling. And for five straight hours it did not stop.
What was everyone saying while the price slid? That's what the dots on this chart are. Each one is a real post, pinned to the exact price at the moment it appeared. Click them in order and you can watch the mood sour in real time — a well-connected account reporting that Republican insiders thought she would lose, a news story about prediction markets and polls disagreeing, the most-liked post of the day asking flatly whether she was in trouble.
Graham Nordone's price through the afternoon, ending at the moment the polls closed. Dots are posts — hover or click one to read it.
By the time the polls closed at 7 PM, her price had sagged to 55¢ — barely better than a coin flip, and the lowest it had been all day. It wasn't just one website, either: over on Polymarket, a rival exchange, her opponent's chances had climbed from 10% to 36% in a week. The reporting, the insiders, the posts, and the money on two separate exchanges all drifted the same direction that afternoon.
Every one of them was wrong.
Nine minutes: the votes speak
For the first six minutes after polls closed, the price barely moved. There was nothing to react to — no results yet, nothing to do but wait.
Then the first trickle of actual votes arrived, and five hours of vibes evaporated in about nine minutes.
At 7:09 PM, Decision Desk HQ — a service that publishes election returns as they come in — posted the first count of the race. It covered exactly 234 votes. In that same second, her price crossed 77¢, already halfway from where it closed to where it would end the night. By 7:18 PM it was 86¢. Within the hour it reached 99¢ — as close to certainty as the market gets — and it sat there for forty minutes before Decision Desk officially projected her the winner.
The same price, from 15 minutes before the polls closed to 1:00 AM UTC. Olive dots are vote counts and projections from Decision Desk HQ.
The final tally: Graham Nordone 193,360 votes (52.4%) to Norman 175,306 (47.6%). She won by about five points. Not close.
The strange part
Here's what I keep turning over. The market got the winner right. It had her as the favourite all day and never dropped her below even money. But it was least sure of her at the one moment that mattered — the close. If you had frozen the price at lunchtime and ignored everything that happened after, you'd have had a better forecast than the price at 7 PM. Every hour the market spent soaking up the day's chatter made it worse.
The tempting story is that the posts dragged the price down. I doubt it, and I can't prove it either way — the people trading on Kalshi are not, for the most part, reading Bluesky. The duller and more interesting story is that the bettors and the posters were drinking from the same well: the same news stories, the same anonymous insiders, the same growing sense that a Trump endorsement was a burden. And nothing in that well contained a drop of information about how 369,000 South Carolina Republicans had actually voted. The one thing that did — the count — showed up nine minutes after the polls closed and settled the argument in half an hour.
And this is the second time in eight days. Florida's Democratic Senate primary on 18 August did exactly the same thing: the price drifted the wrong way all afternoon while the eventual winner was already winning. Opposite party, opposite state, same shape. Two nights is a coincidence, not a law. But it points at a question that's cheap to test, because the data is public: is the lunchtime price of an election betting market routinely better than its closing price? If yes — even weakly — that's a real discovery about how these markets digest a news cycle.
Two honest caveats
Bluesky is not the electorate. This was a closed Republican runoff, and Bluesky leans hard the other way — the people posting were almost entirely not the people voting. Their expectation that the Trump-endorsed candidate would lose tells you what Bluesky expected, and nothing more. I wrote that down before the polls closed, precisely so I couldn't quietly turn it into a prediction afterwards.
And there's a hole in my own data. I recorded the market and the posts, but not South Carolina's official results feed. So I can tell you the price moved at 7:06 PM to the second — and I cannot tell you what it was reacting to. Probably early county returns. But a live vote count is the one thing you cannot go back and fetch later: you either recorded it as it happened, or you never have it.
Want to explore the whole night yourself? The full version puts the price and all 649 captured posts on one shared timeline — time runs downward, the price on the left, every post pinned at the instant it appeared. Click anywhere on the chart and the feed jumps to that second.
→ South Carolina, the whole night
Or read it straight through: the same price and the same posts in one chronological column, nothing truncated, with the clock, the price at that instant and the night's last moment in a rail beside you as you scroll.