Skip to content

Double Teams

The double_teams section in the markings response contains one row for each time a secondary defender commits to the ballhandler when it's not a reaction to an attack or a screen. So this excludes situations where the ballhandler is driving and the secondary defender is helping, or when the secondary defender is trapping off of a screen. It includes situations where the secondary defender is initiating a double, whether that's a backcourt trap in a press or a double to get the ball out of the ballhandler's hands or a double in the post.

Overview

A double team begins when a defender leaves their existing matchup and proactively commits to the player with the ball while another defender is already guarding that player. The defender does not need to get all the way to the ballhandler before they pass the ball as long as it is clear the defender was committing to the ballhandler.

In the case where a secondary defender comes over toward the ballhandler to overload the strong side of the floor but does not fully commit to the ballhandler, we do not count that as a double team in this data set. For example, here, Joel Embiid overloads the ball side of the floor, but we would not count this as a double team:

However, there are times where this "overload" coverage can create situations where the defender gets close enough to the ballhandler that it is difficult to distinguish between the overload and a true double team, and those cases may be included in this data set.

Sample Response

json
{
  "markings": {
    "double_teams": [
      {
        "double_team_id_ctg": "double_team_20fe242aeff5fd00e903f772077c3842",
        "game_id_nba": "0022500404",
        "chance_id_ctg": "chance_c4ed1838eb3166c707182e13c83",
        "possession_touch_id_ctg": "possession_touch_5cc8c170e139e0fdfdf30fccfe15c0fc",
        "ball_handler_id_nba": 203076,
        "primary_defender_id_nba": 1642852,
        "doubler_id_nba": 1629028,
        "period": 1,
        "start_he_frame": 5450,
        "end_he_frame": 5512,
        "start_wall_clock": "2025-12-23T01:12:05.301+00:00",
        "end_wall_clock": "2025-12-23T01:12:06.334+00:00",
        "start_game_clock": 676.0,
        "end_game_clock": 675.0,
        "start_shot_clock": 12.0,
        "end_shot_clock": 11.0
      }
    ]
  }
}

Fields

Identifiers

double_team_id_ctg

Type: string

CTG-generated unique identifier for the double team.


game_id_nba

Type: string

NBA game ID.


chance_id_ctg

Type: string

CTG chance ID during which the double team occurred.


possession_touch_id_ctg

Type: string

CTG possession touch ID for the ballhandler's touch during the double team.


Players

ball_handler_id_nba

Type: integer

NBA player ID of the player being double teamed.


primary_defender_id_nba

Type: integer

NBA player ID of the defender already guarding the ballhandler.


doubler_id_nba

Type: integer

NBA player ID of the secondary defender who commits to the ballhandler.


Timing

period

Type: integer

Period in which the double team began.


start_he_frame

Type: integer

Hawk-Eye frame when the second defender begins their movement toward the ballhandler.


end_he_frame

Type: integer

Hawk-Eye frame when the double team is determined to have ended. This is the earliest of:

  • the ball handler's possession touch ending
  • the doubler's commitment to the ballhandler ending

start_wall_clock

Type: string

UTC timestamp at the start frame.


end_wall_clock

Type: string

UTC timestamp at the end frame.


start_game_clock

Type: float

Game clock in seconds remaining in the period at the start frame.


end_game_clock

Type: float

Game clock in seconds remaining in the period at the end frame.


start_shot_clock

Type: float | Nullable

Shot clock in seconds at the start frame.


end_shot_clock

Type: float | Nullable

Shot clock in seconds at the end frame.