OpenDota Dota 2 Scraper
Pricing
from $3.00 / 1,000 results
OpenDota Dota 2 Scraper
Scrape OpenDota.com - the open-source Dota 2 analytics platform. Fetch all 127 heroes with stats, roles, and attributes. Browse recent public matches with MMR data. Lookup player profiles by Steam account ID. Free public API, no key required.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Crawler Bros
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Share
OpenDota Scraper
Scrape OpenDota — the open Dota 2 statistics platform. Pull the full hero roster with attributes, attack types and roles, stream recent public matches with skill-bracket filtering, look up a player's profile and rank, or fetch specific matches by ID. Every match record includes the winning side, duration, average MMR and rank tier, game mode, and lobby type. HTTP-only via the public api.opendota.com API. No auth, no proxy.
What this actor does
- Four modes:
heroes,publicMatches,byPlayer,byMatch - Hero filters: primary attribute (Strength / Agility / Intelligence / Universal), attack type, and any of nine roles
- Skill-bracket filtering: min/max average MMR on public matches
- Human-readable derivations: Unix timestamps also emitted as ISO strings, match duration also in minutes
- Empty fields are omitted
Output: per hero (mode = heroes)
heroId— OpenDota hero IDname— display name, e.g.Anti-MageinternalName— engine identifier, e.g.npc_dota_hero_antimageprimaryAttr—str/agi/int/allattackType—MeleeorRangedroles— e.g.Carry,Escape,Nukerlegs— number of legs the hero model hassourceUrl— official hero page on dota2.comrecordType: "hero",scrapedAt
Output: per match (mode = publicMatches / byMatch)
matchId— Dota 2 match IDradiantWin— true when Radiant wonstartTime— Unix timestampstartTimeIso— the same moment as an ISO 8601 UTC stringdurationSeconds,durationMinutesavgMmr— average matchmaking rating of the lobbyavgRankTier— average rank tier (medal) of the lobbygameMode— Dota 2 game mode codelobbyType— lobby type codenumHumanPlayers— human players in the matchleagueId— league ID, for professional matchessourceUrl— match page on opendota.comrecordType: "match",scrapedAt
Output: per player (mode = byPlayer)
accountId— Steam account ID (32-bit)personaname— current Steam display namename— pro player name, when the account is a registered prosteamId— 64-bit Steam IDcountryCode— profile countrymmrEstimate— OpenDota's estimated MMRrankTier— rank medal tiercompetitiveRank,soloCompetitiveRank— public ranks, when the player exposes themavatarUrl— full-size Steam avatarprofileUrl— Steam community profilesourceUrl— player page on opendota.comrecordType: "player",scrapedAt
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | heroes | heroes / publicMatches / byPlayer / byMatch |
primaryAttr | string | – | str / agi / int / all (mode=heroes) |
attackType | string | – | Melee / Ranged (mode=heroes) |
role | string | – | Carry / Support / Nuker / Disabler / Jungler / Durable / Escape / Pusher / Initiator (mode=heroes) |
accountId | int | – | Steam account ID (mode=byPlayer) |
matchId | int | – | Single match ID (mode=byMatch) |
matchIds | array | – | Multiple match IDs (mode=byMatch) |
minMmr | int | – | Keep matches with average MMR at or above this (mode=publicMatches) |
maxMmr | int | – | Keep matches with average MMR at or below this (mode=publicMatches) |
maxItems | int | 50 | Hard cap (1–500) |
Example: the full hero roster
{"mode": "heroes","maxItems": 500}
Example: ranged support heroes
{"mode": "heroes","attackType": "Ranged","role": "Support"}
Example: high-MMR public matches
{"mode": "publicMatches","minMmr": 5000,"maxItems": 200}
Example: a player profile and specific matches
{"mode": "byPlayer","accountId": 86745912}
Use cases
- Esports analytics — sample public matches by skill bracket to measure meta trends
- Coaching tools — pull a player's rank and profile to benchmark against a bracket
- Draft assistants — build hero pools filtered by attribute, attack type, and role
- Content & community sites — populate hero pages and match recaps automatically
- Machine learning — assemble labelled match datasets with MMR, duration, and outcome
- Betting and prediction research — study win rates by lobby type and skill tier
FAQ
What is OpenDota? An open-source Dota 2 data platform that ingests match data from Valve's API and republishes it through a free public API. See opendota.com.
Is this affiliated with OpenDota or Valve? No. This is a third-party actor using OpenDota's public API.
Do I need an API key? No. The endpoints used are free and unauthenticated. OpenDota rate-limits anonymous callers, so the actor paces its requests and retries on 429.
Where do I find a Steam account ID? It's the 32-bit ID that appears in an OpenDota player URL (opendota.com/players/<accountId>). It is not the 64-bit steamId, which the actor returns separately.
Why do some public matches have no avgMmr? MMR is only exposed for lobbies where enough players have public match data. When it's missing the field is dropped — and note that setting minMmr or maxMmr therefore excludes those matches.
What is avgRankTier? A two-digit code where the first digit is the medal (1 = Herald … 8 = Immortal) and the second is the star within it. 54 means Legend 4.
What do gameMode and lobbyType numbers mean? They're Valve's own enum codes — for example game mode 22 is All Pick (Ranked) and lobby type 7 is Ranked Matchmaking. OpenDota publishes the full code tables.
Can I get per-player detail inside a match? byMatch returns match-level summary fields. Full per-player breakdowns are available on the linked sourceUrl match page.
Why does byPlayer sometimes return nothing? Players can hide their Dota profile from public stats. When a profile is private the API returns no usable record and the run ends with an explanatory status message.
How fresh is the data? Public matches appear within minutes of finishing. Hero data changes only when Valve ships a patch.