What a possession is
A possession is one turn with the ball. It starts when a team gets the ball and ends when the other team gets it. An offensive rebound doesn't start a new one: the same team still has the ball. A clean layup is one possession, and so is a trip with three misses and three offensive rebounds.
Possessions are what make teams comparable. A fast team scores more points per game because it gets more chances, not because it's better at using them. Divide by possessions and you get the ratings:
ORTG = 100 × points scored / possessions
The same goes for the defence (DRTG, points allowed per 100 possessions), the net rating (the difference between the two) and pace (possessions per game). All of them stand on one number, so it has to be right.
The usual estimate
The box score doesn't list possessions, so the usual formula rebuilds them from what it does list:
possessions ≈ FGA − OREB + TOV + 0.44 × FTA
- Every shot ends a possession…
- …unless the team grabs the offensive rebound, so those come off.
- Every turnover ends a possession.
- Trips to the line end possessions too, but the box score only lists free throws, so the 0.44 guesses how many trips they came from, the same guess as in true shooting.
Some versions refine it, for example by averaging both teams' estimates, but they all start from the box score.
What we do instead
We split the play-by-play into plays: a missed shot and its rebound, a foul and its free throws, a turnover. Every play has an offense, so a possession is simply the plays in a row by the same team. It ends when the other team has the ball or a period ends.
The usual estimate
FGA − OREB + TOV + 0.44 × FTA
Rebuilt from the box score, the same 0.44 for every team.
What we count
one possession per turn with the ball
Counted from the play-by-play, play by play.
How much does it change?
Across the 2025-26 Euroleague, the estimate gives every one of the 20 teams more possessions than they had: 478 extra over the season, 0.8%, or about 0.6 a game. Part of it is the free throws the 0.44 can't tell apart: the extra shot of an and-one and a technical free throw count as part of a trip, but neither comes with a new possession.
If every team got the same extra 0.6, the ratings would all shrink a little and the order would stay. They don't: Milan gets 0.33 extra a game, Zalgiris 0.90. Here are the top eight by net rating, worked out both ways:
| Team | Extra possessions per game | NETRTG estimated | Rank | NETRTG counted | Rank |
|---|---|---|---|---|---|
| Olympiacos | 0.56 | 10.6 | 1 | 10.6 | 1 |
| Real Madrid | 0.61 | 6.8 | 2 | 7.3 | 2 |
| Zalgiris | 0.90 | 4.8 | 4 | 5.3 | 3 |
| Valencia | 0.44 | 5.1 | 3 | 4.7 | 4 |
| Hapoel Tel Aviv | 0.68 | 2.9 | 5 | 2.8 | 5 |
| Panathinaikos | 0.50 | 2.4 | 7 | 2.3 | 6 |
| Fenerbahce | 0.43 | 2.5 | 6 | 2.1 | 7 |
| Monaco | 0.53 | 1.8 | 8 | 1.8 | 8 |
Zalgiris loses half a point of net rating to the estimate and drops from third to fourth, behind Valencia. Panathinaikos and Fenerbahce swap sixth and seventh. Across the whole table, 11 of the 20 teams end up in a different place.
Checked before it counts
Counting only works if the play-by-play is right, and official play-by-play isn't always right. So every game is checked before we store it. The system doesn't just add up events; it asks whether each play makes sense as basketball:
- Every play has to match a sequence that can happen on a court. A free throw needs a foul or a technical by the other team before it; one play has at most one field goal; a rebound ends a play.
- The clock never runs backwards, and the plays of each period add up to its length.
- Every player plays for the right team, with five on the floor for each side.
- The points we count are compared with the official box score.
A game that fails a check doesn't go in. A person goes through the flagged plays with the video and corrects them, and the game is checked again. When the video shows that the official record is wrong, we go with the video, even if our score then differs from the official one.
When the official record is wrong
In October 2022, Real Madrid hosted Virtus Bologna in the Euroleague. With under seven minutes left, the score went from 80-66 for Virtus to 80-67: the official play-by-play gave Dzanan Musa a free throw. There was no foul. The video shows Musa losing the ball on a pass and Virtus stealing it.
A free throw without a foul matches no play that can happen, so our system stopped on it. We checked the video and removed the point: on 3StepsBasket, that possession is Musa's turnover. The official record was never corrected, and it still has the free throw. We pointed it out, and Basketnews picked up the story.
The same check catches a free throw that did happen but went to the wrong team. In October 2026, in the Eurocup, the play-by-play of Balkan against Bahcesehir gave a free throw to Bahcesehir's #14. The video shows Balkan's #14 taking it. Bahcesehir had no foul to shoot from, so the play didn't fit. The official score says 60-101; the right one is 61-100.
Sometimes the error is big enough to change the result. At the 2023 World Cup, the official stats of South Sudan against Puerto Rico have South Sudan winning in overtime. Without the points that never happened, there is no overtime: Puerto Rico won 81-80 in regulation. That's the game we keep on 3StepsBasket, and every possession and rating that comes from it.
Where you'll see it
Every possession on the site is counted: offensive, defensive and net ratings in the stats glossary, pace, the team ratings and the league charts, and a player's ratings with them on the floor.