Darts Scraper & API: PDC Live Scores and Results (Flashscore) avatar

Darts Scraper & API: PDC Live Scores and Results (Flashscore)

Pricing

from $8.00 / 1,000 match results

Go to Apify Store
Darts Scraper & API: PDC Live Scores and Results (Flashscore)

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

Michal Pšenčík

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

11 days ago

Last modified

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?

FieldExample
tournamentWORLD: MODUS Super Series
homeLennon S.
awayHeneghan C.
statusfinished, live, scheduled or other
statusTextFinished, or Leg 5 while a match is live
formatlegs, or sets on set-format events
homeLegs2
awayLegs4
bestOfLegs7
homeSets4 on a set-format match like the World Grand Prix final
awaySets6
bestOfSets11
startTime2026-10-05T08:40:00.000Z
matchIdIqSKHlrH
matchUrllink 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: live to 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

  1. Click Try for free (or open the Actor in Apify Console).
  2. On the Input tab, set Days to the day offsets you want. [0] is today, [-1, 0, 1] is yesterday through tomorrow.
  3. Pick a Match status if you only want live, finished or scheduled matches. The default returns all of them.
  4. Set Maximum results if you want to cap the run. The default is 500 matches.
  5. Click Start. A run usually finishes in well under a minute.
  6. 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.

FieldTypeDefaultDescription
daysarray[0]Day offsets from today. 0 today, -1 yesterday, 1 tomorrow. Accepted range is -7 to 7.
statusstringallOne of all, live, finished, scheduled. all also includes postponed and cancelled matches.
maxItemsinteger500Stop after this many matches. 0 means no limit.
proxyConfigurationobjectApify proxy disabledOptional. 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

FieldTypeDescription
matchIdstringFlashscore's match id. Stable across days and reruns, so use it as your primary key.
sportstringAlways darts.
tournamentstringCategory and competition, e.g. WORLD: MODUS Super Series or EUROPE: European Tour 12.
startTimestring | nullScheduled start, ISO 8601 in UTC.
statusstringscheduled, live, finished, or other for postponed, cancelled and abandoned matches.
statusTextstringFlashscore's own stage label, e.g. Finished, or Leg 5 while live. Empty when scheduled.
homestringHome player.
awaystringAway player.
formatstring | nulllegs for a match played in legs, sets for one played in sets (World Grand Prix, World Championship).
homeLegsnumber | nullLegs won by the home player. Empty before the match starts. On a sets match, see the FAQ.
awayLegsnumber | nullLegs won by the away player.
bestOfLegsnumber | nullThe match format: 7 means best of 7 legs. Published before the match starts too. Empty on a sets match.
homeSetsnumber | nullSets won by the home player on a sets match. Empty on a legs match and before the start.
awaySetsnumber | nullSets won by the away player on a sets match.
bestOfSetsnumber | null11 means best of 11 sets. Published before the match starts too. Empty on a legs match.
matchUrlstring | nullLink to the match page on Flashscore.
scrapedAtstringWhen 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.

RunMatchesCost
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 played0$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 ApifyClient
client = 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: live and a small maxItems. You are only charged for matches that are actually pushed, so a quiet moment costs one actor start.
  • One run covers many days. days switches days inside a single browser session, so [-3, -2, -1, 0] costs one actor start, not four.
  • Deduplicate across runs. matchId is 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 startTime if 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.