Flashscore Sports Data API — 58 record types, 40 sports
Pricing
Pay per event
Flashscore Sports Data API — 58 record types, 40 sports
The most comprehensive Flashscore data API on Apify. Live scores, fixtures, results, match events, statistics, lineups, H2H, standings, team and player profiles, transfers, injuries, rankings, season calendars, search and news. Production-ready JSON, CSV or Excel. Unofficial.
Pricing
Pay per event
Rating
0.0
(0)
Developer
João Brito
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
⚽ Flashscore Sports Data API
58 record types · 40 sports · 18 modes — one actor.
Live scores, fixtures, results, stats, lineups, H2H, standings, team & player profiles, transfers, injuries, odds from 130+ bookmakers, rankings, news — normalized, deduplicated, warehouse-ready from $0.001/result.
Why this instead of the 10+ fragmented actors on Apify?
Search Apify for "flashscore" and you'll find a dozen actors that each do one thing — live football, basketball live, tennis fixtures, team stats, H2H, results… each with its own schema, its own scheduling, its own monitoring.
This actor replaces all of them.
| This actor | Fragmented alternatives | |
|---|---|---|
| Sports | 40 | 1–5 per actor |
| Record types | 58 | 3–15 per actor |
| Actors to install | 1 | 8–12 |
| Unified schema | ✅ | ❌ each is different |
| Odds coverage | 130+ bookmakers, 48 geos | 0–20 bookmakers |
| Cost estimate before paying | ✅ dryRun | ❌ |
| Budget cap | ✅ hard USD cap | ❌ |
| Warehouse-ready | ✅ dedupeKey + schemaVersion | ❌ post-processing required |
Try it in 30 seconds
Two ways to start cheaply:
- Apify free tier — small experiments typically cost
$0.02–$0.04. - Estimate first, pay later — add
"dryRun": trueto any input. The actor returns the projected cost inRUN_SUMMARY.estimatedBillingEventswith zero data charges.
Empty input → live football matches, safe defaults:
{}
Today's fixtures across any sport:
{"mode": "matchesByDate","sports": ["football"],"dateFrom": "2026-05-22","dateTo": "2026-05-22","maxItems": 200}
Full match details — events + stats + lineups in one bundled record ($0.008):
{"mode": "matchDetails","targetUrls": ["https://www.flashscore.com/match/<id>/"],"include": { "events": true, "statistics": true, "lineups": true }}
What you get
| Module | Records | Price |
|---|---|---|
| Live + fixtures + dates | match_basic | $0.0010 |
| Match details + stats | match_detail, match_events, match_statistics, match_lineups, match_h2h, match_commentary, match_video_highlights, match_momentum | $0.0030 |
| Premium bundle | match-full — summary + events + stats + lineups in one record. 33% cheaper than buying each separately ($0.012 → $0.008) | $0.0080 |
| Standings | competition_standings, standing_row | $0.0006 |
| Teams | team_profile, team_squad, team_matches, team_transfers, team_standings, team_news_feed | $0.0025 |
| Players | player_profile, player_career_stats, player_transfers, player_injury_history, player_match_record | $0.0025 |
| Competitions | competition_profile, competition_matches, competition_draw, competition_archive | $0.0025 |
| News | news_article (full body), match_news, team_news_feed | $0.0025 |
| Rankings + calendars | ranking_row (ATP, WTA, FIFA, OWGR…), season_calendar (ATP, WTA, PGA, F1…) | $0.0025 |
| Discovery | search_result, country, competition, featured_competition | $0.0025 |
| Odds (opt-in) | match_odds — 20 mainstream bookmakers (bet365, Betfair, William Hill, Unibet…) in one record per match. Add "include": {"odds": true} | $0.0050 |
40 supported sports: football, tennis, basketball, hockey, american-football, baseball, handball, rugby, cricket, golf, darts, snooker, boxing, mma, motorsport, cycling, esports, volleyball, beach-volleyball, badminton, table-tennis, field-hockey, water-polo, aussie-rules and 16 more.
Odds: 130+ bookmakers, 48 markets
No other Flashscore actor on Apify comes close. The default primary preset returns 20 mainstream international bookmakers in a single record per match. Scale up as needed:
| Preset | Geos | Bookmakers |
|---|---|---|
primary (default) | 1 (GB) | 20 incl. bet365, Betfair, William Hill, Ladbrokes, Unibet |
balanced | 14 | ~50 |
extended | 20 | ~80 |
global | 28 | ~100 |
max | 48 | 130+ incl. DraftKings, FanDuel, Betano, Bwin, Winamax, Betsson |
Enable with "include": {"odds": true}. Each preset costs $0.005 per match per geo.
Real-world cost examples
| Scenario | What gets billed | Cost |
|---|---|---|
| Premier League matchday — 10 matches, full bundle | 10 × match-full | $0.08 |
| Today's fixtures, all 40 sports | ~500 × match-basic | $0.50 |
| Live football, every 5 min, full Saturday (6 runs) | 1,200 × match-basic | ~$1.20 |
| Champions League round of 16 — full bundle | 16 × match-full | ~$0.13 |
| Weekly Premier League standings | 20 × standing-row | $0.012 |
| 50 matches with odds (default preset, 20 books) | 50 × match-full + 50 × odds-record | $0.65 |
| Single player deep dive — profile + career + transfers + injuries | ~4 × entity-profile | $0.01 |
Add
"dryRun": trueto any input to get a projected cost estimate at zero charge before committing.
Use it from your app
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('joaobrito/flashscore-sports-data-api').call({});const { items } = await client.dataset(run.defaultDatasetId).listItems();const live = items.filter(row => row.recordType === 'match_basic');console.log(`${live.length} live matches`);// { recordType, matchId, homeTeamName, awayTeamName, homeScore, awayScore, status, ... }
Python
from apify_client import ApifyClientimport osclient = ApifyClient(token=os.environ["APIFY_TOKEN"])run = client.actor("joaobrito/flashscore-sports-data-api").call(run_input={})for item in client.dataset(run["defaultDatasetId"]).iterate_items():if item["recordType"] == "match_basic":print(item["homeTeamName"], "vs", item["awayTeamName"], item["status"])
Get your APIFY_TOKEN at console.apify.com/account/integrations.
What a record looks like
Every record carries recordType, source, sourceUrl, scrapedAt, schemaVersion, and a stable dedupeKey — safe to replay, trivial to upsert into Postgres, BigQuery, or Snowflake.
{"recordType": "match_basic","source": "flashscore","sport": "football","matchId": "4I23FiTQ","country": "England","competitionName": "Premier League","startTime": "2026-05-22T19:00:00.000Z","status": "1st Half","statusCategory": "live","homeTeamName": "Home FC","awayTeamName": "Away FC","homeScore": 1,"awayScore": 0,"scrapedAt": "2026-05-22T19:23:45.000Z","schemaVersion": "2.0.0","dedupeKey": "match_basic:football:4I23FiTQ"}
statusCategory is a cross-sport bucket (scheduled · live · paused · finished · postponed · cancelled) so you filter consistently across all 40 sports with the same field.
All 18 modes
| Mode | What it does |
|---|---|
live | Live + same-day matches by sport |
matchesByDate | Fixtures + results in a date range |
matchDetails | Per-match deep dive: events, stats, lineups, H2H, commentary, highlights, odds |
team | Team profile, squad, recent + upcoming matches, transfers, news |
player | Player profile, career stats, transfers, injuries, last matches |
competition | Profile, fixtures, results, archive, draw, leaderboard, participants |
standings | League / competition standings tables |
h2h | Head-to-head data for a match or team pair |
news | News articles by locale / category — metadata + full body |
rankings | ATP, WTA, FIFA, OWGR, FedExCup rankings |
seasonCalendars | ATP, WTA, PGA, F1 season calendars |
search | Public discovery search by query (teams / players / competitions) |
topSearch | Popular discovery suggestions |
countries | Country / category catalog, optionally expands to competitions |
featuredCompetitions | Editorial top competitions per sport |
newsLocales | Catalog of available Flashscore News locales |
newsCategories | Catalog of categories per locale |
bookmakers | Public bookmaker name catalog by geo |
Controls
| Parameter | Description |
|---|---|
mode | One of the 18 modes above |
sports | Array of sport identifiers (40 supported) |
targetUrls | Public Flashscore URLs of matches, teams, players, competitions |
include.* | events, statistics, lineups, h2h, commentary, highlights, momentum, odds, news |
maxItems | Cap per run — default 50, safety net against runaway runs |
dryRun | true → project cost, emit zero billable records |
ACTOR_MAX_TOTAL_CHARGE_USD | Hard USD cap; run halts gracefully at 95% |
Build a historical archive
Use Apify Scheduler to run this actor on a daily or hourly cron. The dataset accumulates across runs and the dedupeKey on every record makes upserts trivial — you get a clean, append-only historical table even though the actor only scrapes the present. A daily matchesByDate job over a few months gives you a solid fixture-and-result archive for backtesting.
Know before you buy
- Latency: 1–3 seconds wall-clock per request, polling-based. Not suitable for sub-second live trading or WebSocket push feeds.
- No SLA: best-effort unofficial extractor. Build retries and a cached fallback into your pipeline.
- Cross-run billing: re-running the actor against the same matches re-bills per the Apify PPE model —
dedupeKeyis for your upsert idempotency, not for skipping charges. - Public data only: no login bypass, no CAPTCHA, no paywall.
Support
Open an issue on the Apify Actor page:
Run ID:Input used:Affected URL or matchId:Expected vs. actual:RUN_SUMMARY warning category (if any):
Unofficial extractor. Not affiliated with, endorsed by, or sponsored by Flashscore or Livesport.