FlashScore Scraper Live
Pricing
from $0.001 / result
FlashScore Scraper Live
Scrape FlashScore live scores, fixtures, results, odds, and match events across 16 sports. In historical mode, enrich each match with up to 100 recent games per team, detailed statistics, incidents, and mutual H2H. Export analytics-ready sports data to JSON, CSV, Excel, or the Apify API.
Pricing
from $0.001 / result
Rating
5.0
(2)
Developer
statanow
Maintained by CommunityActor stats
12
Bookmarked
542
Total users
21
Monthly active users
a day ago
Last modified
Categories
Share
🏆 FlashScore Live Scores API & Sports Data Scraper
Scrape live scores, fixtures, results, odds, match events, and historical sports data from FlashScore across 16 sports.
Use Live + historical snapshots mode to enrich each current match with up to 100 recent matches per team, available head-to-head results, detailed statistics, and incidents. Every match is returned as one structured, analytics-ready record.
Use the structured JSON output in live-score apps, sports dashboards, betting research, prediction models, match previews, Telegram bots, fantasy tools, and automated reports. Run it without code in Apify Console or connect through the Apify API, webhooks, schedules, Python, JavaScript, Make, Zapier, or n8n.
| ⚡ Fast live collection | 🧠 Analysis-ready history | 🏅 Multi-sport coverage |
|---|---|---|
| Read pre-collected history instead of scraping it during every request | Current match, team form, statistics, incidents, and H2H in one record | Football, basketball, tennis, hockey, and 12 more sports |
🆕 Live matches are now analytics-ready
The new with-history mode turns this live-score scraper into a practical
sports analytics tool. Instead of making hundreds of extra requests, you can
receive the current match together with recent form for both teams, mutual H2H,
historical scores, match statistics, and incidents in the same Dataset item.
This makes the output ready for team-form analysis, prediction features,
betting research, match previews, dashboards, bots, and AI workflows. Historical
coverage depends on the available pre-collected snapshot, so every enriched
record includes a clear historical_snapshot_status.
⚽ Why use this FlashScore scraper?
Just run the Actor and you instantly get:
- 🔗 League and stable FlashScore match ID
- 🏟️ Home and away teams or players
- ⏱️ Live score, match clock, odds, and status
- 📅 Kick-off or scheduled start time
- 📜 Event history with goals, cards, substitutions, and period summaries
- 📚 Up to 100 historical matches per team with available statistics
- 🤝 Mutual head-to-head history when FlashScore provides it
- 📦 Structured sports data in JSON, CSV, Excel, XML, RSS, or HTML
- ⌚ API endpoints, scheduling, exports, integrations, and webhooks
Use this FlashScore scraper to monitor games, build dashboards, automate alerts, support betting research, analyze match momentum, calculate team form, or feed current and historical context into machine-learning and AI workflows.
⚡ Live and historical output modes
The Actor opens FlashScore's All Games view for the selected sport and dates, collects every available match URL, and returns one structured Dataset item per match.
Choose between two output modes:
| Mode | Best for | Data returned |
|---|---|---|
standard | Live-score feeds and lightweight monitoring | Match ID, teams, league, scores, status, start time, odds, and event timeline |
with-history | Analytics, team-form research, H2H analysis, and ML pipelines | Everything in standard, plus the pre-collected historical snapshot for that match |
Historical enrichment is storage-first: the live run reads an existing snapshot by the stable FlashScore match ID. It does not re-scrape hundreds of past match pages while the user waits.
✨ Key features
- Live scores, fixtures, and results for selectable dates from 7 days ago to 7 days ahead.
- 16 sports or all supported sports in one run.
- Up to 100 recent matches for the home team and 100 for the away team.
- Mutual H2H history when FlashScore provides head-to-head records.
- Detailed historical statistics, including sport-specific metrics.
- Historical incidents, scores, competitions, dates, and source URLs.
- Odds and match event timelines for current matches when available.
- Historical year filter for smaller, analysis-specific datasets.
- Clear coverage statuses such as
ready,partial, andnot_found. - JSON, CSV, Excel, XML, RSS, and HTML exports through Apify Dataset.
- API, scheduling, webhooks, and integrations included with the Apify platform.
📊 What FlashScore sports data can you scrape?
📡 Current match data
Each match can include:
| 🏠 Home team | 🛫 Away team | ⚽ Home score | 🥅 Away score |
| 📡 Match status | ⏱️ Status time | 📅 Start time | 🌍 League |
| 📄 Period summaries | 🏟️ Score and time | 🥅 Player name | 🏃 Action and side |
| 💰 Odds | 🆔 Match ID | 🗂 Historical snapshot | ✅ Coverage status |
| Field | Description |
|---|---|
match_id | Stable FlashScore match identifier |
home_team, away_team | Competing teams or players |
home_score, away_score | Current or final score |
status, status_time | Scheduled, live, interrupted, or finished state and match clock |
start_time | Displayed kick-off or start time |
league | Country, competition, league, or tournament |
odds | Available pre-match home/draw/away decimal odds |
history | Goals, cards, substitutions, period summaries, and other available events |
historical_snapshot_status | Historical-data availability and quality status |
historical_snapshot | Full historical context in with-history mode |
Fields that FlashScore does not expose for a particular sport or match are omitted or returned empty. Availability differs by sport, competition, and match state.
🗂️ Historical snapshot data
When Output mode is set to with-history, historical_snapshot can include:
- current match identity and source metadata;
- home team's recent matches;
- away team's recent matches;
- mutual head-to-head matches;
- match dates, teams, leagues, status, and scores;
- period scores and normalized sport-specific statistics;
- incidents such as goals, cards, and substitutions when available;
- collection timestamps, counts, warnings, and errors;
- the applied
Oldest historical yearfilter summary.
The Actor preserves the complete stored snapshot. It does not flatten or drop historical match fields.
🏅 Supported sports
| ⚽ Football | 🏀 Basketball | 🎾 Tennis | 🏒 Ice hockey |
| ⚾ Baseball | 🏐 Volleyball | 🏈 American football | 🤾 Handball |
| 🏏 Cricket | 🥅 Futsal | 🏉 Rugby union | 🏉 Rugby league |
| 🏸 Badminton | 🏓 Table tennis | 🎯 Darts | 🎱 Snooker |
Select All supported sports to collect every sport in parallel.
🚀 How to scrape FlashScore data
- Open the Actor in Apify Store.
- Select the dates, sport, output mode, and oldest historical year.
- Click Start — the historical snapshot store is configured automatically.
- Open Storage → Dataset → All fields to inspect complete records.
- Export the Dataset or use its API endpoint in your application.
For a quick test, start with one sport and today only. Selecting all sports or multiple dates produces more results and takes longer.
⬇️ Input options
The visual form contains only four user-facing settings:
| Input | Type | Default | Description |
|---|---|---|---|
dayOffsets | Multi-select | 0 | Dates relative to today, from -7 to +7 |
sport | Select | football | One supported sport or all |
mode | Select | with-history | Live match data only or live data with historical snapshots |
historyFromYear | Integer | 1949 | Keep historical matches from January 1 of this year through today |
0 means today, -1 means yesterday, and 1 means tomorrow. Multiple values
can be selected in a single run.
🌍 All sports example
{"dayOffsets": ["-1", "0", "1"],"sport": "all","mode": "with-history","historyFromYear": 2020}
⬆️ Output example
One Dataset item represents one current match. This shortened example shows the relationship between current and historical data:
{"match_id": "AbC123xY","home_team": "Team A","away_team": "Team B","home_score": 2,"away_score": 1,"status": "Live","status_time": "2nd Half - 71'","start_time": "29.08.2026 18:00","league": "ENGLAND: Premier League","odds": {"home": 1.82,"draw": 3.6,"away": 4.4},"history": [{"kind": "event","time": "57","score": "2 - 1","side": "home","player": "Player A","action": "Goal"}],"historical_snapshot_status": "ready","historical_snapshot": {"schema_version": 1,"current_match_id": "AbC123xY","historical_data": {"home_team": {"team_name": "Team A","matches": [{"match_id": "Past001","sport": "football","date": "2026-08-23","league": "ENGLAND: Premier League","home_team": "Team A","away_team": "Team C","score": {"home": 3, "away": 1, "raw": "3-1"},"statistics": {"Ball Possession": {"home": "61%", "away": "39%"}},"incidents": []}]},"away_team": {"team_name": "Team B", "matches": []},"h2h": {"matches": []}},"meta": {"status": "ready","history_limit_requested": 100,"counts": {"home_matches": 100, "away_matches": 100, "h2h_matches": 8}},"live_history_filter": {"from_year": 2018,"before": 208,"after": 208,"filtered_out": 0,"unparseable_dates_kept": 0}}}
The exact statistics keys depend on the sport. Football may include possession, shots, corners, fouls, and cards; tennis can include aces and service metrics; basketball and hockey expose their own relevant statistics when available.
Standard live record example
In standard mode, the same Dataset stays compact and omits the historical
snapshot fields:
{"match_id": "Mkz9mcpL","home_team": "Morocco U17","away_team": "Brazil U17","home_score": 1,"away_score": 1,"status": "Live","status_time": "2nd Half - 58'","start_time": "21.11.2025 16:45","league": "WORLD: World Cup U17 - Play Offs","history": [{"kind": "event","time": "16","score": "0 - 1","side": "away","player": "Dell (Ruan Pablo)","action": "Goal"},{"kind": "event","time": "57","side": "home","player": "Eddaoudi A.","action": "Yellow card"}]}
🧭 Historical snapshot statuses
| Status | Meaning |
|---|---|
ready | Snapshot exists and all available historical data was collected |
partial | Snapshot exists, but some historical details could not be collected |
failed | The scheduler could not build a complete snapshot |
available | A compatible snapshot exists without an explicit scheduler status |
not_found | No snapshot currently exists for this match ID |
missing_match_id | The current match did not provide a usable ID |
invalid_snapshot | Stored data did not match the expected snapshot contract |
lookup_error | The snapshot store could not be read after retries |
A missing or failed historical lookup never removes valid current match data.
Use historical_snapshot_status to filter or score coverage in downstream
workflows.
🗄️ Dataset, Key-Value Store, and full fields
- Default Dataset: one full item per match, including
historical_snapshotinwith-historymode. - Dataset Overview: a compact table for quick inspection. Switch to All fields to see the complete nested snapshot.
- KVS
OUTPUT: a compact run summary. To avoid record-size limits, it does not duplicate every full historical snapshot.

