FlashScore Scraper Live avatar

FlashScore Scraper Live

Pricing

from $0.001 / result

Go to Apify Store
FlashScore Scraper Live

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

statanow

Maintained by Community

Actor stats

12

Bookmarked

542

Total users

21

Monthly active users

a day ago

Last modified

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 requestCurrent match, team form, statistics, incidents, and H2H in one recordFootball, 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:

ModeBest forData returned
standardLive-score feeds and lightweight monitoringMatch ID, teams, league, scores, status, start time, odds, and event timeline
with-historyAnalytics, team-form research, H2H analysis, and ML pipelinesEverything 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, and not_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
FieldDescription
match_idStable FlashScore match identifier
home_team, away_teamCompeting teams or players
home_score, away_scoreCurrent or final score
status, status_timeScheduled, live, interrupted, or finished state and match clock
start_timeDisplayed kick-off or start time
leagueCountry, competition, league, or tournament
oddsAvailable pre-match home/draw/away decimal odds
historyGoals, cards, substitutions, period summaries, and other available events
historical_snapshot_statusHistorical-data availability and quality status
historical_snapshotFull 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 year filter 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

  1. Open the Actor in Apify Store.
  2. Select the dates, sport, output mode, and oldest historical year.
  3. Click Start — the historical snapshot store is configured automatically.
  4. Open Storage → Dataset → All fields to inspect complete records.
  5. 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:

InputTypeDefaultDescription
dayOffsetsMulti-select0Dates relative to today, from -7 to +7
sportSelectfootballOne supported sport or all
modeSelectwith-historyLive match data only or live data with historical snapshots
historyFromYearInteger1949Keep 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

StatusMeaning
readySnapshot exists and all available historical data was collected
partialSnapshot exists, but some historical details could not be collected
failedThe scheduler could not build a complete snapshot
availableA compatible snapshot exists without an explicit scheduler status
not_foundNo snapshot currently exists for this match ID
missing_match_idThe current match did not provide a usable ID
invalid_snapshotStored data did not match the expected snapshot contract
lookup_errorThe 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_snapshot in with-history mode.
  • 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.

FlashScore sports data scraper output

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 ApifyClient
client = 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.