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.