To download complete JSON without the compact view, use:
https://api.apify.com/v2/datasets/DATASET_ID/items?clean=true&format=json
Do not add view=overview when you need historical_snapshot.
🔌 Use the FlashScore API endpoint
cURL
curl -X POST \"https://api.apify.com/v2/acts/statanow~flashscore-scraper-live/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"dayOffsets": ["0"],"sport": "football","mode": "with-history","historyFromYear": 2020}'
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("statanow/flashscore-scraper-live").call(run_input={"dayOffsets": ["0"],"sport": "football","mode": "with-history","historyFromYear": 2020,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["home_team"], item["away_team"])
⚡ Standby HTTP endpoint
When Standby mode is enabled, call the Actor as a continuously available HTTP
API. sport is required; days accepts one value or a comma-separated list:
GET https://YOUR-ACTOR-STANDBY-URL/matches?sport=football&days=-1,0,1&mode=with-history&historyFromYear=2020
The Standby response contains the run metadata and a matches[] array with full
snapshots inline. The regular Actor run stores the same matches as individual
Dataset items, which is usually better for exporting large result sets.
💡 Use cases
- Build live-score websites, widgets, and mobile apps.
- Calculate team form, scoring trends, totals, and streaks.
- Prepare features for sports prediction and machine-learning models.
- Create pre-match or in-play research dashboards.
- Enrich sports news, match previews, and automated summaries.
- Power Telegram, Discord, Slack, and notification bots.
- Monitor competitions across multiple sports and dates.
- Feed AI agents with structured current and historical match context.
The Actor provides source data, not betting advice or guaranteed predictions. Users are responsible for their own analysis and decisions.
💰 Pricing
The Actor uses result-based pricing: you pay for match records successfully returned by the run. Both modes return one Dataset item per current match; the historical mode enriches that item when a compatible snapshot is available. Check the Pricing tab on the Actor page for the current rate and any Apify plan discounts before starting a large run.
The number of results depends on the selected dates, sport, and matches available on FlashScore. Use Apify's maximum run charge option when you need a strict cost limit.
❓ FAQ
Does it return only matches that are live right now?
No. The Actor uses FlashScore's All Games view. Depending on the selected day, the results can include scheduled, live, interrupted, postponed, and finished matches.
How much match history is included?
The scheduler requests up to 100 historical matches for each team and available mutual H2H records. FlashScore may expose fewer records for some teams, players, competitions, or sports.
Why is historical_snapshot missing even when the match is present?
Check historical_snapshot_status. not_found means the scheduler does not yet
have a snapshot for that match. lookup_error indicates a storage access issue.
The current match fields remain available in both cases.
Why do I see ready but not the historical object in Apify Console?
The Overview table intentionally shows only compact fields. Open All
fields, or download Dataset JSON without view=overview.
Can I export the data?
Yes. Apify Dataset supports JSON, CSV, Excel, XML, RSS, and HTML exports, plus API access and integrations.
Can I schedule automatic updates?
Yes. Use Apify Schedules to run the Actor at your preferred interval and webhooks to notify another application when a run succeeds or fails.