Flashscore Table Tennis Scraper & API: Live Scores, Results
Pricing
from $8.00 / 1,000 results
Flashscore Table Tennis Scraper & API: Live Scores, Results
Table tennis (ping pong) live scores, results and fixtures from Flashscore for betting models and score apps: tournament, players and doubles pairs, sets won, points of every set, status, UTC start time. WTT events included. No login, no API key, no proxy. JSON, CSV, Excel or API.
Pricing
from $8.00 / 1,000 results
Rating
0.0
(0)
Developer
Michal Pšenčík
Maintained by CommunityActor stats
0
Bookmarked
12
Total users
7
Monthly active users
11 days ago
Last modified
Categories
Share
Flashscore Table Tennis Scraper & API (live scores, results, fixtures)
What does Flashscore Table Tennis Scraper do?
This Actor scrapes table tennis (ping pong) 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 (or both doubles pairs), the match status, the sets won by each side, the points of every individual set (e.g. 11-8, 9-11, 11-6), the exact start time in UTC, Flashscore's match id and a link to the match page.
No login, no API key and no proxy needed. Pick any days in the two-week window Flashscore publishes around today, choose live, finished or scheduled matches, and run it. Or call it as a table tennis live score API from your own code, a schedule, 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 table tennis card.
What table tennis data can you get?
| Field | Example |
|---|---|
tournament | OTHERS - MEN: China Smash (China) |
home | Luu F. (doubles pairs as Jha K. / Xue F.) |
away | Pistej L. |
status | finished, live, scheduled or other |
statusText | Finished, Retired, Walkover, ... |
homeSets | 3 |
awaySets | 2 |
sets | [{"home": 8, "away": 11}, {"home": 15, "away": 13}, ...] |
startTime | 2026-10-05T03:40:00.000Z |
matchId | UiNxzKCb |
matchUrl | link to the match on flashscore.com |
The full field list is under Output.
Why use Flashscore Table Tennis Scraper?
- Table tennis betting 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. Yesterday's results plus 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. - Sports media and stats sites. Fill fixture pages and result tables for World Table Tennis (WTT) events such as WTT Contender and the China Smash, singles, doubles and mixed doubles, 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 sports data API contract. You pay per match returned, with no subscription.
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. 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 table tennis 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 a run on 5 October 2026.
A finished singles match, with the points of all five sets:
{"matchId": "UiNxzKCb","sport": "table-tennis","tournament": "OTHERS - MEN: China Smash (China)","startTime": "2026-10-05T03:40:00.000Z","status": "finished","statusText": "Finished","home": "Luu F.","away": "Pistej L.","homeSets": 3,"awaySets": 2,"sets": [{ "home": 8, "away": 11 },{ "home": 15, "away": 13 },{ "home": 8, "away": 11 },{ "home": 11, "away": 9 },{ "home": 11, "away": 8 }],"matchUrl": "https://www.flashscore.com/match/table-tennis/luu-finn-0QZy5aZ6/pistej-lubomir-xnWA1udI/?mid=UiNxzKCb","scrapedAt": "2026-10-05T09:07:46.076Z"}
A scheduled doubles match: same shape, with the score fields empty until it starts:
{"matchId": "OWmBEkZp","sport": "table-tennis","tournament": "OTHERS - DOUBLES MEN: China Smash (China)","startTime": "2026-10-06T04:45:00.000Z","status": "scheduled","statusText": "","home": "Jha K. / Xue F.","away": "Kallberg A. / Karlsson K.","homeSets": null,"awaySets": null,"sets": [],"matchUrl": "https://www.flashscore.com/match/table-tennis/OWmBEkZp/","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 table-tennis. |
tournament | string | Category and competition, e.g. OTHERS - WOMEN: China Smash (China). |
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. 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 ($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 on a quiet day | 21 | $0.17 |
| Today's card during a WTT event (5 Oct 2026) | 32 | $0.26 |
| Yesterday, today and tomorrow (4-6 Oct 2026) | 103 | $0.83 |
| 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 several weeks of a daily run. 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-table-tennis/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-table-tennis").call(run_input={"days": [-1, 0], "status": "finished"})for match in client.dataset(run["defaultDatasetId"]).iterate_items():print(match["home"], match["homeSets"], "-", match["awaySets"], match["away"], match["sets"])
AI agents (MCP). Add https://mcp.apify.com/?actors=thatmike1/flashscore-table-tennis to Claude, Cursor or any
MCP client to let the agent fetch table tennis 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 and has a fullersetsarray the second time. - Filter by competition on your side. Every item carries
tournament, so keep only the WTT draw you need, or only singles by dropping rows whose tournament containsDOUBLES. - 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 table tennis competitions are covered? Whatever Flashscore lists in its table tennis day list. In test runs in September and October 2026 that was the WTT circuit: WTT Contender Almaty and China Smash, singles, doubles and mixed doubles, qualification included.
Does it cover Setka Cup, TT Elite Series, Czech Liga Pro or TT Cup? Only if Flashscore lists them, and in our test runs it did not. The day lists held 20 to 60 WTT matches a day, not the hundreds those betting-focused leagues play. Check the Flashscore table tennis page for your region before you rely on it for those leagues.
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 Darts Scraper: the same output for darts, with legs won and the best-of format.
- Flashscore Snooker Scraper: the same for snooker, with frames won.
- Sports Odds Scraper: pre-match betting odds bookmaker by bookmaker for football, tennis, basketball and four more sports.