Skip to content

Derived Carry Filters

Two filters classify carry events by properties the API computes from the carry geometry and the team's attacking direction. Both return carry intervals with the actor fields (player_id, team_id, team_name) and, when requested, pitch coordinates. Both require v3 data. take_on_candidate requires engine 0.5.45 or later.

Both filters apply to every carry, whatever its length. For coach-facing counts and clips use the drive event: carries of at least 3 m carrying the same two classifications as progressive and take_on, queried with the event_property filter:

{
  "type": "event_property",
  "event_type": "drive",
  "properties": [{ "field": "progressive", "eq": true }]
}

Progressive carry

Carries that moved the ball toward the opponent goal, by the FBref/Opta standard. A carry is progressive when it advances at least 10 m toward the opponent goal, or at least 5 m when it starts in the attacking third, or it ends inside the opponent penalty box. Carries shorter than 5 m never qualify.

{
  "type": "progressive_carry",
  "teams": ["team_0"],
  "players": ["0-10"]
}
Parameter Type Required Description
players array \| null No Restrict to these player ids.
teams array \| null No Restrict to these teams. Ignored when players is set.

Progress toward goal needs the team's attacking direction, taken from the same source the player report uses. Results carry the label progressive_carry.

Warning

When the run's attacking direction is unknown, the filter returns no intervals rather than guessing. The direction comes from the video's left_start_team (the confirm-sides answer when one was given), else the engine's game meta, else the tracking side signal. When the half boundary is unknown, the first-half direction is applied to the whole match, so second-half carries are scored toward the wrong goal.

Take-on candidate

Carries that engaged a defender: the carrier came within a threshold distance of an opponent during the carry. This marks a carry as a candidate take-on. It is not a claim that the defender was beaten. The engine does not grade take-on success.

{
  "type": "take_on_candidate",
  "teams": ["team_0"],
  "max_opp_dist_m": 1.5
}
Parameter Type Unit Required Description
players array \| null No Restrict to these player ids.
teams array \| null No Restrict to these teams. Ignored when players is set.
max_opp_dist_m float \| null m No Closest-approach distance that counts as engaging a defender. Default 1.5.

The threshold reads the carry's min_opp_dist_m metadata. A lower value selects tighter engagements: 1.5 recovers more take-ons, 1.0 fewer but purer. Results carry the label take_on_candidate.

Progressive pass

Passes that moved the ball toward the opponent goal, by the same rule as progressive carry: at least 10 m toward the opponent goal, or at least 5 m when the pass starts in the attacking third, or ending inside the opponent penalty box. Passes shorter than 5 m never qualify.

{
  "type": "progressive_pass",
  "teams": ["team_0"]
}
Parameter Type Required Description
players array \| null No Restrict to these player ids.
teams array \| null No Restrict to these teams. Ignored when players is set.

Passes with pass_result incomplete or out are left out. Passes without a pass_result count, and the field is not currently populated, so results are attempted passes. Results carry the label progressive_pass.

Warning

When the run's attacking direction or half boundary is unknown, the filter returns no intervals.

Zone entry

Passes and carries that start outside a zone and end inside it, in the actor's attacking direction.

{
  "type": "zone_entry",
  "zone": "final_third",
  "via": "pass",
  "teams": ["team_0"]
}
Parameter Type Required Description
zone string Yes final_third (the third nearest the opponent goal) or penalty_box (the opponent penalty box).
via string No pass, carry or any. Default any.
players array \| null No Restrict to these player ids.
teams array \| null No Restrict to these teams. Ignored when players is set.

A pass or carry that starts inside the zone is not an entry. Passes with pass_result incomplete or out are left out. Results carry the label final_third_entry or penalty_box_entry.

Warning

When the run's attacking direction or half boundary is unknown, the filter returns no intervals.