This page explains what personal data Amateur Dota Stats holds, where it comes from, why we have it, how long we keep it, and what you can ask us to do about it. It is written to meet Articles 13 and 14 of the UK and EU General Data Protection Regulation.
Amateur Dota Stats (amateurdota.com) is run by an individual, not a company, as an unpaid hobby project for a handful of amateur Dota 2 leagues. For data-protection purposes that person is the data controller and can be reached at [email protected].
Because the site is published openly rather than shared among friends, the GDPR's exemption for purely personal or household activity does not apply to it. We therefore treat the site as fully in scope, and this page is written on that basis.
Where a league's own staff decide who gets scanned, checked or admitted, that league is making the decision and this site is the tool they use. In those cases the league and the site operator are acting together, and you can raise a request with either.
| What | Where it comes from | Why we have it (legal basis) | How long |
|---|---|---|---|
| Match results, player names, avatars, per-game statistics | OpenDota and Steam Web APIs (older seasons also STRATZ) โ already public | Running a public league stats site (legitimate interests) | Indefinitely, as a historical record |
| Where each hero was during a game, its wards and smokes, and how long each draft choice took | The replay file Valve publishes for the game, which we download and read ourselves. We keep hero positions and timings only, by hero and side: no chat, no names, no account ids | Running a public league stats site: the replay map and draft timings on a game's page (legitimate interests) | Indefinitely, as a historical record |
| Login cookie (your SteamID64, signed) | You, when you click "Log in with Steam" | Strictly necessary to provide the login you asked for | 30 days, or until you log out |
| Sign-in record (first seen, last seen, count) | Created when you log in | Understanding site usage (legitimate interests) | Until you ask us to delete it |
| Discord link, caster role | You, when you link an account or are granted the role | Providing features you asked for (legitimate interests) | Until you unlink or the role is revoked |
| Standin entry โ name, Discord name, MMR, roles | League signup sheets, or you editing your own entry | Helping captains find standins (legitimate interests) | Sheets leave the search after 12 months; your own entry until you delete it |
| Linked accounts โ which of a player's Steam accounts share one profile | The player, or their league, asking us to link them | Showing one player's games on one profile (legitimate interests) | Until the link is removed |
| Registration MMR by season, on your public player profile | League signup sheets, current and past seasons | A season-by-season record of the MMR players signed up with (legitimate interests) | Indefinitely, as a historical record, like match results |
| Images you upload (MMR screenshots) | You, when you upload one | Giving you somewhere to host a screenshot the signup form asks for (legitimate interests) | Until you delete it |
| MVP ballot โ who you ranked | You, when you vote | Running the end-of-season vote (legitimate interests) | Kept with the season's result; deleted if you ask |
| Fantasy โ the divisions you joined, your cards and your lineups | You, when you play at fanta.amateurdota.com | Running the game you joined (legitimate interests) | Kept as the record of that season; deleted if you ask |
| Fantasy Hall of Fame โ a division champion's name, points and card | Created when a division's season is won | Honouring the game's champions (legitimate interests) | Permanently, unless the champion hides it or asks us to delete it |
| Fantasy player list โ name, team, captain, registered accounts (alternates included), a guess at their role | The league's draft sheet | Putting every drafted player on a card (legitimate interests) | Kept with that season's game |
| Language moderation results โ flagged chat, names | OpenDota โ public games only, past year, at a league admin's request | League conduct enforcement (legitimate interests) | Cached 30 days; only the latest report per league is kept |
| Server logs โ IP address, path, timestamp | Your browser, on every request | Security and abuse prevention (legitimate interests) | 14 days |
| Encrypted backups of all of the above, except uploaded images | Copied nightly from this site's own database and settings | Not losing the league's history to a hardware failure (legitimate interests) | 14 days |
Where the basis above is legitimate interests, we have weighed our interest in running the site against your privacy, and you have an absolute right to object โ see Your rights. We do not sell data, we do not run advertising, and we do not use analytics or tracking of any kind.
The bulk of this site is Dota 2 match data for the leagues we cover: results, player names, avatars, hero picks and per-game statistics. Match data comes from OpenDota, and player names and avatars from the Steam Web API, which publish it because Dota 2 exposes it for public league matches. Games recorded before October 2026 also drew on STRATZ. Avatars are asked of Steam again every night (every hour for players in the fantasy game), so a picture you change on Steam shows here by the next day. Those answers are held in memory only, never stored. The one Steam name we do keep is a fantasy champion's, in the Hall of Fame.
Most players whose data appears here have never visited this site. We are telling you about it on this page because that is what the law requires when data is obtained from somewhere other than the person it describes. If you play in one of these leagues, your match data is here, and you can object to that โ see Getting data removed.
Player profiles are public pages, and the site lists them for search engines like Google along with the league pages, so a profile can turn up when someone searches for a player's name.
One player, more than one account. When a player plays on a second Steam account (a new one after losing access to the old, say) and they or their league ask us to, we link the two: both accounts' games show on one profile, the other account's profile address leads there, its names find it in search, and the profile shows the picture of the account they last played on. We keep which account is linked to which, and when, until the link is removed. Ask us to undo it at any time. A removal request covers every account linked this way.
There is exactly one cookie, and it is only set if you click "Log in with Steam". It holds your SteamID64 and an expiry date, signed so it cannot be tampered with, and it exists for one purpose: to show you a shortcut to your own player profile and to prove it is you when you edit your own entries.
adota_steam_sidThe cookie is self-contained: there is no server-side session behind it, so logging out or clearing the cookie ends it completely. Because it does nothing except deliver a feature you explicitly asked for, it is a strictly necessary cookie and needs no consent banner. There are no analytics, advertising or third-party tracking cookies on this site.
A few pages also remember choices you make, in your browser's own storage rather than a cookie: card or table view, a panel left open or closed, a tip or reminder you dismissed, and on admin pages the name an admin signs their reviews with. Each is set only when you make that choice, stays on your device, and goes when you clear this site's data in your browser.
The fantasy game lives on its own address, fanta.amateurdota.com, and signs you in
for itself: logging in there sets the same cookie on that address only. Neither site can read
the other's, and logging out of one does not log you out of the other.
Login uses Steam's own OpenID sign-in. You enter your Steam credentials on Steam's site, never here โ this server only receives the SteamID that Steam confirms, and verifies that confirmation directly with Steam. Logging in grants no special access to anything.
We keep a short record against your Dota account id: the date you first signed in, the date you last signed in, and how many times you have. It is never shown anywhere on the site and is never sent to anyone โ it exists so we can answer questions about the site itself, like how many players have ever signed in.
Linking a Discord account, being given the caster role, or claiming a standin entry each store a row against that same account id, because those features have nothing to work with otherwise. If you are given administrator access, the grant and any later change to it are written to an append-only record so there is a trail of who was given what.
Find a Standin is a public list of players who have offered to stand in. Most of it comes from the league signup sheets we import: display name, Discord name, MMR, role comfort, and which season they signed up in. That data is already public in those sheets โ we mirror it so captains can search it. The names and Discord names on them are also how the fantasy game recognises a captain in the league's own Discord posts, which go by Discord names; that is never shown anywhere. Imported sheets are re-read nightly and replaced wholesale, and a sheet older than twelve months is retired from the search.
Retired sheets are kept, not deleted, and so are older seasons' sheets we import on purpose: your public player profile shows the MMR you registered with for each main Clarity and RD2L season we hold a sheet for, as a table and a graph, and a league profile shows the MMR you signed up with for the season being played. That is the number on the sheet as it was at the time: the one you typed, or the league's own adjusted figure, or for the 2017-2018 seasons your rank medal converted with the 2017 table. We do not check it; league staff checked the screenshots at the time. There is no setting to hide it on its own, because the sheets it comes from were public. If you want it gone, ask for removal and your whole profile is taken down.
Each season's page also links to that season's signup sheet. The sheet is the league's own document on Google, not a copy we host, so asking us for removal cannot take you out of it โ that is for the league. We can stop linking any sheet, and will on request. The same page can show the season's playoff bracket, redrawn from the league's Challonge bracket or, for RD2L, its Liquipedia pages: team names, the captain names typed into them, and on Liquipedia the captain's Dota account and the group tables. Where a captain matches an account that has asked for removal, their name is left off our copy.
If you sign in with Steam you can claim and edit your own entry,
or, once your Discord account is linked, do the same with the bot's /standin command.
What you put there is public, including your Discord name, and it is shown with the date you
last changed it so captains can judge how current it is. You can mark yourself unavailable to
drop out of search results, or delete your entry outright, at any time from that page.
A signup form usually asks for a link to an MMR screenshot. You can paste a link to any image host, or upload the image here and use the link we give back โ that option exists because some image hosts are blocked in some countries.
On the public standin search we show your screenshot as a link, never as an image, whoever is hosting it. Links to hosts we do not recognise are held until a site admin has looked at them. Images you upload here are shown back to you on your own upload page so you can tell them apart.
You can upload an MMR screenshot here rather than using a third-party image host. You have to be signed in with Steam, so every uploaded file belongs to a known Dota account โ yours โ and you can delete it whenever you like.
The files are stored in our own Cloudflare R2 bucket and served from a separate subdomain. Anyone with the link can open the image, because that is the point: you paste that link into a signup form for league staff to check. Treat the link as public, and do not upload anything you would not want a league admin to see.
Deleting an upload really deletes it. Most data on this page is hidden rather than erased, because match data is re-read from OpenDota every night and would simply come back. Nothing regrows an uploaded file โ we are the only place it exists โ so both the file and our record of it are removed, from the upload page or by asking us.
At the end of a season, players who played enough games in a division can rank up to three team-mates for MVP.
Your ballot is not anonymous. We store which account cast it and who that account ranked, because that is what stops the same person voting twice and lets you change your ranking. Scores are hidden from everyone until voting closes, and individual ballots are never published โ but a site administrator with database access could see how you voted. If that matters to you, do not vote.
The fantasy game at fanta.amateurdota.com runs one league per division. If you join one, we store which divisions you joined, the cards you were dealt, the lineups you picked and when, all against your Steam account. Cards are dealt by the server and kept, so that reloading the page can never deal a pack again.
Winning a division puts its champion in the fantasy Hall of Fame, for good: the name their Steam profile had when they won, their season points, and a card (their own player's card if they play in the division). Their picture is asked of Steam when the page is shown, never stored. A champion can hide their entry on the Hall of Fame page at any time, and still sees it there themselves so they can bring it back.
Every drafted player in a division is in the game, whether or not they ever visit it. The list is read from the league's draft sheet every six hours: the name on the sheet, their team and who captains it, the accounts registered for them (alternate accounts included), and the sheet's guess at their role, which a card uses until the player's own games show their role. Cards show the name, picture and statistics already public on this site. The registered accounts, and any account linked to the player's, are used to find a player's games and to recognise their own account, and are never shown. Teams are named after their captains, as the league names them.
Fantasy data is kept as the record of its season, like match results. Mail us and we delete yours. If you ask to be removed from the site altogether, everything you did in the fantasy game is deleted outright, Hall of Fame entries included: unlike match data, nothing would bring it back, so there is nothing to hide instead.
There are no prizes and nothing to buy. Fantasy data goes into the same encrypted backups as everything else.
League staff use this site to check whether a player has used slurs, as part of deciding who is admitted to a league. When an admin runs that check on a Steam ID, the site asks OpenDota for that player's public data and looks for slurs in three places: their current and past display names, their word-frequency summary, and โ only if the summary already shows a hit โ the text of their chat messages in public matches OpenDota has parsed.
This looks beyond your league games, and deliberately so: the check is mostly run on people signing up for the first time, who have no league games to look at. It covers the past year and no further, and it reads public games only โ public matchmaking, ranked, and organised competition such as league and Battle Cup matches. Private lobbies are excluded and never read. Where a player is flagged, the matching messages are stored verbatim alongside the match they came from, so a human can see the evidence rather than trust a score.
Results are cached for 30 days, and only the most recent scan for each league is kept โ the next scan overwrites it. A scan can only be run by an authenticated league administrator, and it only reads data OpenDota already publishes: if your Dota match history is set to private, the scan returns nothing but that fact.
No decision is made automatically. The scan produces evidence; a human decides what to do with it. You have the right to ask what a scan found about you and to contest it โ see Your rights.
You can link a Discord account so the bot recognises you. You start this on My Account, which gives you a short code; the code lives in memory for ten minutes, is never written to disk, and is invalidated the moment you generate another one. Once redeemed we store your Discord id and username against your Dota account id. You can unlink at any time from that page, which deletes the link immediately.
In leagues that have invited it, the bot reads a small number of channels so that cast links and fixture posts reach the site without an admin copying them by hand, and so that the fantasy game knows when a series is rescheduled or forfeited. It has read permission only and never posts in those channels.
We deliberately do not build a chat archive. What is kept is the parsed result โ a stream link, the teams it covers, the poster's Discord name and id, and the time it was posted โ plus, for a post an admin needs to look at, an excerpt of at most 400 characters. Everything else is discarded. Items awaiting review are dropped after 48 hours, and deleting your message in Discord withdraws it here too. A reschedule or forfeit is kept as which series it was, its new date, and the names of the two captains it mentions, for 45 days.
When a cast covered a league game, we keep which channel cast it, and the link into its recording, with that game, so the match lists keep pointing at it. That is the caster's public stream and nothing more: not who posted the link, and nothing about viewers.
Like any web server, requests are logged: IP address, path and timestamp. We use these to keep the site up and to spot abuse. Logs are kept for 14 days and then deleted.
The site automatically blocks an IP address that behaves like a scanner or floods it with requests. A block is held in memory only, lasts either 15 minutes or 24 hours depending on how confident the signal is, and disappears when the server restarts. If you think you have been blocked in error, mail the address below and we will lift it.
The site keeps rough counters โ requests per route, which player profiles are viewed most โ to see whether it is healthy. These are aggregate numbers held in memory, are not tied to your IP address, and are lost on every restart.
We do not sell or trade personal data. It reaches these third parties only:
Some of these are based outside the UK and EEA, principally in the United States. Where that is the case the transfer relies on the provider's own safeguards, such as standard contractual clauses or the EUโUS Data Privacy Framework. The site itself runs on a single self-hosted machine. We use no third-party analytics, monitoring or error-reporting service.
So that a dead disk does not lose the league's history, the database and the site's settings are copied every night to private storage in our own Cloudflare R2 account. Each copy is encrypted on our machine before it is sent, with a key Cloudflare does not hold, and the storage is never publicly reachable. Copies are kept for 14 days and then overwritten.
That means something you delete โ a standin entry, a Discord link, an upload record โ can survive in a backup for up to 14 days after it disappears from the site. Uploaded images themselves are not backed up. If we ever restore from a backup, we re-apply every removal request we hold before the site comes back.
Wherever you live, we will honour these. Under UK and EU data protection law you have the right to:
To use any of these, mail [email protected]. We will reply within one month. There is no charge. We may ask you to prove you control the Steam account in question, usually by signing in with it, so that someone else cannot make requests in your name.
If you are unhappy with how we have handled your data you can complain to your national data protection authority. In the UK that is the Information Commissioner's Office; in the EU it is the supervisory authority for the country you live in, listed by the European Data Protection Board. You do not have to come to us first, though we would rather you did.
Things you can do yourself, with no need to mail anyone. They take effect immediately:
For anything else, mail [email protected]. That covers your sign-in record, any moderation scan result, your fantasy data, and your player profile and match statistics.
One thing worth being straight about: your match data is re-read from OpenDota every night, so removing your profile means adding your account to a permanent exclusion list, not just deleting rows. We do that when you ask, and it holds. The games you played stay โ they are the other nine players' results too โ but they show you as an anonymous player, with no name, picture or profile link. What you made here yourself rather than played โ uploaded images, and your fantasy managers, cards, lineups and Hall of Fame entries โ is deleted outright instead. Your old profile address stops being listed for search engines and tells them not to show it, so it drops out of their results once they next visit it. It cannot reach copies already held by OpenDota, STRATZ, Steam or anyone else โ you would need to ask them separately, and turning off "Expose Public Match Data" in Dota 2 is what stops the data being published in the first place.
If we start doing something materially different with your data, we will update this page and change the date at the top. The current version is dated 23 October 2026.