Query Formula 1 data using the f1-cli command-line tool (wraps OpenF1 API). Use when the user asks about F1 race results, lap times, driver standings, pit st...
A Go CLI wrapping the OpenF1 API for querying F1 telemetry, timing, and session data.
brew tap barronlroth/tap
brew install f1-cli
Or from source:
go install github.com/barronlroth/f1-cli/cmd/f1@latest
The binary name is f1.
| Flag | Description |
|---|---|
--json | Output as JSON (default: table) |
--csv | Output as CSV |
--session KEY | Session key — number or latest |
--meeting KEY | Meeting key — number or latest |
--driver DRIVER | Driver number (44) or 3-letter acronym (HAM) |
--limit N | Limit results returned |
--filter EXPR | Raw API filter, repeatable (e.g. speed>=300) |
| Command | Endpoint | What it returns |
|---|---|---|
f1 drivers | /drivers | Driver info: name, team, number, acronym |
f1 sessions | /sessions | Session list (FP1-3, Quali, Sprint, Race) |
f1 meetings | /meetings | Grand Prix weekends (extra: --year, --country) |
f1 laps | /laps | Lap times, sector times, speed traps |
f1 telemetry | /car_data | Speed, RPM, gear, throttle, brake, DRS at ~3.7 Hz |
f1 pit | /pit | Pit stop timing and duration |
f1 positions | /position | Position changes throughout session |
f1 intervals | /intervals | Gap to leader and car ahead (race only) |
f1 standings drivers | /championship_drivers | Driver championship points (race sessions) |
f1 standings teams | /championship_teams | Constructor standings (race sessions) |
f1 weather | /weather | Track temp, air temp, humidity, wind, rain |
f1 race-control | /race_control | Flags, safety car, incidents |
f1 radio | /team_radio | Team radio recording URLs |
f1 stints | /stints | Tire compound and stint laps |
f1 overtakes | /overtakes | Position exchanges between drivers |
f1 location | /location | Car XYZ position on track (~3.7 Hz) |
f1 doctor | — | API connectivity check |
Most commands need --session. Start with latest for the most recent session, or find a specific one:
# List sessions for the latest meeting
f1 sessions --meeting latest
# Find a specific Grand Prix
f1 meetings --year 2025 --country Singapore
# Then use the session_key from the output
f1 laps --session 9161 --driver VER
The --driver flag accepts either a number or a 3-letter acronym. The CLI resolves acronyms automatically via the API.
# These are equivalent
f1 laps --session latest --driver 1
f1 laps --session latest --driver VER
Common driver acronyms: VER (Verstappen), NOR (Norris), HAM (Hamilton), LEC (Leclerc), PIA (Piastri), SAI (Sainz), RUS (Russell), ALO (Alonso).
The --filter flag passes raw query params to the API. Supports >=, <=, >, < operators. Can be repeated.
# Cars going over 315 km/h
f1 telemetry --session 9159 --driver 55 --filter "speed>=315"
# Pit stops under 2.5 seconds
f1 pit --session latest --filter "stop_duration<2.5"
# Combine multiple filters
f1 telemetry --session latest --driver VER --filter "speed>=300" --filter "throttle>=95"
# Laps under 90 seconds
f1 laps --session latest --filter "lap_duration<90"
# Default: aligned table
f1 drivers --session latest
# JSON for piping to jq or other tools
f1 telemetry --session latest --driver VER --json | jq '.[0].speed'
# CSV for spreadsheets
f1 laps --session latest --driver HAM --csv > hamilton_laps.csv
# Always use standings for final race results
f1 standings drivers --session latest
Do NOT use f1 positions for race results. Positions is a time series — it records every position change throughout the session. Using --limit on positions gives you the start of the race, not the finish. Use f1 standings drivers for the final classification.
f1 laps --session latest --driver VER --json > /tmp/ver.json
f1 laps --session latest --driver NOR --json > /tmp/nor.json
# Then compare the JSON files
f1 race-control --session latest
f1 stints --session latest --driver VER
f1 weather --session latest --limit 10
f1 pit --session latest --filter "stop_duration<3" --json | jq 'sort_by(.stop_duration)'
--limit is client-side only. The OpenF1 API does not support a limit query parameter. The CLI fetches all results then truncates locally. This means large telemetry/location queries still hit the API fully — use --filter to narrow server-side when possible.--filter is server-side. Filters like speed>=300 are sent to the API and reduce the response. Always prefer --filter over --limit for performance.positions is a time series, not a result. It records every position change during a session. To get final race results, use f1 standings drivers --session <key>, not f1 positions. Using positions --limit N gives you lap 1 grid order, not the finish.latest keyword: Works for both --session and --meeting to get the most recent.--filter to narrow results server-side, then --limit to cap output.--session latest returns 404 when no sessions exist. Use a known session_key from a past season instead.ZIP package — ready to use