Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
machina-sports avatar

Fastf1

  • 340 installs
  • 201 repo stars
  • Updated August 5, 2026
  • machina-sports/sports-skills

Integrate FastF1 Python data for lap times, telemetry, standings, and race events into sports dashboards, models, or automated F1 analysis pipelines.

About

FastF1 integration skill for Formula 1 data: fetch lap times, telemetry, session results, and standings via Python to power sports analytics dashboards, content tools, and modeling pipelines.

  • Lap, sector, and stint timing extraction
  • Telemetry and car-performance metrics
  • Session, event, and standings lookups
  • Pandas-friendly race-weekend workflows
  • Reusable patterns for F1 analytics apps

Fastf1 by the numbers

  • 340 all-time installs (skills.sh)
  • +7 installs in the week ending Aug 2, 2026 (Skillselion tracking)
  • Ranked #553 of 2,064 Data Science & ML skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/machina-sports/sports-skills --skill fastf1

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs340
repo stars201
Last updatedAugust 5, 2026
Repositorymachina-sports/sports-skills

What it does

Integrate FastF1 Python data for lap times, telemetry, standings, and race events into sports dashboards, models, or automated F1 analysis pipelines.

Files

SKILL.mdMarkdownGitHub ↗

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

1. get_race_schedule --year=<year> — find the event name and date 2. get_race_results --year=<year> --event=<name> — final classification (positions, times, points) 3. get_lap_data --year=<year> --event=<name> --session_type=R — lap-by-lap pace analysis 4. get_tire_analysis --year=<year> --event=<name> — strategy breakdown (compounds, stint lengths, degradation)

Driver/Team Comparison

1. get_championship_standings --year=<year> — championship context (points, wins, podiums) 2. get_team_comparison --year=<year> --team1=<t1> --team2=<t2> OR get_driver_comparison --year=<year> --driver1=<d1> --driver2=<d2> 3. get_season_stats --year=<year> — aggregate performance (fastest laps, top speeds)

Season Overview

1. get_race_schedule --year=<year> — full calendar with dates and circuits 2. get_championship_standings --year=<year> — driver and constructor standings 3. get_season_stats --year=<year> — season-wide fastest laps, top speeds, points leaders 4. get_driver_info --year=<year> — current grid (driver numbers, teams, nationalities)

Commands

CommandDescription
get_race_scheduleFull season calendar with dates and circuits
get_race_resultsFinal race classification (positions, times, points)
get_session_dataRaw session info (Q, FP1, FP2, FP3, R)
get_driver_infoDriver details from the grid
get_team_infoTeam info with driver lineup
get_lap_dataLap-by-lap timing with sectors and tire data
get_pit_stopsPit stop durations and team averages
get_speed_dataSpeed trap and intermediate speed data
get_championship_standingsDriver and constructor championship standings
get_season_statsAggregate season performance
get_team_comparisonTeam head-to-head: qualifying, race pace, sectors
get_driver_comparisonDriver head-to-head: qualifying H2H, race H2H, pace delta
get_tire_analysisTire 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: 1. Derive year from currentDate 2. 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: 1. Derive year from currentDate (or from context) 2. Call get_race_results(year=<year>, event="Monza") for final classification 3. 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: 1. Current month is February → season not yet started → use year = 2025 2. Call get_race_schedule(year=2025) to find the last event of that season 3. 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

Related skills

Data Science & MLanalyticspipelines

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.