Structured Esports Match Schedule & Tournament Scraper
Under maintenancePricing
$10.00 / 1,000 structured esports match records
Structured Esports Match Schedule & Tournament Scraper
Under maintenanceExtract high-confidence Valorant, LoL, CS2, and Dota 2 match rows from public schedule pages that expose explicit structured data attributes.
Pricing
$10.00 / 1,000 structured esports match records
Rating
0.0
(0)
Developer
Blake Panter
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 days ago
Last modified
Categories
Share
Extract auditable Valorant, LoL, CS2, and Dota 2 match rows from compatible public schedule pages. Every paid result includes teams, match time, tournament context, source evidence, and a deduplication key.
Compatibility requirement: This is not a universal esports-site scraper. A match row must be server-rendered and expose explicit
data-team-a,data-team-b,data-match-time, anddata-gameattributes inside a supported match container.
Will my page work?
A compatible row looks like this:
<articledata-esports-match="true"data-team-a="G2 Esports"data-team-b="Paper Rex"data-match-time="2026-07-05T18:00:00Z"data-game="Valorant"data-event="Example Masters"data-stage="Semifinal"data-status="scheduled">G2 Esports versus Paper Rex</article>
The container must have either data-esports-match="true" or data-match, plus all four required team, time, and game attributes. data-game must identify one of the supported games:
- Valorant
- League of Legends or LoL
- Counter-Strike or CS2
- Dota 2
data-event, data-stage, and data-status are optional. If data-event is absent, the Actor derives tournament context from page metadata, the first heading, the page title, or the hostname.
Generic tables, bracket markup, .match elements, and text such as “A vs B” are not enough. JavaScript-only rows added after page load are not supported. Test a target with a small run before scheduling production work.
Buyer workflows
Use qualified rows for:
- Publisher-owned schedule syndication and tournament pages
- CMS or spreadsheet exports for editorial teams
- QA feeds that verify structured schedule markup
- Community calendars, match alerts, and downstream data pipelines
Quick start
- Confirm that the public page uses the HTML contract above.
- Add one or more pages to
startUrls. - Run the Actor and export the dataset as JSON, CSV, or another Apify-supported format.
{"startUrls": [{ "url": "https://example.com/esports/schedule" }],"maxItems": 25,"requestTimeoutSecs": 30}
startUrls is required and accepts 1–25 credential-free public HTTP(S) pages. maxItems is bounded from 1–500; requestTimeoutSecs is bounded from 5–120 seconds.
Output
{"game": "Valorant","eventName": "Example Masters","teamA": "G2 Esports","teamB": "Paper Rex","matchTime": "2026-07-05T18:00:00Z","stage": "Semifinal","status": "scheduled","confidence": "high","evidenceSnippet": "G2 Esports versus Paper Rex","sourceUrl": "https://example.com/esports/schedule","detectedAt": "2026-08-26T12:00:00.000Z","dedupeKey": "example-masters|g2-esports|paper-rex|2026-07-05t18-00-00z"}
The example documents the schema; it does not assert a current match. evidenceSnippet and sourceUrl make each record auditable, while detectedAt records extraction time and dedupeKey supports downstream deduplication.
A row is emitted only when it contains two distinct plausible teams, a recognized game, a valid explicit time value, tournament context, and source evidence. Match times may be a parseable date/time or the explicit values today, tomorrow, or live.
Pricing
The Actor costs $0.01 per qualified match row. Unsupported pages, navigation elements, generic versus text, and other rejected candidates are not emitted or charged. maxItems and your Apify pay-per-event charge limit bound paid output.
Limits and safety
- Only credential-free public HTTP(S) URLs on standard ports are accepted.
- Loopback, private, link-local, reserved, local-name, and unsafe redirect destinations are rejected.
- Responses above 500 KB are rejected rather than partially parsed.
- Pages must return server-rendered compatible HTML; the Actor does not execute page JavaScript.
- Arbitrary bracket extraction and universal compatibility with esports websites are not supported.
API, schedules, webhooks, and MCP
Start a run with the Apify API using the same input:
curl -X POST \"https://api.apify.com/v2/acts/nintendo424~gaming-esports-schedule-extractor/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"startUrls":[{"url":"https://example.com/esports/schedule"}],"maxItems":25}'
For recurring feeds, create an Apify schedule for this Actor. Attach a webhook to run-success events to notify your calendar, CMS, or automation endpoint, then read the run's default dataset. In an Apify MCP client, run nintendo424/gaming-esports-schedule-extractor with the same startUrls, maxItems, and optional requestTimeoutSecs input—compatibility requirements remain unchanged across interfaces.
Local verification
npm cinpm run lintnpm testnpm run typechecknpx --yes apify-cli validate-schema
Production uses Node.js 24, npm 12.0.2, a committed npm lockfile, and Oxc (oxlint).