FastF1 — Formula 1 Data
Before writing queries, consult references/api-reference.md for endpoints, ID conventions, and data shapes.
Quick Start
Prefer the CLI — it avoids Python import path issues:
sports-skills f1 get_race_schedule --year=2025
sports-skills f1 get_race_results --year=2025 --event=Monza
Python SDK (alternative):
from sports_skills import f1
schedule = f1.get_race_schedule(year=2025)
results = f1.get_race_results(year=2025, event="Monza")
CRITICAL: Before Any Query
CRITICAL: Before calling any data endpoint, verify:
- Year is derived from the system prompt's
currentDate — never hardcoded.
- In January or February, use
year = current_year - 1 (pre-season; the new F1 season has not started yet).
Choosing the Year
Derive the current year from the system prompt's date (e.g., currentDate: 2026-02-16 → current year is 2026).
- If the user specifies a year, use it as-is.
- If the user says "latest", "recent", "last season", or doesn't specify: The F1 season runs roughly March–December. If the current month is January or February, use
year = current_year - 1. From March onward, use the current year.
Workflows
Race Weekend Analysis
get_race_schedule --year=<year> — find the event name and date
get_race_results --year=<year> --event=<name> — final classification (positions, times, points)
get_lap_data --year=<year> --event=<name> --session_type=R — lap-by-lap pace analysis
get_tire_analysis --year=<year> --event=<name> — strategy breakdown (compounds, stint lengths, degradation)
Driver/Team Comparison
get_championship_standings --year=<year> — championship context (points, wins, podiums)
get_team_comparison --year=<year> --team1=<t1> --team2=<t2> OR get_driver_comparison --year=<year> --driver1=<d1> --driver2=<d2>
get_season_stats --year=<year> — aggregate performance (fastest laps, top speeds)
Season Overview
get_race_schedule --year=<year> — full calendar with dates and circuits
get_championship_standings --year=<year> — driver and constructor standings
get_season_stats --year=<year> — season-wide fastest laps, top speeds, points leaders
get_driver_info --year=<year> — current grid (driver numbers, teams, nationalities)
Commands
| Command |
Description |
get_race_schedule |
Full season calendar with dates and circuits |
get_race_results |
Final race classification (positions, times, points) |
get_session_data |
Raw session info (Q, FP1, FP2, FP3, R) |
get_driver_info |
Driver details from the grid |
get_team_info |
Team info with driver lineup |
get_lap_data |
Lap-by-lap timing with sectors and tire data |
get_pit_stops |
Pit stop durations and team averages |
get_speed_data |
Speed trap and intermediate speed data |
get_championship_standings |
Driver and constructor championship standings |
get_season_stats |
Aggregate season performance |
get_team_comparison |
Team head-to-head: qualifying, race pace, sectors |
get_driver_comparison |
Driver head-to-head: qualifying H2H, race H2H, pace delta |
get_tire_analysis |
Tire strategy, stint lengths, degradation rates |
See references/api-reference.md for full parameter lists and return shapes.
Examples
Example 1: F1 calendar
User says: "Show me the F1 calendar"
Actions:
- Derive year from
currentDate
- Call
get_race_schedule(year=<derived_year>)
Result: Full calendar with event names, dates, and circuits
Example 2: Driver race performance
User says: "How did Verstappen do at Monza?"
Actions:
- Derive year from
currentDate (or from context)
- Call
get_race_results(year=<year>, event="Monza") for final classification
- Call
get_lap_data(year=<year>, event="Monza", session_type="R", driver="VER") for lap times
Result: Finishing position, gap to leader, fastest lap, and tire strategy
Example 3: Latest results queried in pre-season
User says: "What were the latest F1 results?" (asked in February 2026)
Actions:
- Current month is February → season not yet started → use
year = 2025
- Call
get_race_schedule(year=2025) to find the last event of that season
- Call
get_race_results(year=2025, event=<last_event>) for the final race results
Result: Results of the final 2025 race
Commands that DO NOT exist — never call these
get_qualifying / get_practice — does not exist. Use get_session_data with session_type="Q" for qualifying or session_type="FP1"/"FP2"/"FP3" for practice.
get_standings — does not exist. Use get_championship_standings instead.
get_results — does not exist. Use get_race_results instead.
get_calendar — does not exist. Use get_race_schedule instead.
If a command is not listed in the Commands table above, it does not exist.
Troubleshooting
Error: Event name not found
Cause: Event name spelling does not match FastF1's internal naming
Solution: Call get_race_schedule(year=<year>) first to get the exact event names, then retry with the correct name
Error: Session data is empty
Cause: The session has not happened yet
Solution: FastF1 only returns data for completed sessions. Check get_race_schedule for when the session is scheduled
Error: get_race_results returns no fastest_lap_time
Cause: Some races do not include fastest lap data in the results endpoint
Solution: Use get_lap_data(session_type="R") and find the minimum lap_time across all drivers
Error: Querying the current year in January or February returns no data
Cause: The new F1 season has not started yet
Solution: Use year = current_year - 1 for any pre-March query; do not query the current year before March
1---2name: fastf13description: Formula 1 data — race schedules, results, lap timing, driver and team info. Powered by the FastF1 library. Covers F1 sessions, qualifying, practice, race results, sector times, tire strategy. Use when: user asks about F1 race results, qualifying, lap times, driver stats, team info, the F1 calendar, or Formula 1 data. Don't use when: user asks about other motorsports (MotoGP, NASCAR, IndyCar, WEC, Formula E). Don't use for F1 betting odds or predictions — use kalshi or polymarket instead. Don't use for F1 news articles — use sports-news instead.4license: MIT5---67# FastF1 — Formula 1 Data89Before writing queries, consult `references/api-reference.md` for endpoints, ID conventions, and data shapes.1011## Quick Start1213Prefer the CLI — it avoids Python import path issues:14```bash15sports-skills f1 get_race_schedule --year=202516sports-skills f1 get_race_results --year=2025 --event=Monza17```1819Python SDK (alternative):20```python21from sports_skills import f12223schedule = f1.get_race_schedule(year=2025)24results = f1.get_race_results(year=2025, event="Monza")25```2627## CRITICAL: Before Any Query2829CRITICAL: Before calling any data endpoint, verify:30- Year is derived from the system prompt's `currentDate` — never hardcoded.31- In January or February, use `year = current_year - 1` (pre-season; the new F1 season has not started yet).3233## Choosing the Year3435Derive the current year from the system prompt's date (e.g., `currentDate: 2026-02-16` → current year is 2026).3637- **If the user specifies a year**, use it as-is.38- **If the user says "latest", "recent", "last season", or doesn't specify**: The F1 season runs roughly March–December. If the current month is January or February, use `year = current_year - 1`. From March onward, use the current year.3940## Workflows4142### Race Weekend Analysis431. `get_race_schedule --year=<year>` — find the event name and date442. `get_race_results --year=<year> --event=<name>` — final classification (positions, times, points)453. `get_lap_data --year=<year> --event=<name> --session_type=R` — lap-by-lap pace analysis464. `get_tire_analysis --year=<year> --event=<name>` — strategy breakdown (compounds, stint lengths, degradation)4748### Driver/Team Comparison491. `get_championship_standings --year=<year>` — championship context (points, wins, podiums)502. `get_team_comparison --year=<year> --team1=<t1> --team2=<t2>` OR `get_driver_comparison --year=<year> --driver1=<d1> --driver2=<d2>`513. `get_season_stats --year=<year>` — aggregate performance (fastest laps, top speeds)5253### Season Overview541. `get_race_schedule --year=<year>` — full calendar with dates and circuits552. `get_championship_standings --year=<year>` — driver and constructor standings563. `get_season_stats --year=<year>` — season-wide fastest laps, top speeds, points leaders574. `get_driver_info --year=<year>` — current grid (driver numbers, teams, nationalities)5859## Commands6061| Command | Description |62|---|---|63| `get_race_schedule` | Full season calendar with dates and circuits |64| `get_race_results` | Final race classification (positions, times, points) |65| `get_session_data` | Raw session info (Q, FP1, FP2, FP3, R) |66| `get_driver_info` | Driver details from the grid |67| `get_team_info` | Team info with driver lineup |68| `get_lap_data` | Lap-by-lap timing with sectors and tire data |69| `get_pit_stops` | Pit stop durations and team averages |70| `get_speed_data` | Speed trap and intermediate speed data |71| `get_championship_standings` | Driver and constructor championship standings |72| `get_season_stats` | Aggregate season performance |73| `get_team_comparison` | Team head-to-head: qualifying, race pace, sectors |74| `get_driver_comparison` | Driver head-to-head: qualifying H2H, race H2H, pace delta |75| `get_tire_analysis` | Tire strategy, stint lengths, degradation rates |7677See `references/api-reference.md` for full parameter lists and return shapes.7879## Examples8081Example 1: F1 calendar82User says: "Show me the F1 calendar"83Actions:841. Derive year from `currentDate`852. Call `get_race_schedule(year=<derived_year>)`86Result: Full calendar with event names, dates, and circuits8788Example 2: Driver race performance89User says: "How did Verstappen do at Monza?"90Actions:911. Derive year from `currentDate` (or from context)922. Call `get_race_results(year=<year>, event="Monza")` for final classification933. Call `get_lap_data(year=<year>, event="Monza", session_type="R", driver="VER")` for lap times94Result: Finishing position, gap to leader, fastest lap, and tire strategy9596Example 3: Latest results queried in pre-season97User says: "What were the latest F1 results?" (asked in February 2026)98Actions:991. Current month is February → season not yet started → use `year = 2025`1002. Call `get_race_schedule(year=2025)` to find the last event of that season1013. Call `get_race_results(year=2025, event=<last_event>)` for the final race results102Result: Results of the final 2025 race103104## Commands that DO NOT exist — never call these105106- ~~`get_qualifying`~~ / ~~`get_practice`~~ — does not exist. Use `get_session_data` with `session_type="Q"` for qualifying or `session_type="FP1"`/`"FP2"`/`"FP3"` for practice.107- ~~`get_standings`~~ — does not exist. Use `get_championship_standings` instead.108- ~~`get_results`~~ — does not exist. Use `get_race_results` instead.109- ~~`get_calendar`~~ — does not exist. Use `get_race_schedule` instead.110111If a command is not listed in the Commands table above, it does not exist.112113## Troubleshooting114115Error: Event name not found116Cause: Event name spelling does not match FastF1's internal naming117Solution: Call `get_race_schedule(year=<year>)` first to get the exact event names, then retry with the correct name118119Error: Session data is empty120Cause: The session has not happened yet121Solution: FastF1 only returns data for completed sessions. Check `get_race_schedule` for when the session is scheduled122123Error: `get_race_results` returns no `fastest_lap_time`124Cause: Some races do not include fastest lap data in the results endpoint125Solution: Use `get_lap_data(session_type="R")` and find the minimum `lap_time` across all drivers126127Error: Querying the current year in January or February returns no data128Cause: The new F1 season has not started yet129Solution: Use `year = current_year - 1` for any pre-March query; do not query the current year before March