F1 Scraper: Race Results, Qualifying & Standings
Pricing
from $12.86 / 1,000 race results
F1 Scraper: Race Results, Qualifying & Standings
Scrape Formula 1 data for every season since 1950: race results with grid and points, Q1/Q2/Q3 qualifying, pit stops, race calendars and driver and constructor standings. Filter by season, round or driver. Export CSV, Excel, JSON or XML. No login or API key needed.
Pricing
from $12.86 / 1,000 race results
Rating
0.0
(0)
Developer
RecordsData
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Share
What is the F1 Scraper? The Formula 1 Scraper by RecordsData extracts race results, sprint results, qualifying times, pit stops, lap times, tyre stints, race control messages, race calendars, driver and constructor standings, and driver, team and circuit directories for every F1 season since 1950. No login, no API key. Filter by season, round, driver or constructor, monitor for new rows, and export CSV, Excel, JSON or XML.
π F1 scraper for race results, laps, tyres and standings
This Formula 1 scraper combines the open Jolpica API (the community successor of the Ergast F1 database) with OpenF1 for sector times, tyres and race control from 2023. Every row carries a recordType column (13 types, 96 fields in total), so one dataset can mix modules. One 2025 round returns 20 race results, 20 qualifying rows and 19 pit stops. Each module is billed on its own.
π What data does the F1 scraper return?
- Race results and sprints (sprints from 2021): position, driver, team, grid, points, laps, status, finish time, fastest lap, plus
positionsGained,isWin,isPodium. - Qualifying: Q1, Q2 and Q3 as text and seconds, plus
isPole. Pit stops (2011 onward): lap, stop number, duration. - Lap times (1996 onward): one row per driver per lap. From 2023 each lap adds sector seconds, speeds, pit-out flag, tyre compound and age.
- Tyre stints and race control (2023 onward): compounds, flags, safety cars, DRS and steward messages.
- Schedule with every session time, standings (driver and constructor, final or per round) and directories of drivers, teams and circuits. Fields with no value are left out of the row.
π What does the F1 output look like?
Real row from a cloud run (2025, round 5). positionsGained, isWin, isPodium and finishTimeMillis were worked out by hand from the same row.
{"recordType": "race-result","season": "2025","round": 5,"raceName": "Saudi Arabian Grand Prix","circuit": "Jeddah Corniche Circuit","date": "2025-04-20","position": 1,"driver": "Oscar Piastri","team": "McLaren","grid": 2,"positionsGained": 1,"isWin": true,"isPodium": true,"points": 25,"status": "Finished","finishTime": "1:21:06.758","finishTimeMillis": 4866758,"scrapedAt": "2026-10-04T05:02:48.483Z"}
recordType is one of race-result, sprint-result, qualifying, pitstop, lap, stint, race-control, race, driver, team, circuit, driver-standing, constructor-standing. With the monitor on, rows also get changeType. Text times have numeric twins such as q1Seconds, durationSeconds, lapTimeSeconds.
π΅ How much does the F1 scraper cost?
Pay per event, billed only for rows saved (free Apify plan prices):
| Event | Price per row | Per 1,000 rows |
|---|---|---|
| Race result (also sprint rows) | $0.015 | $15.00 |
| Lap time row | $0.004 | $4.00 |
| Every other row: qualifying, pit stop, schedule race, driver and constructor standing, tyre stint, race control message, driver, constructor and circuit directory | $0.01 | $10.00 |
Race results fall to $0.01286 per row on Gold and above ($12.86 per 1,000). Every other event has one flat price on all plans. Examples: one Grand Prix of results (20 rows) costs about $0.30. Results, qualifying and pit stops for one round (20 + 20 + 19 rows) cost 20 x $0.015 + 39 x $0.01 = $0.69. The whole 2024 season of results (479 rows) costs about $7.19. A full race of lap rows (about 1,060) costs 1,060 x $0.004 = $4.24, and its tyre stints (about 40 rows) add $0.40. Failed runs, empty searches, invalid input and monitor-skipped rows are free, and the run stops cleanly at your maximum charge.
π How do I scrape F1 data in 3 steps?
- Open the Actor on Apify and click Try for free.
- Enter seasons (or "current"), optionally rounds, a driver or a constructor, and switch on the modules you need.
- Click Start and download CSV, Excel, JSON or XML.
βοΈ What input does the F1 scraper accept?
| Field | Meaning | Default |
|---|---|---|
seasons | Four-digit years or "current" | ["current"] |
rounds | Round numbers to keep; empty means all | [] |
driverFilter | Driver id, code (VER), number (44) or surname, comma-separated | empty |
constructorFilter | Constructor id (mclaren) or team name, comma-separated | empty |
maxItems | Maximum rows across all modules (free plan: 10) | none |
includeRaceResults | Race results with derived columns | true |
includeSprint, includeQualifying, includePitstops | Sprints (2021+), qualifying Q1 to Q3, pit stops (2011+) | false |
includeLaps | One row per driver per lap (1996 onward) | false |
includeLapDetails | Sectors, speeds, tyre on lap rows (2023 onward) | true |
includeTyreStints, includeRaceControl | Tyre stints, flags, safety cars, DRS, steward messages (2023 onward) | false |
includeSchedule | Calendar with every session time | false |
includeDriverStandings, includeConstructorStandings, standingsPerRound | Championship tables, optionally after each round | false |
includeDrivers, includeConstructors, includeCircuits | Season directories | false |
onlyNew, monitorName, resetSeen | Monitor: only unseen rows, a memory label, forget seen rows | false |
Example input: Ferrari sprint and race results for 2025.
{ "seasons": ["2025"], "constructorFilter": "ferrari", "includeRaceResults": true, "includeSprint": true, "maxItems": 100 }
π How does it compare to other F1 data actors?
Read from the public Apify Store pages on 2026-10-10.
| This actor | parselab/f1-racing-data-scraper | parseforge/formula1-scraper | parseforge/jolpica-f1-scraper | |
|---|---|---|---|---|
| Data types | 13 row types in one run | Similar set, one mode per run | Standings, results, schedule | Nine resources, one per run |
| Laps, tyres, race control | Laps 1996+, stints and messages 2023+ | Laps 1996+, tyres and messages 2023+ | Not listed | Not stated in their listing |
| Filters | Driver, constructor, rounds, seasons | Driver, constructor, session, rounds | Season only | Season only |
| Monitoring | onlyNew skips and does not charge seen rows | Not stated in their listing | Not stated in their listing | Not stated in their listing |
| Price per 1,000 | $15 results, $4 laps, $10 others | $12 header, $16 README plus start fee | $19 header, $21 README | $7.50 header, $8.50 README |
parselab reads practice sessions for laps and race control, which we do not offer; we add tyre stints, a monitor mode and per-module billing. deriverge/f1-scraper costs $1.00 per 1,000 but reads ESPN for the 2026 season only, without grid, pit stops or laps. parseforge/jolpica-f1-scraper is the cheapest full-history option when you need results only. We sit in the middle on price.
πΌ What are the use cases?
Prediction and fantasy models, editorial data desks, betting content, strategy analysis, scheduled feeds for apps and research panels.
π How do I use the F1 scraper from code?
curl -X POST "https://api.apify.com/v2/acts/RecordsData~f1-racing-results-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"seasons":["2025"],"rounds":[5],"maxItems":10}'
Works with the Apify client, schedules, webhooks, Make, Zapier, n8n and Airbyte.
π€ F1 Scraper MCP server for AI agents
Agents can call this Actor through the Apify MCP server at https://mcp.apify.com?tools=RecordsData/f1-racing-results-scraper. The URL loads only this Actor as a tool.
Add this to your MCP client configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=RecordsData/f1-racing-results-scraper"}}}
Example agent prompt:
Use the F1 Scraper to get the 2025 Saudi Arabian Grand Prix (round 5) race results and tyre stints, then tell me which driver gained the most places from the grid and who ran the longest stint.
An agent should choose this Actor for structured Formula 1 history since 1950, not live timing.
βοΈ Is it legal to scrape F1 data?
The actor reads only publicly available data from the open Jolpica and OpenF1 APIs and respects their rate limits. Driver rows are the public sporting profile (name, code, number, nationality, birth date). It is an independent tool, not affiliated with Formula 1, the FIA, Jolpica or OpenF1. You are responsible for following the sources' terms.
β Frequently asked questions
π How do I export F1 race results to CSV or Excel?
Open the F1 Scraper on Apify, enter the seasons and rounds, keep the Race results module on and click Start. When the run finishes, open the Storage tab and download the default dataset as CSV, Excel, JSON or XML. Each row has a recordType field, so mixed modules are easy to split.
π How far back does the F1 Scraper data go?
Every championship season since 1950, read from the open Jolpica API. Pit stops start in 2011, lap times in 1996, sprints in 2021, and sector times, tyres and race control in 2023. Constructor standings start in 1958. Every other module follows the season filter you set, so you choose the range.
π Which seasons does each F1 Scraper module cover?
Race results, schedule, driver standings and directories cover 1950 onward. Constructor standings start in 1958, lap times in 1996, pit stops in 2011, sprint results in 2021, and tyre stints, race control and lap detail columns in 2023. An earlier season returns no rows and charges nothing.
π€ Can the F1 Scraper get one driver's full history?
Yes. Set the driver filter to a driver id such as hamilton, a code such as HAM, a car number or a surname, and add the seasons you want. The filter applies to results, sprints, qualifying, pit stops, laps, tyre stints, race control and driver standings.
π Can I filter F1 data by constructor or team?
Yes. The constructorFilter input takes a constructor id such as mclaren or red_bull, or a team name such as Alpine, with several teams separated by commas. It applies to results, sprints, qualifying, pit stops, laps, tyre stints, race control, both standings tables and the team and driver directories.
π Does the F1 Scraper return sprint results?
Yes, from 2021. Switch on the Sprint module and you get the sprint classification with the same columns as race results and recordType sprint-result, billed as a race result. Rounds without a sprint weekend return nothing, and seasons before 2021 have no sprint rows at all. Sprint rows share the columns of race results, so one parser handles both.
β± Are F1 qualifying times split by session?
Yes. The scraper returns Q1, Q2 and Q3 as text and as seconds (q1Seconds to q3Seconds), with the qualifying position and an isPole flag. A driver eliminated in Q1 has no Q2 or Q3 value, so those fields are omitted. Switch on the Qualifying module to get these rows.
β² Can the F1 Scraper return lap times, sector times and tyre data?
Yes. Lap times come as one row per driver per lap from 1996 onward. From 2023, with lap details on, each lap adds sector 1 to 3 seconds, speeds, a pit-out flag and tyre compound and age, read from OpenF1. If OpenF1 is unavailable, lap times still arrive without the extra columns.
π What happens if OpenF1 is down or locked?
OpenF1 has locked its free API during live F1 sessions before. The scraper treats it as best effort: lap rows still arrive without sector and tyre columns. Tyre stints and race control come only from OpenF1, so if nothing could be delivered the run fails with a clear message and charges nothing.
π² How are lap, tyre and race control rows priced?
Lap time rows cost $0.004 each ($4.00 per 1,000), so a full race of about 1,060 laps costs $4.24. Tyre stint, race control, driver, team and circuit rows cost $0.01 each ($10.00 per 1,000). Only rows saved to your dataset are billed; a module that is switched off adds nothing.
π How does F1 Scraper monitoring work?
Turn on onlyNew and the scraper remembers delivered rows in a named store in your account. The next run skips rows already seen, before the row limit and before billing, and returns only new rows or rows whose values moved, marked changed in changeType. Use monitorName for separate memories.
π Are the F1 standings from the scraper final or current?
Standings are final for finished seasons and show the live championship table for the ongoing season. Driver and constructor tables are separate modules, each row with points and wins. Switch on standingsPerRound to get the table after every selected round, and run it after each race weekend.
π΅ Do I pay for F1 Scraper modules I switch off?
No. Each module is its own pay per event, billed only for rows saved to your dataset. A module that is switched off produces no rows and no charge. Failed runs, empty searches and invalid input are free too, and the run stops cleanly at the maximum charge you set.
π¦ How many rows can one F1 Scraper run return?
Up to 1,000,000 rows on paid Apify plans, and 10 rows on the free plan. As a guide, a modern season is about 480 race result rows, and one race of lap times is about 1,060 rows, so select rounds or use maxItems when you switch laps on.
βοΈ Does the F1 Scraper need an API key?
No. The scraper reads the open Jolpica API, the community successor of the Ergast F1 database, and OpenF1 for 2023 onward data. Neither needs a login or API key. The actor stays within the published Jolpica rate limits, so you do not handle paging or throttling.
π€ Where do I find F1 driver ids for the scraper?
The driver filter accepts classic Ergast driver ids, which are lowercase names such as hamilton, alonso or leclerc, and max_verstappen for Max Verstappen. It also accepts the three-letter code, the car number or the surname. To see every id, switch on the Drivers module for a season.
π€ Why did my F1 Scraper run return 0 results?
Usually the season, round, driver or constructor matched nothing, for example a misspelled name or a round that does not exist. The run then ends successfully with a clear status message and charges nothing. With onlyNew on, zero rows also means everything was already seen. Retry with a wider filter.
π§ͺ What happens if I send an empty or invalid input to the F1 Scraper?
An empty seasons list is rejected with a 400 error at run creation, so no run starts. An empty {} input works and returns current season race results. Other mistakes, such as no valid season or every module switched off, end the run as SUCCEEDED with one free error row (errorType invalid-input).
π How fresh are F1 Scraper results after a race?
The community Jolpica database behind the scraper usually updates within hours of the race, so results lag the checkered flag and are not live timing. Schedule the run for Sunday evening or Monday morning with onlyNew.
π Support
Questions or custom fields: contact.punkrecordsdata@gmail.com or open an issue on the Actor page.
Last updated: 2026-10-11