Flashscore Table Tennis Scraper: live scores, results, fixtures avatar

Flashscore Table Tennis Scraper: live scores, results, fixtures

Pricing

from $0.005 / actor start

Go to Apify Store
Flashscore Table Tennis Scraper: live scores, results, fixtures

Flashscore Table Tennis Scraper: live scores, results, fixtures

Scrape table tennis live scores, results and fixtures from Flashscore: tournament, players, set score, per-set points and start time.

Pricing

from $0.005 / actor start

Rating

0.0

(0)

Developer

Michal Pšenčík

Michal Pšenčík

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Flashscore Table Tennis Scraper (live scores, results, fixtures)

What does Flashscore Table Tennis Scraper do?

This Actor scrapes table tennis live scores, finished results and upcoming fixtures from Flashscore. For every match it returns the tournament, both players (or both doubling pairs), the set score, the points in each individual set, the exact start time in UTC, and a link to the match page on Flashscore.

Pick any days in a two-week window around today, choose whether you want live, finished or scheduled matches, and run it. Because it runs on the Apify platform you get a REST API for the results, scheduled runs, proxy rotation, run monitoring, and integrations with Google Sheets, Zapier, Make, Slack and the rest.

Try it from the Input tab: leave everything at its default and hit Start to get today's table tennis card.

Why use Flashscore Table Tennis Scraper?

  • Betting and odds models. Set-by-set point data is the raw material for serve-hold, momentum and in-play models that a plain win/loss feed cannot support.
  • Live dashboards and bots. Run it on a schedule (every minute or two) with status: live to drive a scoreboard, a Telegram bot or an internal alerting channel.
  • Sports media and stats sites. Fill fixture pages and result tables for WTT Contender, WTT Star Contender, ITTF, TT Cup, Setka Cup, Challenger Series, and national leagues, all from one run.
  • Player research. Every item carries a stable matchId and match URL, so repeated runs stitch into a history you can group per player or per tournament.
  • No table tennis data vendor contract. Flashscore covers the sport far more densely than most paid feeds do, particularly the smaller circuits.

How to use Flashscore Table Tennis 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 and watch the log. A three-day run takes a few seconds.
  6. Open the Output tab (or Storage → Dataset) and export as JSON, CSV, Excel or HTML, or pull it through the Apify API.

To keep the data fresh, use Schedules in Apify Console to run the Actor every few minutes for live scores, or once a morning for the day's fixtures.

Input

All fields are optional; the defaults return today's full table tennis card.

FieldTypeDefaultDescription
daysarray[0]Day offsets from today. 0 today, -1 yesterday, 1 tomorrow. Flashscore serves 7 days either side of today.
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 datacenter proxies are plenty.

Example input:

{
"days": [-1, 0, 1],
"status": "all",
"maxItems": 500
}

Output

Each match is one dataset item. Download the dataset in various formats such as JSON, HTML, CSV, or Excel.

{
"matchId": "KxpXBGHj",
"sport": "table-tennis",
"tournament": "OTHERS - MEN: WTT Contender Almaty (Kazakhstan) - Qualification",
"startTime": "2026-09-02T05:00:00.000Z",
"status": "finished",
"statusText": "Finished",
"home": "Gubran E. A.",
"away": "Kenzhigulov A.",
"homeSets": 0,
"awaySets": 3,
"sets": [
{ "home": 6, "away": 11 },
{ "home": 6, "away": 11 },
{ "home": 5, "away": 11 }
],
"matchUrl": "https://www.flashscore.com/match/table-tennis/gubran-ebrahim-abdulhakim-vs0L9zS7/kenzhigulov-aidos-hIVK2AZ3/?mid=KxpXBGHj",
"scrapedAt": "2026-09-02T14:57:19.924Z"
}

A scheduled match looks the same with homeSets, awaySets empty and sets an empty list:

{
"matchId": "pYlHMA2n",
"sport": "table-tennis",
"tournament": "OTHERS - DOUBLES MEN: WTT Contender Almaty (Kazakhstan)",
"startTime": "2026-09-03T08:30:00.000Z",
"status": "scheduled",
"statusText": "",
"home": "Tikhonov E. / Vinogradov D.",
"away": "Kenzhigulov D. / Jiyenbayev T.",
"homeSets": null,
"awaySets": null,
"sets": [],
"matchUrl": "https://www.flashscore.com/match/table-tennis/pYlHMA2n/",
"scrapedAt": "2026-09-02T14:57:19.924Z"
}

Data fields

FieldTypeDescription
matchIdstringFlashscore's match id. Stable across days and reruns, so use it as your primary key.
sportstringAlways table-tennis.
tournamentstringCategory and competition, e.g. OTHERS - MEN: WTT Contender Almaty (Kazakhstan) - Qualification.
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, Retired, Walkover, Set 3. Empty when scheduled.
homestringHome player. Doubles pairs are joined with /.
awaystringAway player, same format.
homeSetsnumber | nullSets won by the home side. Empty before the match starts.
awaySetsnumber | nullSets won by the away side.
setsarray of objectsOne { "home": points, "away": points } per set played, in order.
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 table tennis data?

This Actor uses pay per event pricing: $0.008 per match returned, plus $0.005 per run start. Platform usage is included, so those two numbers are the whole bill.

Three consecutive days measured while building this Actor held 21, 32 and 56 matches, so a one-day run cost between $0.17 and $0.46. Days during a major WTT event run higher. A live-score run capped with maxItems costs proportionally less. The Apify free plan comes with $5 of monthly platform credit, which is enough to try the Actor and run it daily for a while.

To cap spending on a single run, set a maximum cost in the run options, or use the maxItems input.

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 will have the same id and a fuller sets array the second time.
  • Proxies are optional. Flashscore does not challenge these pages. Turn on Apify Proxy datacenter groups only if you are running very frequently from one address.
  • 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

Does this Actor need a Flashscore login? No. It is a reader of 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.

Why is startTime sometimes empty? Flashscore does not publish a start time for every entry in its day list. The Actor fills in the exact UTC timestamp where the site provides it, which in practice is nearly every match, and leaves the field empty rather than guessing.

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.

Does it cover a specific tournament or league? It returns whatever Flashscore lists for the day, across every table tennis competition. Filter by tournament on your side.

Found a bug, or need something else? Open an issue on the Issues tab of this Actor and it will be picked up. If you need a custom version, a different sport, or an extraction that is not covered here, mention it in the issue.