Steam detection: what 'sharp money' actually looks like
Coordinated moneyline and spread moves across the sharp operators inside a 5-minute window. What an event looks like, how a spread move is weighted by the key numbers, and what we filter out as noise.
Every minute while NFL games are inside the next seven days we pull current moneylines and spreads from the sharp operators: Pinnacle and BetOnline today (LowVig is BetOnline's reduced-juice skin, so the two count as one operator). When two of them move the same game the same way by ≥2pp inside a 5-minute window, that's a steam event. We log it, dispatch it to a Slack webhook, and surface it on /trust/steam: the public view lists moves that settled more than two hours ago, and a Pro account sees them live (pricing). On a spread the size of a move is not its number of points but what those points are worth. Measured from 2,939 regular-season games against one league-wide margin distribution, the same for every game, a half-point is worth about 4.8pp onto the key number 3, about 2.2pp onto 6, about 2.8pp onto 7 and about 0.5pp from 8.5 to 9: what the margin table measures at that number, not a prediction of any one alert's size. A half-point onto 3, 6 or 7 clears the 2pp bar on its own; onto 4, 10 or 14 does not; most half-points away from the key numbers are not.
What steam actually looks like
An illustration, not a log excerpt. The two moves that make up one steam event:
11:42 ET KC@LAR h2h/away +3.2pp Pinnacle
11:43 ET KC@LAR h2h/away +2.8pp BetOnline
Two sharp operators moved the Chiefs' moneyline higher within 90 seconds. Pinnacle moved first; BetOnline followed within a minute. That's the coordination we're detecting — it doesn't happen because each book independently decided to move; it happens because real money hit Chiefs at one of them and the other followed the sharpest book's lead.
What we deliberately filter out
Single-operator moves
If only Pinnacle moves and BetOnline sits still, that's most likely a Pinnacle correction (operator error, late injury news Pinnacle priced first) — not coordinated sharp money. We require two sharp operators before we call it steam, and BetOnline and LowVig count as one: both of them moving is one operator moving twice.
Sub-2pp jitter
Sharp books retick prices constantly as bots arb against each other in microseconds. A 0.5pp move on Pinnacle that drifts back within 90 seconds is jitter, not action. The 2pp floor filters this.
Moves outside the 5-minute window
A move at 11:42 and another at 11:55 might be related but most often isn't. The 5-minute window catches the coordination burst; longer windows muddle real signal with bookkeeping activity.
Two illustrations
Worked scenarios, not entries from our log.
Example 1: Late injury news
Say it's a Sunday morning at 11:42 ET and the starting quarterback for the home team is ruled out. Sharp books that have insider feeds adjust within seconds. Pinnacle and BetOnline both move the home team's moneyline by 2-4pp inside the next two minutes. Steam fires. Anyone watching the alert would have a few minutes before retail books (DraftKings, FanDuel) caught up.
Sharp users with our watchlist set on that game get the alert at /me/alerts. Whether they act on it is their call — we don't tell users what to bet, just when the sharps move.
Example 2: Sharp action with no news
More interesting: a Friday afternoon, no injury news, no weather change, no public coverage. Pinnacle and BetOnline both move the same team's moneyline by 2.5pp inside 4 minutes. No retail book moves for another 20 minutes.
That's a syndicate or a sharp group placing real money quietly. We don't know who or why.
Why the dispatch is best-effort, not authoritative
We dispatch to a Slack webhook for our own alerting and fan out per-user alerts to anyone watchlisting the game. The authoritative surface is the in-product /trust/steam feed, which reads the stored alerts. The loop polls every 60 seconds; the public view lists moves that settled more than two hours ago, and a Pro account sees them live. Slack can drop messages; the feed does not depend on it.
The honest caveats
- NFL is the only sport with steam detection wired today, on moneylines and spreads. Other sports get the watchlist + per-user alerts when we extend the cron.
- Sharp books occasionally move in concert for non-sharp reasons (operator error, limit changes). The 2pp floor + 5-minute window catches most coordination, not all.
- Steam direction tells you SHARP money is on a side. It does not guarantee that side wins. Sharps lose. Sharps lose less than the public on average.
Methodology details: /methodology#signal-steam_detection.