OpenDota Dota 2 Scraper avatar

OpenDota Dota 2 Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
OpenDota Dota 2 Scraper

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

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 hours ago

Last modified

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 ID
  • name — display name, e.g. Anti-Mage
  • internalName — engine identifier, e.g. npc_dota_hero_antimage
  • primaryAttrstr / agi / int / all
  • attackTypeMelee or Ranged
  • roles — e.g. Carry, Escape, Nuker
  • legs — number of legs the hero model has
  • sourceUrl — official hero page on dota2.com
  • recordType: "hero", scrapedAt

Output: per match (mode = publicMatches / byMatch)

  • matchId — Dota 2 match ID
  • radiantWin — true when Radiant won
  • startTime — Unix timestamp
  • startTimeIso — the same moment as an ISO 8601 UTC string
  • durationSeconds, durationMinutes
  • avgMmr — average matchmaking rating of the lobby
  • avgRankTier — average rank tier (medal) of the lobby
  • gameMode — Dota 2 game mode code
  • lobbyType — lobby type code
  • numHumanPlayers — human players in the match
  • leagueId — league ID, for professional matches
  • sourceUrl — match page on opendota.com
  • recordType: "match", scrapedAt

Output: per player (mode = byPlayer)

  • accountId — Steam account ID (32-bit)
  • personaname — current Steam display name
  • name — pro player name, when the account is a registered pro
  • steamId — 64-bit Steam ID
  • countryCode — profile country
  • mmrEstimate — OpenDota's estimated MMR
  • rankTier — rank medal tier
  • competitiveRank, soloCompetitiveRank — public ranks, when the player exposes them
  • avatarUrl — full-size Steam avatar
  • profileUrl — Steam community profile
  • sourceUrl — player page on opendota.com
  • recordType: "player", scrapedAt

Input

FieldTypeDefaultDescription
modestringheroesheroes / publicMatches / byPlayer / byMatch
primaryAttrstringstr / agi / int / all (mode=heroes)
attackTypestringMelee / Ranged (mode=heroes)
rolestringCarry / Support / Nuker / Disabler / Jungler / Durable / Escape / Pusher / Initiator (mode=heroes)
accountIdintSteam account ID (mode=byPlayer)
matchIdintSingle match ID (mode=byMatch)
matchIdsarrayMultiple match IDs (mode=byMatch)
minMmrintKeep matches with average MMR at or above this (mode=publicMatches)
maxMmrintKeep matches with average MMR at or below this (mode=publicMatches)
maxItemsint50Hard 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.