F1 Data Extractor
Pricing
$1.00 / 1,000 results
F1 Data Extractor
Extract comprehensive F1 data: race results, qualifying, practice, pit stops. Smart season/round filtering. Sorted, analysis-ready output from f1.com.
Pricing
$1.00 / 1,000 results
Rating
5.0
(1)
Developer

Richard Biroš
Actor stats
1
Bookmarked
3
Total users
2
Monthly active users
4 days ago
Last modified
Categories
Share
Formula 1 Data Scraper & Extractor
Extract comprehensive Formula 1 race data from the official F1 website. Get race results, qualifying times, practice sessions, pit stops, fastest laps, and complete historical F1 statistics from 1950 to 2025. Perfect for data analysis, machine learning, fantasy F1, and motorsport analytics.
Keywords: F1 scraper, Formula 1 data, race results API, motorsport analytics, F1 statistics, historical F1 data, qualifying times, pit stop data, F1 dataset, racing data extraction
🏁 Why Use This F1 Data Extractor?
- 🚀 70+ Years of F1 History - Access every race from 1950 to current 2025 season
- ⚡ Smart Season Parsing - Use ranges like "2020-2024" instead of manual lists
- 📊 Perfectly Sorted Data - Results ordered by season, round, session, and position
- 💰 Cost-Effective - No expensive API subscriptions, pay only for what you scrape
- 🔄 Always Up-to-Date - Scrapes directly from official Formula1.com
- 🎯 Flexible Selection - Choose specific sessions, drivers, and seasons
- 📈 Analysis-Ready - Clean, flat JSON/CSV format for immediate use
- ⚙️ Production-Ready - Built with Apify SDK and Crawlee for reliability
✨ Key Features
Data Coverage
- ✅ Complete Race Weekend Data - Practice, qualifying, sprint, race, pit stops, fastest laps
- ✅ Historical Archives - Every F1 season from 1950 to 2025 (70+ years)
- ✅ All Driver Positions - Full race classification, not just podium finishers
- ✅ Sprint Weekend Support - Automatic detection and handling of sprint formats
Extraction Capabilities
- ✅ Multi-Season Ranges - Smart parsing: "2020-2024" or "2022, 2024"
- ✅ Selective Sessions - Choose only the data you need (saves time & cost)
- ✅ Batch Processing - Scrape multiple seasons/races in a single run
- ✅ Sorted Output - Results organized by season → round → session → position
Technical Excellence
- ✅ Fast & Efficient - CheerioCrawler for 10x faster HTML parsing vs browsers
- ✅ Robust Error Handling - Gracefully handles missing sessions and 404s
- ✅ Clean JSON Output - Flat structure ready for SQL, pandas, Excel, or BI tools
- ✅ No API Limits - Direct web scraping, no rate limits or API keys needed
📊 Available Session Types
Practice Sessions
- practice-1 - First practice session (all weekends)
- practice-2 - Second practice session (normal weekends only)
- practice-3 - Third practice session (normal weekends only)
Qualifying
- qualifying - Main qualifying session (all weekends)
- sprint-qualifying - Sprint shootout (sprint weekends only)
Race Sessions
- race-result - Main race results (all weekends)
- sprint - Sprint race results (sprint weekends only)
Grids
- starting-grid - Starting positions for main race
- sprint-grid - Starting positions for sprint (sprint weekends only)
Additional Data
- pit-stop-summary - All pit stops during the race
- fastest-laps - Fastest lap times across the race
📥 Input Configuration
{"seasons": "2023-2024","rounds": "1-5","sessionsToScrape": ["qualifying", "race-result"],"includeAllDrivers": true,"proxyConfiguration": {"useApifyProxy": false}}
Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
seasons | string | Yes | "2024" | F1 season years to extract. Supports single year ("2024"), ranges ("2022-2024"), or comma-separated ("2020, 2023, 2024") |
rounds | string | No | all rounds | Filter specific race rounds. Supports single ("5"), ranges ("1-5"), or comma-separated ("1, 5, 10"). Leave empty to scrape all rounds |
sessionsToScrape | array | No | ["race-result"] | Which sessions to extract |
includeAllDrivers | boolean | No | true | Extract all positions vs winner only |
proxyConfiguration | object | No | { useApifyProxy: false } | Proxy settings (use Apify Proxy for anti-bot protection) |
📤 Output Structure
Flat Data Format
Each row represents one driver's result in one session at one race:
{"season": 2024,"round": 5,"grandPrix": "China","date": "21 Apr","sessionType": "race-result","position": 1,"driverNumber": 1,"driver": "Max Verstappen","driverCode": "VER","team": "Red Bull Racing Honda RBPT","laps": 56,"timeOrRetired": "1:40:52.554","points": 25,"detailsUrl": "https://www.formula1.com/en/results/2024/races/1233/china/race-result"}
Session-Specific Fields
Practice Sessions:
position,driverNumber,driver,driverCode,team,laps,timeOrRetired
Qualifying:
position,driverNumber,driver,driverCode,team,q1Time,q2Time,q3Time,laps
Race/Sprint:
position,driverNumber,driver,driverCode,team,laps,timeOrRetired,points
Starting Grid:
position,driverNumber,driver,driverCode,team,timeOrRetired
Pit Stops:
stop,driverNumber,driver,driverCode,lapNumber,timeOfDay,stopDuration,totalDuration
Fastest Laps:
position,driverNumber,driver,driverCode,team,lapNumber,timeOfDay,timeOrRetired,avgSpeed
🚀 Usage Examples
Example 1: Get All Race Results for a Single Season
{"seasons": "2024","sessionsToScrape": ["race-result"],"includeAllDrivers": true}
Output: ~480 rows (24 races × 20 drivers)
Example 2: Multi-Season Historical Analysis ⭐ NEW!
{"seasons": "2022-2024","sessionsToScrape": ["qualifying", "race-result"],"includeAllDrivers": true}
Output: ~2,880 rows (3 seasons × 24 races × 2 sessions × 20 drivers) Use case: Compare driver/team performance across multiple seasons
Example 3: Complete Race Weekend Data
{"seasons": "2024","sessionsToScrape": ["practice-1", "practice-2", "practice-3","qualifying", "race-result"],"includeAllDrivers": true}
Output: ~2,400 rows (24 races × 5 sessions × 20 drivers)
Example 4: Just Winners (Faster Extraction)
{"seasons": "2024","sessionsToScrape": ["qualifying", "race-result"],"includeAllDrivers": false}
Output: 48 rows (24 races × 2 sessions × 1 winner)
Example 5: Pit Stop Analysis
{"seasons": "2024","sessionsToScrape": ["pit-stop-summary", "race-result"],"includeAllDrivers": true}
Example 6: Sprint Weekend Analysis
{"seasons": "2024","sessionsToScrape": ["practice-1","sprint-qualifying","sprint","qualifying","race-result"],"includeAllDrivers": true}
Example 7: Year-over-Year Comparison
{"seasons": "2023-2024","sessionsToScrape": ["qualifying"],"includeAllDrivers": true}
Use case: Compare qualifying performance trends between seasons
Example 8: Specific Races Only (First 5 Rounds) ⭐ NEW!
{"seasons": "2024","rounds": "1-5","sessionsToScrape": ["qualifying", "race-result"],"includeAllDrivers": true}
Output: ~200 rows (5 races × 2 sessions × 20 drivers)
Use case: Analyze opening races or test on subset before full season scrape
Example 9: Selected Circuit Analysis ⭐ NEW!
{"seasons": "2024","rounds": "6, 9, 16","sessionsToScrape": ["race-result"],"includeAllDrivers": true}
Use case: Analyze specific iconic circuits (Monaco, Silverstone, Monza)
🏎️ Sprint vs Normal Weekends
The actor automatically handles different weekend formats:
Normal Weekend:
- 3 practice sessions (P1, P2, P3)
- 1 qualifying session
- 1 race
Sprint Weekend:
- 1 practice session (P1 only)
- Sprint qualifying
- Sprint race
- Main qualifying
- Main race
If a session doesn't exist (e.g., P2 on a sprint weekend), the actor logs a warning and continues gracefully.
💡 Use Cases & Applications
Sports Analytics & Research
- Performance Analysis - Track driver and team statistics across seasons
- Qualifying vs Race Pace - Compare practice/qualifying to actual race performance
- Pit Stop Strategy - Analyze pit stop timing and duration patterns
- Historical Comparisons - Compare modern F1 to different eras (turbo, V8, hybrid)
Machine Learning & AI
- Race Prediction Models - Train ML models on historical race data
- Driver Performance Clustering - Group drivers by performance characteristics
- Weather Impact Analysis - Correlate race conditions with outcomes
- Strategy Optimization - Predict optimal pit stop windows
Fantasy F1 & Gaming
- Fantasy League Stats - Historical data for fantasy F1 predictions
- Driver Form Analysis - Recent performance trends for league picks
- Head-to-Head Comparisons - Compare teammate performances
Business Intelligence & Journalism
- Interactive Dashboards - Build Tableau/PowerBI F1 dashboards
- Sports Journalism - Data-driven articles with historical context
- Sponsorship Analysis - Team and driver visibility metrics
- Broadcasting Stats - Real-time graphics and commentary support
📊 Data Analysis Examples
SQL Analysis
1. Driver Championship Standings
SELECTdriver,team,SUM(points) as total_points,COUNT(*) as races,AVG(position) as avg_finishFROM f1_resultsWHERE sessionType = 'race-result' AND season = 2024GROUP BY driver, teamORDER BY total_points DESC;
2. Team Performance by Track Type
SELECTteam,grandPrix,AVG(position) as avg_position,SUM(points) as pointsFROM f1_resultsWHERE sessionType = 'race-result' AND season = 2024GROUP BY team, grandPrixORDER BY team, avg_position;
3. Qualifying to Race Position Change
WITH quali AS (SELECT round, driver, position as quali_posFROM f1_resultsWHERE sessionType = 'qualifying' AND season = 2024),race AS (SELECT round, driver, position as race_posFROM f1_resultsWHERE sessionType = 'race-result' AND season = 2024)SELECTq.driver,AVG(q.quali_pos - r.race_pos) as avg_position_changeFROM quali qJOIN race r ON q.round = r.round AND q.driver = r.driverGROUP BY q.driverORDER BY avg_position_change DESC;
🆘 Troubleshooting & FAQs
Common Issues
Q: Why are some sessions missing data?
A: Sprint weekends have different formats (only 1 practice session instead of 3). The Actor handles this gracefully and logs warnings for missing sessions.
Q: How do I get data for a specific race only?
A: Use the rounds parameter! For example, "rounds": "5" scrapes only Round 5. You can also use ranges "1-5" or comma-separated "1, 5, 10" for multiple specific races.
Q: Can I scrape live/ongoing races?
A: The Actor scrapes completed sessions only. For live timing, use the official F1 live timing app.
Q: Is this data suitable for commercial use?
A: The data is scraped from the public Formula1.com website. Review F1's terms of service and consider your specific use case.
Data Quality
- ✅ Sorted Output - All results ordered by season, round, session type, and position
- ✅ Complete Records - All available fields extracted (times, laps, points, etc.)
- ✅ Validated Structure - Consistent schema across all sessions
- ✅ Error Logging - Missing or failed sessions are logged, not hidden
🎯 Best Practices
- Start Small - Test with a single season and few rounds before scraping large ranges
- Use Smart Ranges -
"2020-2024"and"1-5"are easier than listing individual values - Filter Strategically - Use
roundsto target specific circuits - Select Sessions - Only scrape the sessions you need to minimize requests
- Test First - Run with
rounds: "1"to verify your configuration works - Export Regularly - Download your datasets for offline analysis
- Schedule Runs - Use Apify schedules for automatic weekly/monthly updates
📚 Additional Resources
- Apify Platform - https://apify.com
- Crawlee Documentation - https://crawlee.dev
- Formula1.com - https://www.formula1.com
- F1 Technical Regulations - For understanding race formats and rules
🤝 Support & Contributions
Found a bug or have a feature request? Please contact the Actor developer through the Apify Console.
📄 License & Disclaimer
This Actor scrapes publicly available data from Formula1.com. Users are responsible for ensuring their use complies with applicable terms of service and laws. The Actor developer is not affiliated with Formula 1 or Formula1.com.
Ready to start analyzing F1 data? Run the Actor now and get race results in seconds! 🏁