Live basketball scoring, from the table to the stream

One person at the scorer's table works a browser console. Every basket, foul and substitution they enter lands on the public game page, the scoreboard on the gym TV and the overlay in your stream within about a second, and the box score is…

bbstats.amStart free →

Live basketball scoring, from the table to the stream

One person at the scorer's table works a browser console. Every basket, foul and substitution they enter lands on the public game page, the scoreboard on the gym TV and the overlay in your stream within about a second, and the box score is finished when the game is.

Most league software treats the game as a form to fill in afterwards: somebody types a final score and a few totals once the gym has emptied. A real-time scoring system inverts that. The scorer's console becomes the single place the game is recorded, and everything else — the live score a parent is watching on their phone, the scoreboard above the court, the graphics on your stream, the box score, the league leaders — is generated from that one stream of events rather than re-entered.

That shift is what makes live scoring worth the trouble, and it is also what makes it demanding: the table now has to work while the game is being played, which means the interface, the network and the failure behaviour all matter in a way they never did for a form. This page is specific about all three, including where ours stops.

What the scorer's table looks like

Nothing is installed and nothing is proprietary. The whole table runs in a browser, which means a borrowed laptop works and a broken one is replaced in thirty seconds.

One scorer, one screen

A laptop or tablet running the scoring console in a normal browser. This is the person entering baskets, fouls, rebounds and substitutions, and controlling the game clock. For recreational basketball this is the entire table.

One shot-clock operator, optionally

Competitive games add a second person on a separate shot-clock console, on their own screen. It is a deliberately separate role: the shot-clock operator cannot alter the score, and the scorer cannot be interrupted by shot-clock resets.

A screen for the gym, if you have one

A TV or projector on a third browser tab showing the full-screen scoreboard, or a combined scoreboard and shot-clock view. It is a read-only display driven by the same live data, so nobody has to operate it.

A streaming machine, if you stream

OBS on whatever computer is running the stream, with the overlay added as a browser source. No plugin, no capture card trickery, no second operator keying in the score for the broadcast.

What the console enforces

The rules are applied server-side rather than left to the scorer to remember, so the count is right even when the table is busy.

Period length8, 10 or 12 minutes, chosen when the game is created
OvertimeFive-minute periods, as many as the game needs
Game clockHeld by the server and started and stopped by the scorer, so every device shows the same time
Starting the clockBlocked until five starters are named on each side
Team foulsCounted per quarter for each team, with the bonus reached at four
In the bonusA personal foul becomes two free throws
TimeoutsTwo per team in the first half, three in the second, one per overtime — enforced, not just displayed
Possession arrowAdvances by itself, set from the opening jump ball, and overridable by the scorer
Fifth foulDisqualification is raised automatically
Shot clockReset to 24 or 14 seconds, counting in tenths under five seconds
Shot clock linkageFreezes with the game clock by default, or runs independently if you prefer
Scorer's consoleAny current browser — nothing to install on any device

Only one device can score a game at a time

The most expensive failure at a scorer's table is not a crash, it is two people scoring the same game and both entering the same basket. So a game has exactly one write lock, held by one connection. When a second person opens the console for a game that is already being scored, they are told who holds it and since when, rather than being allowed to quietly double-count.

The lock is a lease rather than a claim: it is held for ninety seconds and renewed automatically while the holder is scoring, so a laptop that dies at half-time does not lock the game out for the rest of the evening. Handover is explicit — the incoming scorer presses Take over, and the lock moves. There is no silent stealing, and everyone watching the console is told the scorer changed.

The shot clock deliberately sits outside all of this. It is authorised separately, so the second operator can run it without ever holding the scoring lock and without being able to touch the score.

What happens when the gym wifi drops

It will. The honest answer is that the console is built to survive a drop rather than to pretend one cannot happen. The connection re-establishes itself, the console rejoins the game and pulls a fresh copy of the score, the box score and the play-by-play, so it resyncs to the server's version of the game rather than carrying on from a stale local one.

Every action carries its own identifier, which is what makes a retry safe. If a basket was recorded but the confirmation never came back, sending it again does not score it twice — the server recognises the same action and returns the original result. This is the failure that quietly corrupts box scores on systems without it.

If the lock lapsed while the table was offline, the console re-arms and asks the scorer to repeat their last action rather than guessing. Deliberately so: a scoring system that silently replays a queue after an outage can insert a basket into the wrong game state.

One event stream, five places it shows up

Everything downstream reads the same live feed, which is the point — nobody re-enters the score for the stream, and the scoreboard in the gym cannot disagree with the website. Viewers do not need an account to watch a game update.

The stream overlay is a browser source in OBS with a designer behind it, so layout, position, fonts, scale, colours and which elements appear — team fouls, possession, period and clock, logos, transparent background — are configured with a live preview rather than by editing CSS between games. There is also a plain scoreboard feed for anyone wiring the score into a system of their own.

The box score is a by-product, not a second job

Because the game is recorded event by event, the statistics are finished the moment the game is. Shots are entered by type — layup, dunk, jump shot, hook, floater, fadeaway, pull-up, step-back, putback — and in court mode the scorer taps where the shot came from, so the position is recorded too. Assists attach to the made basket rather than being counted separately, which is what stops assist totals drifting away from field goals.

