MotoGP Official Results & Standings Scraper
Pricing
from $3.50 / 1,000 results
MotoGP Official Results & Standings Scraper
Scrape official MotoGP/Moto2/Moto3 race results and championship standings, including historical seasons. No login required.
Pricing
from $3.50 / 1,000 results
Rating
0.0
(0)
Developer
Artsiom Kunitsyn
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Scrapes official MotoGP/Moto2/Moto3 race results and championship standings from motogp.com, via the site's own public results API — no login required.
Contents
🔑 Key features
- Two entity types, one Actor. Set
entityTypetoresults(session-by-session finishing order) orstandings(final championship standings). - Real historical depth. MotoGP's own API has real data for ~78 seasons.
- Full session detail. Every result includes rider, team, constructor, time, gap to the leader, average speed, laps, points, and status — for every session type (practice, qualifying, sprint, warm-up, race).
- Real season-long rollups on every standings row — wins, podiums, sprint wins, and sprint podiums, computed by the site's own API, not estimated.
seasonYear/categoryscoping — crawl one season and/or one class instead of walking all history.- Delta mode built in. Every run classifies each item as
new,changed,unchanged, ordelistedagainst a persisted baseline. maxItemsdefaults to 50 — a fast preview, and what keeps an unconfigured run within Apify's automated 5-minute QA check. ClearmaxItems(null) for a full run.
📋 Output
One dataset item per rider-per-session (results) or rider-per-season (standings) — see
the
Output tab's Results / Standings views for a readable table.
Example result record:
{"source": "motogp","entity_type": "results","external_id": "8c630d23-bb85-4827-81d7-f9b2e4c9f342","url": "https://www.motogp.com/en/gp-results/2025/tha/motogp/rac/classification","season_year": 2025,"category": "MotoGP","event_name": "GRAND PRIX OF THAILAND","circuit": "Chang International Circuit","country": "Thailand","session_type": "RAC","position": 1,"rider_name": "Marc Marquez","rider_country": "Spain","team_name": "Ducati Lenovo Team","constructor_name": "Ducati","time": "39:37.244","average_speed": 179.3,"total_laps": 26,"points": 25,"status": "INSTND","change_type": "new"}
Example standing record:
{"source": "motogp","entity_type": "standings","external_id": "c02e9026-9bba-4788-95cc-cab16b3283f6","url": "https://www.motogp.com/en/gp-results/2025/standings/motogp","season_year": 2025,"category": "MotoGP","position": 1,"rider_name": "Marc Marquez","team_name": "Ducati Lenovo Team","points": 545,"race_wins": 11,"podiums": 15,"sprint_wins": 14,"sprint_podiums": 16,"change_type": "new"}
🔧 Input
| Field | Type | Default | Description |
|---|---|---|---|
entityType | string | results | results or standings. |
seasonYear | integer | — | Scope to one season, e.g. 2025. |
category | string | — | Scope to one class: motogp / moto2 / moto3. |
maxItems | integer | 50 | Stop after pushing this many items. Set to null for a full crawl. |
mode | string | auto | auto / full / incremental — see Incremental mode. |
concurrency | integer | 20 | How many API calls to fetch in parallel — validated at real sustained scale, see FAQ. |
impersonate | string | chrome | curl_cffi TLS-impersonation target. |
proxyConfiguration | object | off | Apify Proxy config — not needed; no anti-bot friction found. |
📥 Input examples
Default preview (50 results):
{ "entityType": "results" }
A full season's race results:
{ "entityType": "results", "seasonYear": 2025, "maxItems": null }
A season's final MotoGP standings only:
{ "entityType": "standings", "seasonYear": 2025, "category": "motogp", "maxItems": null }
🔁 Incremental (delta) mode
auto mode does a full scan the first time it runs for a given entityType/scope, then only pushes
new/changed items on later runs. Only an uncapped, error-free run can detect delistings or update
the baseline. In practice, results for a finished session/season rarely change — this mostly matters
for catching mid-weekend corrections or a season still in progress.
🌐 How to scrape motogp.com
motogp.com's own frontend calls a real, public REST API
(api.pulselive.motogp.com/motogp/v1/results/...) with no authentication required — this Actor
replicates exactly those calls: seasons → events → categories → sessions → classification (or,
for standings, seasons → categories → standings directly).
❓ FAQ
Is there a rider/team directory?
Not as a separate entity type — motogp.com's own rider-profile pages are thin (bio text only, no
structured career stats) and its team sitemap is empty. Every rider/team name you'd want is already
on every results/standings row.
Does this need a proxy or API key? No — the results API is fully open, no authentication or key required, and no anti-bot friction was found anywhere.
Why is concurrency capped at 20?
That's the highest level validated so far — a full season of results and the complete 78-season
standings history were both crawled at concurrency 20 with zero errors and no rate-limit wall found.
A season's total points looks like a decimal (e.g. 207.5) — is that a bug?
No — MotoGP awards half points for a race stopped early or shortened by weather, so both a single
session's points and a season's summed total can be genuinely fractional. points is a real
number, not always a whole one.
Related sports data scrapers
- FIBA Scraper — international basketball game results and standings.
- PGA TOUR Scraper — golf results back to the 1950s, hole-by-hole scorecards, FanDuel odds history, tee times and player stats.
- Action Network Scraper — US sportsbook odds, public betting splits, line movement, props, injuries and futures.
- Kalshi & Polymarket Scraper — prediction market odds, settled results and price history for sports, politics, economics and crypto.
- SofaScore Scraper — results, team statistics, lineups with player ratings, incidents and odds for football, basketball, hockey, tennis and 17 more sports.
- Flashscore Scraper — results, statistics, lineups, incidents and opening/closing odds from ~20 bookmakers for 17 sports.