{"slug": "opendota", "name": "OpenDota", "type": "esports_data", "description": "Open-source Dota 2 data platform with a public REST API for matches, players, heroes and parsed replays; free usage with a paid premium key for heavy use.", "website": "https://www.opendota.com", "country": null, "sports": ["esports"], "data_types": ["historical", "player-stats", "results", "stats"], "protocols": ["rest"], "free_tier": true, "trial_days": null, "demo": null, "contact_sales_only": false, "min_price": null, "plans_count": 2, "commercial_use": null, "betting_use": null, "redistribution": null, "rights_basis": null, "customer_types": [], "live_in_play": null, "sentiment": "positive", "discussions": 16, "github_repos": 500, "priority": 1.0, "logo": "/logos/opendota.png", "logo_tone": "tile", "docs_url": "https://docs.opendota.com/", "pricing_url": "https://www.opendota.com/api-keys", "status_page_url": null, "founded_year": null, "product": {"name": "OpenDota API", "formats": ["json"], "auth_methods": ["api_key", "none"], "sdk_languages": ["python (community)", "ruby (community)"], "openapi_url": null, "history_depth": null, "update_frequency": null, "claimed_latency_ms": null}, "plans": [{"name": "Free tier", "price": 0.0, "currency": null, "period": "month", "request_limit": 50000, "request_period": "month", "is_free": true, "is_enterprise": false, "summary": "No key required; about 60 req/min", "source_url": "https://blog.opendota.com/2018/04/17/changes-to-the-api/", "verified_at": "2026-11-03"}, {"name": "Premium", "price": null, "currency": null, "period": "usage", "request_limit": null, "request_period": null, "is_free": false, "is_enterprise": false, "summary": "Paid key with higher limits; price not found", "source_url": "https://www.opendota.com/api-keys", "verified_at": "2026-11-03"}], "access": {"restricted_countries": null, "available_only_in": null, "customer_types": null, "kyc_required": null, "odds_regions": null, "bookmakers_count": null, "notes": null, "source_url": null}, "usage_rights": {"commercial_use": null, "betting_use": null, "redistribution": null, "storage": null, "attribution_required": null, "media_included": null, "terms_url": null, "source_url": null, "basis": null}, "data_source": {"official_partners": [], "collection_methods": null, "source_url": null}, "support": {"sla_uptime": null, "channels": null, "sandbox": null, "changelog_url": null, "certifications": null, "payment_methods": null, "min_contract": null, "source_url": null}, "coverage": {"competitions_count": null, "key_leagues": null, "womens": null, "live_in_play": null, "markets": null, "languages": null, "id_mapping": null, "source_url": null}, "community": {"summary": "Open-source Dota 2 data API widely used in hobby apps, ML projects and Stack Overflow questions. Praised as an excellent, flexible resource with parsed match data and estimated MMR. Free use is rate limited (about 60 requests per minute), and users report 429 errors, occasional unresponsiveness and trouble obtaining a premium key.", "sentiment": "positive", "topics": ["free_tier", "data_quality", "reliability", "docs"], "pros": ["Excellent, flexible data for Dota 2", "Free tier with open-source platform", "Many apps and bots built on it"], "cons": ["Rate limits and 429 errors", "Occasional unresponsiveness", "API key signup problems"], "evidence": ["https://news.ycombinator.com/item?id=14884861", "https://stackoverflow.com/a/53535558", "https://github.com/odota/core/issues/2887", "https://github.com/odota/web/issues/3005", "https://news.ycombinator.com/item?id=14913735"]}, "discussions_list": [{"platform": "reddit", "title": "Backfilled 167K esports matches from public sources for free. Here's what each scene's data actually looks like.", "url": "https://www.reddit.com/r/esports/comments/1t79apz/", "date": "2026-05-08", "score": 12.0, "where": "r/esports"}, {"platform": "stackoverflow", "title": "Python: KeyError but both key and value exists", "url": "https://stackoverflow.com/a/53535558", "date": "2018-11-29", "score": 2.0, "where": null}, {"platform": "stackoverflow", "title": "Pulling data from the ID of a option in <select>", "url": "https://stackoverflow.com/q/59745254", "date": "2020-01-15", "score": 1.0, "where": null}, {"platform": "stackoverflow", "title": "Why the type of hero is any if I have already typed it?", "url": "https://stackoverflow.com/q/76840264", "date": "2023-08-05", "score": 1.0, "where": null}, {"platform": "stackoverflow", "title": "Output of certain data to table the rest api php", "url": "https://stackoverflow.com/q/77537801", "date": "2023-11-23", "score": 1.0, "where": null}, {"platform": "stackoverflow", "title": "How does an API service limit calls without a key?", "url": "https://stackoverflow.com/q/66516987", "date": "2021-03-07", "score": 1.0, "where": null}, {"platform": "hn", "title": "Show HN: Predict winner of a Dota 2 match using neural networks", "url": "https://news.ycombinator.com/item?id=14884861", "date": "2017-07-30", "score": null, "where": null}, {"platform": "hn", "title": "Show HN: I built a fast, minimal Dota 2 counter tool to help me learn the game", "url": "https://news.ycombinator.com/item?id=46583280", "date": "2026-01-12", "score": null, "where": null}, {"platform": "hn", "title": "League of Legends data scraping the hard and tedious way for fun", "url": "https://news.ycombinator.com/item?id=43026732", "date": "2025-02-12", "score": null, "where": null}, {"platform": "hn", "title": "Ask HN: Do you have a side project that you would like to sell?", "url": "https://news.ycombinator.com/item?id=14913735", "date": "2017-08-02", "score": null, "where": null}, {"platform": "stackoverflow", "title": "How to get specific data out of an API using the URL", "url": "https://stackoverflow.com/a/60500648", "date": "2020-03-03", "score": 0.0, "where": null}, {"platform": "stackoverflow", "title": "How to effectively use useEffect", "url": "https://stackoverflow.com/q/60385817", "date": "2020-02-25", "score": 0.0, "where": null}], "repos": [{"platform": "github", "title": "yihong0618/GitHubPoster", "url": "https://github.com/yihong0618/GitHubPoster", "date": "2026-11-03", "score": 1856.0, "where": null}, {"platform": "github", "title": "odota/web", "url": "https://github.com/odota/web", "date": "2026-10-29", "score": 1191.0, "where": null}, {"platform": "github", "title": "mitchtabian/Dota-Info", "url": "https://github.com/mitchtabian/Dota-Info", "date": "2023-01-04", "score": 392.0, "where": null}, {"platform": "github", "title": "mdiller/twitchclipmatchfinder", "url": "https://github.com/mdiller/twitchclipmatchfinder", "date": "2026-09-19", "score": 217.0, "where": null}, {"platform": "github", "title": "TeoMeWhy/data-4u", "url": "https://github.com/TeoMeWhy/data-4u", "date": "2024-01-19", "score": 145.0, "where": null}, {"platform": "github", "title": "servicex-sh/httpx", "url": "https://github.com/servicex-sh/httpx", "date": "2025-07-26", "score": 137.0, "where": null}], "videos": [], "notes": "OpenDota site is a JS app: crawl returned only a title. Limits come from a 2018 blog post and may be outdated; a third party claims 2,000/day instead. Premium price not verified.", "checked_at": "2026-11-03", "alternatives": ["riot-games-api", "pandascore", "abios", "data-sports-group", "cito-ufc-api"], "fit": {"best_for": null, "not_for": null, "use_cases": ["Dota 2 match and player stats", "Parsed replay analysis"], "limitations": ["Saved pages contain only the title", "Free limits come from an old blog post and may be outdated", "Premium price not found"], "source_urls": ["https://docs.opendota.com/", "https://www.opendota.com/api-keys"]}, "score": {"overall": 56, "popularity": 38, "community": 76, "transparency": 50, "developer": 67, "confidence": "medium", "reliability_flags": [], "rank": 29}}