What true shooting measures
True shooting puts twos, threes and free throws into one number: the points a player scores per scoring attempt, on the same scale as a field goal percentage.
TS% = PTS / (2 × scoring attempts)
The 2 sets the scale: a player who made a two on every attempt would shoot 100%. Points are easy to count. The hard part is the bottom of the fraction.
The hard part: counting the attempts
Field goal attempts are easy: one shot is one attempt. Free throws are harder. One trip to the line is one attempt, but a trip can have one, two or three free throws, or none of its own. So each kind of free throw is a different part of an attempt:
- Two free throws after a foul: one attempt, so each free throw is 0.5 of an attempt.
- Three free throws after a foul on a three-point shot: each one is 0.33 of an attempt.
- The free throw after a basket and a foul (the and-one): 0 attempts. The attempt was the shot, and we already counted it.
- A technical free throw: one free throw, one attempt, so 1.
The box score only lists free throws. It doesn't say which kind each one was, or how many trips there were. So the usual formula estimates the attempts:
scoring attempts ≈ FGA + 0.44 × FTA
The 0.44 is the average of the four kinds above, across a whole league. Every player gets the same 0.44, whatever kind of free throws he really took.
What we do instead
We don't need to estimate. Every number on 3StepsBasket is built from the play-by-play, event by event, and the events are checked before we store them. So we count each shot and each trip to the line as it happened.
The usual estimate
FGA + 0.44 × FTA
Every free throw is 0.44 of an attempt, for every player. From the box score.
What we count
FGA + FT trips
Each player's own trips to the line, from the play-by-play.
How much does it change?
Less than you might expect, and that's to the estimate's credit. Across the 2025-26 Euroleague, among the 126 players with at least 200 scoring attempts, it comes out 0.1 points high on average, and for most of them it's within half a point.
But the top of a TS% list is tight, and half a point is enough to reshuffle it. Here it is, worked out both ways:
| Player | TS% estimated | Rank | TS% counted | Rank |
|---|---|---|---|---|
| Edy Tavares | 71.8 | 3 | 71.7 | 1 |
| Nikola Milutinov | 72.3 | 2 | 71.7 | 2 |
| Nando De Colo | 72.5 | 1 | 71.4 | 3 |
| Daniel Oturu | 71.1 | 4 | 71.3 | 4 |
| Johnathan Motley | 69.8 | 5 | 69.4 | 5 |
The estimate crowns Nando De Colo. Count the trips and the order at the top reverses: Edy Tavares first, by less than a tenth of a point over Nikola Milutinov, and De Colo third. Further down the list the moves get bigger: the average player shifts 2.5 places, 19 shift five places or more, and Jaime Pradilla climbs from 48th to 35th.
Who the estimate gets wrong
The gaps are biggest for players whose trips to the line don't look like the league's average. Here are the ten best Euroleague players of 2025-26, in the order of our 3Steps rating, worked out both ways:
| Player | Club | Attempts per free throw | TS% estimated | TS% counted | Estimate is off by |
|---|---|---|---|---|---|
| Elijah Bryant | Hapoel Tel Aviv | 0.47 | 64.2 | 63.8 | +0.4 |
| Aleksandar Vezenkov | Olympiacos | 0.45 | 66.9 | 66.7 | +0.2 |
| Sylvain Francisco | Zalgiris | 0.44 | 60.9 | 60.9 | 0.0 |
| Chima Moneke | Crvena Zvezda | 0.47 | 66.4 | 65.5 | +0.9 |
| Kameron Taylor | Valencia | 0.41 | 62.6 | 63.0 | -0.4 |
| Tornike Shengelia | Barcelona | 0.43 | 63.2 | 63.4 | -0.2 |
| Trey Lyles | Real Madrid | 0.46 | 64.8 | 64.3 | +0.5 |
| Nikola Milutinov | Olympiacos | 0.46 | 72.3 | 71.7 | +0.6 |
| Tyrique Jones | Olympiacos | 0.43 | 69.0 | 69.3 | -0.3 |
| Nikola Mirotic | Monaco | 0.47 | 63.4 | 62.9 | +0.5 |
Look at the attempts per free throw. The rule is simple:
- Below 0.44: the estimate counts more attempts than the player really took. His TS% comes out too low.
- Above 0.44: the estimate counts fewer attempts than he really took. His TS% comes out too high.
Three players from the table show it:
- Kameron Taylor: 0.41 attempts per free throw, below 0.44. The estimate gives him 62.6%. We count 63.0%.
- Chima Moneke: 0.47, above 0.44. The estimate gives him 66.4%. We count 65.5%. At 0.9 points, it's the largest difference of the ten.
- Sylvain Francisco: 0.44, the same as the estimate. Both ways give him 60.9%.
Where do the differences come from? From the kinds of free throws each player takes. And-ones and three-shot trips push the number down, because those free throws are a small part of an attempt, or none. Technical free throws push it up, because each one is a whole attempt.
Counting technicals as attempts costs good free throw shooters a little. Their team gives them the technicals: a free shot for the team, one more attempt for the player. We count it anyway. We'd rather show the real number than replace it with an average.
Under a point each sounds small. Put Moneke and Taylor side by side, though: the real gap between them is 2.5 points, and the estimate stretches it to 3.8.
Where you'll see it
Every TS% on the site uses the attempts we count: the stats glossary, player advanced pages, club players stats and the league charts. Ratings work the same way: offensive and defensive ratings count possessions one by one instead of estimating them: possessions, counted, not estimated.