FASTFORWARD Supports 11 positional tracking data providers: SecondSpectrum, SkillCorner, Sportec, Tracab, HawkEye, GradientSports, Signality, StatsPerform, RespoVision, OptaVision. Additionally, it supports the Common Data Format.
This project owes a depth of gratitude to Kloppy and all its contributors.
⚠️ STATUS: This project is currently in Beta. Only the Python bindings are available (not the Rust code). Please try it, and report any issues here.
❓ ENQUIRIES: If you work for a (skeletal) tracking provider, or have access to (skeletal) tracking data from an unsupported provider and would like to see support for your data, please contact me at joris at unravelsports dot com.
pip install fast-forward-footballfrom fastforward import secondspectrum, skillcorner, sportec, tracab, hawkeye, cdf, gradientsports, signality, statsperform, respovision, optavision
# Load tracking data (example with SecondSpectrum)
dataset = secondspectrum.load_tracking(
raw_data="tracking.jsonl",
meta_data="metadata.json",
layout="long", # "long", "long_ball", "wide"
coordinates="cdf", # Coordinate system
orientation="static_home_away",
only_alive=True,
)
# Access data via properties
tracking_df = dataset.tracking # pl.DataFrame
metadata_df = dataset.metadata # Match metadata
teams_df = dataset.teams # Team info
players_df = dataset.players # Player info
periods_df = dataset.periods # Period info| Provider | Tracking Data | Public Data | Docs | Notes |
|---|---|---|---|---|
| CDF | ✓ | ↗ | ||
| GradientSports | ✓ | ↗ | ↗ | Formerly PFF |
| Hawkeye (2D) | ✓ | ↗ | Joint tracking data is not yet supported | |
| OptaVision | ✓ | ↗ | StatsPerform FIFA EPTS format | |
| RespoVision | ✓ | ↗ | Includes support for v1 data | |
| SecondSpectrum | ✓ | ↗ | ||
| Signality | ✓ | ↗ | ||
| SkillCorner | ✓ | ↗ | ↗ | Includes support for v3 data |
| Sportec | ✓ | ↗ | ↗ | |
| Stats Perform | ✓ | ↗ | Includes support for MA1, MA3, and MA25 data feeds | |
| Tracab | ✓ | ↗ |
For Spark, Ray, and Dask workflows, fast-forward exposes engine="arrow" and engine="arrow[spark]" paths that return pyarrow.Table directly without importing kloppy on executors. See Distributed Compute.

