Flashscore Table Tennis Scraper: live scores, results, fixtures
Pricing
from $0.005 / actor start
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
Maintained by CommunityActor 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: liveto 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
matchIdand 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
- 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 and watch the log. A three-day run takes a few seconds.
- 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.
| Field | Type | Default | Description |
|---|---|---|---|
days | array | [0] | Day offsets from today. 0 today, -1 yesterday, 1 tomorrow. Flashscore serves 7 days either side of today. |
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 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
| Field | Type | Description |
|---|---|---|
matchId | string | Flashscore's match id. Stable across days and reruns, so use it as your primary key. |
sport | string | Always table-tennis. |
tournament | string | Category and competition, e.g. OTHERS - MEN: WTT Contender Almaty (Kazakhstan) - Qualification. |
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, Retired, Walkover, Set 3. Empty when scheduled. |
home | string | Home player. Doubles pairs are joined with /. |
away | string | Away player, same format. |
homeSets | number | null | Sets won by the home side. Empty before the match starts. |
awaySets | number | null | Sets won by the away side. |
sets | array of objects | One { "home": points, "away": points } per set played, in order. |
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 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: 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 will have the same id and a fullersetsarray 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
startTimeif 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.