Skip to content

walking cat

Formula Telemetry Documentation

This documentation describes the Formula 1 telemetry data that is publicly available, and the principles behind how formula-telemetry.com is built on top of it.

Several key metrics unfortuneatly aren't public. The following metrics are missing from public data:

  • Tire temperatures and pressures
  • Brake pressure (we only get on/off, not how hard)
  • ERS deployment and battery state
  • Fuel load
  • Suspension travel and ride height

These gaps shape what the app can, and cannot, show.

Formula Telemetry Sketch

Every Formula 1 session produces a continuous stream of timing and telemetry data. The cars transmit it, the FIA collects it, and the broadcasters render parts of it on screen.

The raw feed comes from F1's livetiming feed, OpenF1 is a wrapper that turns it into a clean HTTP API, which this site uses to pull data into its own database.


Data per one session?

It helps to see actual numbers. Here is a single Grand Prix — just the Race session, not the whole weekend — broken down by object type:

Object Records per race What that is
Session 1 The race itself.
Drivers 20 One entry per driver in the session.
Laps ~1,380 20 drivers × ~69 laps. One row per completed lap.
CarData ~560,000 Telemetry samples at ~3.7 Hz per car, for the full race distance.
Location ~540,000 (x, y, z) track positions, sampled at a similar rate to CarData.
Position ~40,000 Discrete position-change events (1st, 2nd, …, 20th).
Intervals ~20,000 Per-driver gap-to-leader and gap-to-car-ahead updates.

That's well over a million records for a single race session, and a race is only one of four to six sessions in a weekend. Stretch it across an entire 24-round season and the numbers move into the tens of millions:

2025 Season  ── 24 race weekends, ~156 sessions
├── Sessions   ──    ~156
├── Drivers    ──  ~3,120
├── Laps       ── ~125,430
├── CarData    ── ~13,504,176
├── Position   ──    ~890,123
└── Intervals  ──    ~445,678

The Formula Telemetry app ingests all of this into MongoDB, indexes it by session_key, and serves it through its own API to the charts you see. The dataset for a typical race weekend is well over a gigabyte before it's been processed for display.

Data structure

Every object on this site is scoped by two keys:

  • meeting_key — identifies a whole race weekend (e.g. the Singapore Grand Prix 2024).
  • session_key — identifies a single session within that weekend (FP1, FP2, FP3, Qualifying, Sprint Shootout, Sprint, Race).
Meeting Key: 1229 (Bahrain GP 2024)
├── Session Key: 9470  (Practice 1)
├── Session Key: 9471  (Qualifying)
└── Session Key: 9472  (Race)
        ├── Drivers, Laps, CarData, Location,
        │   Position, Intervals, Pit, Stints,
        │   Weather, RaceControl, TeamRadio,
        │   SessionResult, StartingGrid, Overtakes

If you only remember one thing about the structure: everything hangs off session_key. That's the filter you'd use to ask "show me Verstappen's telemetry from the 2024 Monaco race" — pick the session, then pick the driver.