Darts Scraper & API: PDC Live Scores and Results (Flashscore)
Pricing
from $8.00 / 1,000 match results
Darts Scraper & API: PDC Live Scores and Results (Flashscore)
Darts live scores, results and fixtures from Flashscore for betting models and score apps: PDC events like the World Grand Prix and European Tour plus the daily MODUS Super Series. Players, legs or sets won, best-of format, status, UTC start time. No login, no API key. JSON, CSV, Excel or API.
Pricing
from $8.00 / 1,000 match results
Rating
0.0
(0)
Developer
Michal Pšenčík
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Share
Darts Scraper & API: PDC live scores and results from Flashscore
What does Flashscore Darts Scraper do?
This Actor scrapes darts live scores, finished results and upcoming fixtures from Flashscore and returns them as clean JSON, CSV or Excel. For every match you get the tournament, both players, the match status, the legs won by each side (or the sets won on set-format events like the World Grand Prix and the World Championship), the best-of format the match is played over (e.g. best of 7 legs, best of 11 sets), the leg currently being played on live matches, the exact start time in UTC, Flashscore's match id and a link to the match page.
It covers whatever Flashscore lists for darts: PDC events such as the World Grand Prix and the European Tour, the daily MODUS Super Series, and the rest of the circuit. No login, no API key and no proxy needed. Use it from the Apify Console, on a schedule, or as a darts live score API from your own code, Make, Zapier, n8n or an AI agent through the Apify MCP server.
Try it from the Input tab: leave everything at its default and hit Start to get today's darts card.
What darts data can you get?
| Field | Example |
|---|---|
tournament | WORLD: MODUS Super Series |
home | Lennon S. |
away | Heneghan C. |
status | finished, live, scheduled or other |
statusText | Finished, or Leg 5 while a match is live |
format | legs, or sets on set-format events |
homeLegs | 2 |
awayLegs | 4 |
bestOfLegs | 7 |
homeSets | 4 on a set-format match like the World Grand Prix final |
awaySets | 6 |
bestOfSets | 11 |
startTime | 2026-10-05T08:40:00.000Z |
matchId | IqSKHlrH |
matchUrl | link to the match on flashscore.com |
The full field list is under Output.
Why use Flashscore Darts Scraper?
- Darts betting and odds models. The leg or set score plus the best-of format gives legs or sets remaining, match situation and in-play state, which a plain win/loss feed cannot. Yesterday's results and today's fixtures come back in one run.
- Live score apps, dashboards and bots. Run it on a schedule with
status: liveto drive a scoreboard, a Telegram or Discord bot, or an internal alert. Live rows carry the running leg score and the leg being played. - Sports media and stats sites. Fill fixture pages and result tables for the PDC European Tour, the World Grand Prix, the MODUS Super Series and the other events Flashscore lists, all from one run.
- Player and tournament history. Every item carries a stable
matchId, so daily runs stitch into a results history you can group per player or per tournament. - A cheap alternative to a darts data API contract. You pay per match returned, with no subscription.
How to use Flashscore Darts Scraper
- Click Try for free (or open the Actor in Apify Console).
- On the Input tab, set Days to the day offsets you want.
[0]is today,[-1, 0, 1]is yesterday through tomorrow. - Pick a Match status if you only want live, finished or scheduled matches. The default returns all of them.
- Set Maximum results if you want to cap the run. The default is 500 matches.
- Click Start. A run usually finishes in well under a minute.
- Open the Output tab and export as JSON, CSV, Excel or HTML, or pull the dataset through the Apify API.
To keep the data fresh, use Schedules in Apify Console: every few minutes for live scores, or once a morning for yesterday's results and today's fixtures.
Input
All fields are optional; the defaults return today's full darts card.
| Field | Type | Default | Description |
|---|---|---|---|
days | array | [0] | Day offsets from today. 0 today, -1 yesterday, 1 tomorrow. Accepted range is -7 to 7. |
status | string | all | One of all, live, finished, scheduled. all also includes postponed and cancelled matches. |
maxItems | integer | 500 | Stop after this many matches. 0 means no limit. |
proxyConfiguration | object | Apify proxy disabled | Optional. Flashscore serves these pages without an anti-bot challenge, so no proxy is needed. |
Yesterday's results and today's fixtures, for a betting model's daily refresh:
{"days": [-1, 0],"status": "all","maxItems": 500}
Only the matches being played right now, for a live scoreboard:
{"days": [0],"status": "live","maxItems": 50}
Output
Each match is one dataset item. These are real records from runs on 5 and 6 October 2026.
A finished match:
{"matchId": "IqSKHlrH","sport": "darts","tournament": "WORLD: MODUS Super Series","startTime": "2026-10-05T08:40:00.000Z","status": "finished","statusText": "Finished","home": "Lennon S.","away": "Heneghan C.","homeLegs": 2,"awayLegs": 4,"bestOfLegs": 7,"homeSets": null,"awaySets": null,"bestOfSets": null,"format": "legs","matchUrl": "https://www.flashscore.com/match/darts/heneghan-conor-MR28RHZ3/lennon-steve-0UK62X04/?mid=IqSKHlrH","scrapedAt": "2026-10-05T09:07:46.076Z"}
A live match carries the running leg score and the leg being played:
{"matchId": "jcQSFSCT","sport": "darts","tournament": "WORLD: MODUS Super Series","startTime": "2026-10-05T08:55:00.000Z","status": "live","statusText": "Leg 5","home": "Spellman A.","away": "Trueman D.","homeLegs": 1,"awayLegs": 3,"bestOfLegs": 7,"homeSets": null,"awaySets": null,"bestOfSets": null,"format": "legs","matchUrl": "https://www.flashscore.com/match/darts/spellman-alex-p218tZFf/trueman-danny-WWQ56bWs/?mid=jcQSFSCT","scrapedAt": "2026-10-05T09:07:46.076Z"}
A match played in sets, the World Grand Prix final of 4 October 2026, won 6-4 in sets by Humphries. The set score goes into the set fields, and the leg fields stay empty because Flashscore's day list does not publish leg totals for set-format matches:
{"matchId": "tOWE2WSO","sport": "darts","tournament": "WORLD: World Grand Prix","startTime": "2026-10-04T19:20:00.000Z","status": "finished","statusText": "Finished","home": "Price G.","away": "Humphries L.","homeLegs": null,"awayLegs": null,"bestOfLegs": null,"homeSets": 4,"awaySets": 6,"bestOfSets": 11,"format": "sets","matchUrl": "https://www.flashscore.com/match/darts/humphries-luke-n34VOAWo/price-gerwyn-8dDDoW0B/?mid=tOWE2WSO","scrapedAt": "2026-10-06T10:46:41.660Z"}
A scheduled match has empty leg counts, but the best-of format is already known:
{"matchId": "MuHbA6zi","sport": "darts","tournament": "WORLD: MODUS Super Series","startTime": "2026-10-05T09:15:00.000Z","status": "scheduled","statusText": "","home": "Tuik N.","away": "Harrysson A.","homeLegs": null,"awayLegs": null,"bestOfLegs": 7,"homeSets": null,"awaySets": null,"bestOfSets": null,"format": "legs","matchUrl": "https://www.flashscore.com/match/darts/harrysson-andreas-04BvLQN4/tuik-niek-0K04jl1m/?mid=MuHbA6zi","scrapedAt": "2026-10-05T09:07:46.076Z"}
Data fields
| Field | Type | Description |
|---|---|---|
matchId | string | Flashscore's match id. Stable across days and reruns, so use it as your primary key. |
sport | string | Always darts. |
tournament | string | Category and competition, e.g. WORLD: MODUS Super Series or EUROPE: European Tour 12. |
startTime | string | null | Scheduled start, ISO 8601 in UTC. |
status | string | scheduled, live, finished, or other for postponed, cancelled and abandoned matches. |
statusText | string | Flashscore's own stage label, e.g. Finished, or Leg 5 while live. Empty when scheduled. |
home | string | Home player. |
away | string | Away player. |
format | string | null | legs for a match played in legs, sets for one played in sets (World Grand Prix, World Championship). |
homeLegs | number | null | Legs won by the home player. Empty before the match starts. On a sets match, see the FAQ. |
awayLegs | number | null | Legs won by the away player. |
bestOfLegs | number | null | The match format: 7 means best of 7 legs. Published before the match starts too. Empty on a sets match. |
homeSets | number | null | Sets won by the home player on a sets match. Empty on a legs match and before the start. |
awaySets | number | null | Sets won by the away player on a sets match. |
bestOfSets | number | null | 11 means best of 11 sets. Published before the match starts too. Empty on a legs match. |
matchUrl | string | null | Link to the match page on Flashscore. |
scrapedAt | string | When this run read the page, ISO 8601 in UTC. |
How much does it cost to scrape Flashscore darts data?
This Actor uses pay per event pricing: $0.008 per match returned ($8 per 1,000 matches), plus $0.005 per run start. Platform usage is included, so those two numbers are the whole bill.
| Run | Matches | Cost |
|---|---|---|
| Today's card (5 Oct 2026) | 15 | $0.13 |
| Yesterday, today and tomorrow (4-6 Oct 2026) | 31 | $0.25 |
| A busy European Tour and MODUS day (4 Sep 2026) | 37 | $0.30 |
| A live-only check when nothing is being played | 0 | $0.005 |
The Apify free plan comes with $5 of monthly platform credit, which covers a daily run for a long time. To cap
spending, set maxItems or a maximum cost per run in the run options.
Use it as an API or from an AI agent
Run the Actor and get the matches back in one HTTP call:
curl -X POST "https://api.apify.com/v2/acts/thatmike1~flashscore-darts/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"days": [0], "status": "live", "maxItems": 50}'
Or from Python with the official client:
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("thatmike1/flashscore-darts").call(run_input={"days": [-1, 0], "status": "finished"})for match in client.dataset(run["defaultDatasetId"]).iterate_items():print(match["tournament"], match["home"], match["homeLegs"], "-", match["awayLegs"], match["away"])
AI agents (MCP). Add https://mcp.apify.com/?actors=thatmike1/flashscore-darts to Claude, Cursor or any MCP
client to let the agent fetch darts results on demand. Results also flow into Google Sheets, Make, Zapier, n8n, Slack
and webhooks through Apify integrations.
Tips and advanced options
- Cut the bill on live runs. Set
status: liveand a smallmaxItems. You are only charged for matches that are actually pushed, so a quiet moment costs one actor start. - One run covers many days.
daysswitches days inside a single browser session, so[-3, -2, -1, 0]costs one actor start, not four. - Deduplicate across runs.
matchIdis stable, so upsert on it rather than appending. A match scraped while live and again after it finished keeps the same id. - Filter by competition on your side. Every item carries
tournament, so keep only the PDC events you follow, or drop the MODUS Super Series if you do not need it. - Order is Flashscore's order. Items come back grouped by tournament in the order the site lists them, not sorted
by start time. Sort on
startTimeif you need chronological output.
FAQ, disclaimers and support
Which darts competitions are covered? Whatever Flashscore lists in its darts day list. Test runs in September and October 2026 returned the PDC European Tour, the PDC World Grand Prix and the MODUS Super Series. Premier League Darts, the World Matchplay and the World Championship show up the same way when they are on.
What about events played in sets, like the World Grand Prix or the World Championship?
They come back with format: "sets", the set score in homeSets and awaySets, and the best-of in bestOfSets. The
World Grand Prix final of 2026, won 6-4 in sets, comes back as homeSets: 4, awaySets: 6, bestOfSets: 11. Flashscore's
day list does not publish leg totals for set-format matches, so homeLegs, awayLegs and bestOfLegs are empty on
them; the only leg count it shows is for the set being played, while a match is live, and that is what homeLegs and
awayLegs carry then. Leg-format events, which is most of the calendar, come back with format: "legs" and empty set
fields.
Does it return three-dart averages, 180s or checkout percentages? No. Those live on Flashscore's match detail page, not on the day list this Actor reads. Open an issue if you need them.
Does this Actor need a Flashscore login or API key? No. It reads public pages, with no login and no account of any kind.
Is scraping Flashscore legal? This Actor reads only publicly available pages and collects match facts (players, scores, times), not personal data. Scraping publicly accessible information is generally legal in the EU and the US, but you are responsible for how you use the output, including Flashscore's Terms of Service and any database rights that apply where you operate. Talk to a lawyer if you plan to redistribute the data commercially.
Do I need a proxy? No. Flashscore does not challenge these pages and every test run went direct. Turn on Apify Proxy only if you run it very often from one address.
Why do I get fewer matches than I see on the site?
Check maxItems and status. Also note the site's day list is live: matches are added and removed through the day,
so two runs an hour apart legitimately differ.
Found a bug, or need something else? Open an issue on the Issues tab of this Actor. If you need a custom version, another sport, or a field that is not covered here, say so in the issue.
Related Actors
- Flashscore Snooker Scraper: the same output for snooker, with frames won and the best-of format.
- Flashscore Table Tennis Scraper: the same for table tennis, with the points of every set.
- Sports Odds Scraper: pre-match betting odds bookmaker by bookmaker for football, tennis, basketball and four more sports.