The full line comes out of that: points, shooting splits, offensive and defensive rebounds, assists, steals, blocks, turnovers by type, fouls by type, substitutions, minutes and plus/minus, per player and per game. Team rebounds, team turnovers and deadball rebounds are tracked separately, the way an official sheet expects. Box scores export to PDF for federation reporting.

Fixing what the table got wrong

Scorers make mistakes, and a live system that cannot absorb them is worse than paper. A play-by-play entry can be corrected, inserted in the right place in the sequence, or deleted, and the game is then rebuilt from its event log — score, quarter scores, team fouls, timeouts, every player line, plus/minus and minutes are recalculated from scratch rather than patched.

That rebuild is restricted to administrators, while scorers and statisticians can adjust an entry's description without touching the statistics. Corrections broadcast like any other change, so a fix made an hour after the final buzzer reaches the public game page, and if it changes who won a playoff game, the series count follows.

Every screen the live game reaches

These are real addresses on your own league site once a game is under way — no separate app, no per-viewer licence.

Public game page /games/:id
Live score, play-by-play and box score as the game happens, on your branded league site.
Arena scoreboard /games/:id/scoreboard
Full-screen scoreboard for a TV or projector in the gym. Open it and leave it.
Shot clock and table displays /games/:id/shot-clock
Shot clock alone, or combined with the game clock and score, for the display behind the basket or on the table.
Stream overlay /overlay/games/:id
Transparent browser source for OBS, themed in the overlay designer to match your league.
Display picker /tv
Pick today's game and a display mode without typing an address into a smart TV.
Scoreboard feed /api/games/:id/scoreboard
The live scoreboard as HTML, JSON or plain text for anyone integrating a display of their own.

What live scoring costs you, and where ours stops

Real-time scoring asks for things a results form never did. Before committing a season to it, check that these are all true for you:

  • You need a working connection at the scorer's table. The console recovers from a drop, but there is no offline mode — a venue with no signal at all has to enter the final score afterwards instead.
  • You need someone at the table for the whole game. Live scoring is a staffed role, not something that happens by itself.
  • Scoring is held by league staff — administrators, editors and statisticians. There is no referee role, and coaches cannot score from the coach portal.
  • Standings and league leaders update when a game is finalised, not during the third quarter. The live score, play-by-play and box score are immediate; the season tables wait for the final buzzer.
  • Rebuilding a game after a correction is an administrator action, so a statistician cannot repair a mis-entered play on their own.

If a staffed table is not realistic for your league, platforms that delegate score entry to referees or team volunteers will serve you better. See the shortlist.

Frequently asked questions

What is a real-time basketball scoring system?

A system where the game is recorded event by event as it is played, and everything else is generated from that stream — the public score, the box score, the gym scoreboard and the stream overlay — instead of being typed in again afterwards. The practical test is whether a parent watching at home sees the score change while the ball is still in play.

How does live basketball scoring work on bbstats.am?

A scorer opens the console in a browser at the table and enters baskets, fouls, rebounds and substitutions while controlling the game clock. Each accepted action is broadcast immediately to every screen watching that game, so the public page, the gym scoreboard and the stream overlay all reflect the same state within about a second.

Can two people score the same game at once?

No, and that is deliberate. A game has one write lock held by one connection, so a second person opening the console is shown who is scoring rather than being allowed to double-count baskets. Handover is an explicit Take over action. The shot clock is a separate role that does not need the scoring lock.

What happens if the internet drops during a game?

The console reconnects, rejoins the game and pulls a fresh copy of the score, box score and play-by-play, so it resyncs rather than continuing from stale local state. Every action carries an identifier, so retrying one that may already have been recorded cannot score it twice. There is no offline mode — a venue with no connectivity at all needs the final score entered afterwards.

Do you need special hardware to score a game live?

No. The scoring console, the shot clock, the gym scoreboard and the stream overlay all run in an ordinary browser, so a laptop or tablet is enough and nothing is installed. Streaming needs OBS on the machine running the broadcast, with the overlay added as a browser source.

Can referees or team volunteers enter the score?

Not on bbstats. Scoring is held by league staff accounts — administrators, editors and statisticians — and there is no referee role. Team representatives can submit a final score for a game played without a live table, but that is a result submission rather than live scoring.

How do you fix a mistake in a live box score?

A play-by-play entry can be corrected, inserted at the right point in the sequence or deleted, and the game is then rebuilt from its event log so the score, team fouls, timeouts, player lines, plus/minus and minutes are all recalculated. Rebuilds are an administrator action; scorers can adjust an entry's description without touching statistics.

Does the standings table update during the game?

No. The live score, play-by-play and box score update as the game is played, but standings and league leaders are computed from finished games and change once the game is finalised. Corrections made to a finished game flow through to the standings.

Can the live score be shown on a stream?

Yes. Every game exposes a transparent overlay as a browser source for OBS, driven by the same live feed as the scoreboard, so nobody keys the score in a second time for the broadcast. An overlay designer sets the layout, position, colours, fonts and which elements appear, with a live preview.

How many overtimes are supported?

As many as the game needs. Each overtime is a five-minute period with one timeout per team, and the fouls, bonus and possession arrow continue to be tracked through it.