Real-time March Madness analytics with Deephaven

Build a live tournament command center that tracks upsets, scoring runs, and bracket busters

March 10 2026

Margaret KennedyMargaret KennedyCommunications Director @Deephaven
ClaudeClaudeAI Assistant @Anthropic
AI prompt: Basketball bursting through a digital bracket grid with data particles and streaming numbers

The first Thursday of March Madness is controlled chaos: sixteen games tip off across four time slots, upsets unfold on courts you're not watching, and somewhere a 12-seed is about to ruin everything you thought you knew about your bracket.

You're toggling between browser tabs, refreshing ESPN, checking your pool standings, and by the time you notice what's happening on the other court, it's over — along with half your Final Four picks.

There's a better way. What if you had a single dashboard showing every game, flagging upsets as they develop, detecting scoring runs, and telling you exactly which results are destroying the most brackets in your pool?

That's what we're building today: a real-time March Madness command center using Deephaven, where every score update flows through instantly, analytics compute automatically, and you never miss another Cinderella story.

Need help with your picks? See Part 1: Data-driven bracket picks — use historical tournament data to find value picks and optimize your bracket strategy.

Every upset, every scoring run, every bracket buster — the moment it happens.

Step 1: Simulate live tournament games

First, we need games. In production, you'd connect to a live sports data feed. For this demo, we'll simulate multiple games ticking simultaneously — scores updating every few seconds, just like the real tournament.

Every three seconds, each game "ticks" with updated scores. The merge combines all games into a single table — your real-time scoreboard.

Step 2: Detect upsets in real-time

The magic of March Madness is the upset. A 12-seed beating a 5-seed. A 15-seed taking down a 2. We want to know the instant an upset is brewing — not after it's over.

Active upsets table showing games where lower seeds are winning

Now active_upsets shows only games where a lower seed is currently winning. The last_by("GameID") keeps just the most recent row per game — since our ticking table accumulates rows over time, this gives us the current state rather than every historical tick. When a 15-seed takes the lead against a 2-seed, it appears instantly.

Step 3: Track scoring runs

Basketball is a game of runs. A team down 10 can rip off a 15-2 run and suddenly lead by 3. These momentum swings decide games — and we can detect them in real-time.

Hot games table showing games with active scoring runs

When a team goes on a big run, hot_games lights up. You'll see the momentum shift before it shows up on TV.

Notice what we didn't write: no event loops, no state management, no callbacks. We described what we want — "rolling sum of deltas, grouped by game, filtered to runs over 8 points" — and Deephaven handles the how. Every tick, the engine recomputes only what changed. That's the power of a declarative query language on streaming data.

Note

Got stuck? Join the Deephaven Community Slack — ask questions, share your bracket pool ideas, and connect directly with the team.

Step 4: Bracket buster analysis

Once brackets lock, you can't change your picks — but you can track the damage in real-time. Which upsets are killing your bracket? Which games should you actually be watching? Not all upsets hurt equally: if you picked Duke to the Final Four and they lose in Round 1, your bracket is toast. If you had them losing in Round 2 anyway, the damage is limited.

Let's simulate a bracket pool and see who's surviving:

Step 5: Aggregate bracket damage

Now let's see who's winning the pool and which games are causing the most bracket carnage:

Pool standings table showing which pool members have the most correct picks

pool_standings updates live as games finish. bracket_busters shows which upsets are doing the most damage to your pool.

Step 6: Build the command center

Now let's combine everything into a single dashboard using deephaven.ui:

March Madness Command Center dashboard

Five panels, all updating in real-time:

  • Live Scoreboard — Every game, every score, every second.
  • Upset Alerts — Lower seeds currently winning.
  • Scoring Runs — Teams on hot streaks right now.
  • Pool Standings — Who's winning your bracket pool.
  • Bracket Busters — Which upsets are destroying the most brackets.

Stop refreshing ESPN. Let the data come to you.

Taking it further

This demo simulates games, but you could connect to real data sources:

  • Live sports APIs — ESPN, SportsRadar, or The Odds API for real scores.
  • Kafka streams — Ingest high-frequency play-by-play data.
  • Historical data — Load past tournaments to backtest bracket strategies.

You could also add:

  • Alerts — Slack or email notifications when your bracket takes a hit.
  • Visualizations — Real-time charts showing score progression.
  • Advanced analytics — Win probability models, pace of play metrics.

The real-time advantage

Traditional bracket tracking means refreshing a webpage. Maybe you check every few minutes. By then, the 15-seed upset already happened, your bracket is busted, and you didn't even get to enjoy the chaos.

With Deephaven, you're watching it unfold in real-time. The moment Vermont takes a lead on Duke, your dashboard flags it. You see the scoring run that shifts momentum. You know your bracket is in danger before the final buzzer.

That's the difference between following the tournament and commanding it.


Ready to build your own command center? Get started with Deephaven Community Core — it's free, open source, and handles real-time data like nothing else.

Note

Want to share your bracket command center or discuss real-time analytics with other data engineers? Join the Deephaven Community Slack.