Privacy Policy
How brawl-peek.com handles data, written against what this code actually stores.
1In short
- You can use the whole site without an account and without giving anything away.
- An account needs a username, a password and an email address, which is verified: a six-digit code is sent to it, and the account is only created once that code is entered. Until then no account exists. Section 2 lists everything the account stores.
- You can instead sign in with a third-party provider (Google, and Discord where the operator has configured it). That provider tells this site your account id there, your display name and your email address, which is stored on the account the same way. Section 9 covers what the provider sees.
- The address is used to prove itself, and for account-security notices. Section 4 lists every message it can ever receive — a list generated from the code that sends them rather than counted by hand, because the last two hand-written counts on this page were both out of date within a release. There is no newsletter, it is never sold or shared with anyone, and deleting the account deletes it.
- The bug-report form takes a separate optional address that belongs to that one report and not to any account. Section 3 covers it in full.
- The password is never stored; only a salted scrypt hash of it is.
- A forgotten password can now be reset, but only to a verified address: the code is mailed to the address on the account and to nothing else, so an account that never proved one still cannot be recovered. Section 4 says what the address is and is not good for.
- There is no analytics, no advertising and no third-party tracker in this codebase.
- Nothing is shared with other instances of this software. Each one is an entirely separate site with its own database.
2What is stored when you create an account
Everything below lives in this instance’s own SQLite file, and the list is generated from the database tables themselves rather than written out by hand: a table added to this site and not described here fails this project’s own tests. Sections 3 and 5 cover the bug-report form and your browser; between the three of them, this is everything.
Accounts created before this site collected addresses have none, and are not required to add one; an account created through a third-party provider carries the address that provider reported, marked verified only if the provider said it had verified it.
That window is the one time this site holds an address belonging to somebody who has not agreed to anything — including a stranger whose address somebody else typed in. The verification counters described in section 3 are what stop that being used to send mail at people, and they are their own budget, separate from the report form’s: at most 3 codes to one mailbox per day, 3 different mailboxes per browser per day and 5 sends per browser per day; from one caller — a whole IPv4 address, or one IPv6 /48 prefix — 10 sends an hour, 3 different mailboxes an hour and 6 in a day; and across the whole site 40 an hour and 100 a day. Those two site-wide figures are shared with everyone, including anyone abusing the form: once either is used up, no code is sent to anybody until its window ends, so registration and address changes wait. A request this server cannot attribute to both a caller and a browser is sent nothing at all, and “one mailbox” means the mailbox rather than the spelling — a +tag does not buy a second allowance, although a forwarding address or your own catch-all domain is a different mailbox to this server.
A forgotten-password reset keeps its own row, in a second table: the account id, a scrypt hash and salt of the six-digit code — never the code — how many times it has been sent, the timestamps, the moment the account’s address was verified, and — for at most an hour after a reset finishes — a salted digest, never the value, of the single browser session that reset signed in, which the screen confirming the reset clears the moment it shows it. No address at all: the address is on the account row already. The row is consumed the moment the code is used, expires after 15 minutes, goes when the account goes, and is deleted a day after it expires or is used, swept by the next request this form takes for any address at all — so where nobody is asking for reset codes, the last such row waits until somebody does. Wrong codes are not written to it — they are counted in the same throttle table as everything else in section 3, against the network that typed them, so that a stranger guessing cannot take a code out of its owner’s inbox. Reset codes have their own send budget, separate from the verification one above so that neither form can be used to observe the other: at most 8 codes to one mailbox a day, of which only the first 3 may go to a network that has already had one sent there — the rest are kept for a network that has spent none, so one or two networks can no longer take your day; taking all of it needs at least 6 different ones, and if that happens to you the report form on the forgotten-password page is the way back in — and at most 3 from any one network, which may make 5 requests an hour and 15 a day whatever address it types. A request this server cannot attribute to a network is sent nothing at all. The site-wide figures for this form are an alarm in the operator’s log rather than a ceiling: a code only ever goes to an account’s own verified address, so the volume is already bounded by the two numbers above.
Direct messages are private between you and the person you send them to, in the sense that no other user can read them. They are not encrypted, they are stored as written in this site’s database, and the operator can read them. Do not put anything secret in a direct message.
There is no screen on this site that lists everybody’s conversations. Opening one account’s direct messages requires all three of the admin key, an account the operator has flagged as theirs, and that account’s own password re-entered within the last fifteen minutes; the operator must name the account and type a reason before anything is shown. Every such access is written to an append-only log — who looked, at whose messages, when, and the reason given — and that log records the access, never the content.
Everything above exists only once you have an account. What follows does not: it is recorded about anyone who loads a page here, signed in or not.
bp_vid id from section 5, how many pages that browser opened that day, the site language it was reading, the two-letter country the CDN reported, and — if that browser signed in — the account id, which is how the share of visitors who are members is worked out. No IP address and no page titles. Which individual pages you opened is not recorded; the row below records the SHAPE of the first one only. These rows are written only for a browser that pressed Accept on the cookie banner (section 5): a browser that declined, or has not answered, is not counted and nothing is written for it. Counting starts after the click, so the page you first landed on, and the site that sent you there, are not recorded.A second row per browser per day, beside the one above and keyed the same way, added so that the operator’s own dashboard stops calling crawlers visitors — most of the traffic to this site is automated, and counting it as people was making the site look busy while nobody was reading it. It holds, for that browser on that day:
- One word for what the visit looked like —
human,crawlerorsuspect— and, when the client announced itself as a bot, one word for the kind: search engine, AI, link preview, or other. Those words are worked out from your browser’sUser-Agentheader and from the standardSec-Fetch-*headers every browser sends. TheUser-Agentstring itself is never stored, and is never passed to the part of the server that writes this row. Only the one word is. It is a guess about a request, not a judgement about you: reading the site normally produceshuman, and nothing on the site behaves differently for any of the three. - The host of the page you arrived from —
google.com,discord.com— and nothing else from it. Never the full address, never its path or its query string, and never recorded at all when you arrived from another page on this site, so this cannot become a record of what you read here. - A campaign tag, only if the link you clicked carried one — the
utm_source,reforutm_campaignvalue in the URL. This site does not add those to its own links; it keeps one when somebody else’s link has it. - The shape of the first page you opened, not the page. A visit to one player’s profile is stored as
/players/:tag— the tag itself is dropped, and so is a support ticket’s reference code, which is the only credential for reading that ticket. The stored value is checked against a fixed list of this site’s own routes: anything that is not on it — a mistyped address, a link that no longer exists, a probe from a scanner — is stored as/otherand not as you typed it. - The site language, the two-letter country and how many pages were opened, and — if that browser signed in — the account id, exactly as in the row above. The two rows are keyed the same way and hold the same answers to those four questions; this one adds the classification.
- Counts used to spot automation: a rolling count of how many pages that browser opened in the most recent minute it was active, the clock time that minute-long window started, and how many different site languages it asked for together with which ones — kept as 23 yes/no bits, one per language, so it records that the browser read in Chinese and English but not in what order or at what time. A browser that opens more than 30 pages in one minute, more than 60 pages in one day however slowly, or reads in more than 3 languages in a day, is recorded as
suspectfor that day. The minute counter is not a per-day maximum: it is reset whenever a minute passes with no page load, so by the end of a quiet day it usually reads 1.
Rows written before this was added carry no classification, and none was invented for them; the dashboard shows them separately as unclassified.
And the operator keeps records that are about you but are not part of your account. They are listed here because section 6 deliberately does not delete them, and a policy that only describes what deletion removes would be describing half the truth.
3What is stored when you send a bug report
The report form at /support works without an account and without an email address. What it stores is the report itself, plus the little that makes a reply findable and keeps the form from being abused.
Mail is sent through Cloudflare’s email API, which therefore sees the address and the message. What can be sent to that address is the list in section 9, and nothing there is added by hand. The mailbox those notices come from is not monitored: replying to one reaches nobody, which each of them says, and the report’s own page is the place to answer.
4What the address on your account is for — and what it is not for yet
Registration used to ask for nothing that identified you off this site. It now asks for an email address and verifies it, because an account that can post on the boards, send direct messages and upload pictures needs a way for its owner to be warned when somebody else takes it over. That warning is the whole point of the address.
A forgotten password can now be reset, and only through a verified address. The forgotten-password page mails a six-digit code to the address on the account — never to the address typed into the form, and never for an account whose address was never verified or which the operator has disabled. The page answers the same way whatever the address is, and decides that answer before it has looked the address up, so it cannot be used to find out who has an account here. Finishing a reset replaces the password, signs the account out on every device, and sends a notice to that same address. An account with no verified address still has no way back in, and neither does anyone who has lost access to that mailbox; the way to ask for help in either case is the report form.
So this is everything the address is used for, in full — every message this site is capable of sending to it:
- the six-digit code that registration sends, without which no account is created
- the six-digit code sent to a new address when the address on an account is changed
- a warning to the old address once the change is done, so it cannot happen quietly
- a heads-up to you when somebody else types your address into the registration form
- a heads-up to you when somebody tries to move your address onto a different account
- the six-digit code the forgotten-password page sends, and only ever to an account's verified address
- a notice once that code has been used to reset the password, so it cannot be replaced quietly
Two things are worth spelling out about that list. Changing the address demands the current password (or a fresh provider sign-in), because whoever controls the address is in a position to control the account. And the two notices about somebody else using your address are why neither the registration form nor the change-address form can be used to ask this site whether an address already has an account here: both answers cost the same message and the same time, so there is no difference to measure.
What it is not used for: marketing of any kind, newsletters, announcements (those are published on the site), or anything at all about other people’s accounts. It is not shown to other members. The operator’s own account list shows addresses masked, as ***@example.com, and every time one is revealed in full the reveal is written to an operator log.
An address volunteered on a bug report is a separate thing entirely. It is attached to that one report, not to your account: it cannot be used to sign in, and nothing about the account is ever sent to it.
5Cookies and browser storage
__Host-bi_session, a rule that stops any other host — a sibling subdomain included — writing a session cookie into your browser; over plain http, which browsers refuse that name on, the bare name is used. Without it you are simply anonymous — the site works.Accept-Language header instead.1 if you pressed Accept, 0 if you pressed Decline. Strictly necessary - without it a refusal could not be remembered and the banner would ask again on every page. HTTP-only (the page’s scripts cannot read it), SameSite=Lax, and it lasts 400 days from the last time you answered; it is written only when you answer, never on an ordinary page view.__Host-bp_chat_key, so that no other host can write one into your browser and adopt what you posted; over plain http, which browsers refuse that name on, the bare name is used. It is never sent to other visitors. Two things follow from it being a browser cookie rather than an account: clearing it loses control of anything you posted before, with no way to recover it, and anyone else using this browser profile inherits that control. That is why a message posted without an account can be taken back but not edited, and only within fifteen minutes. Reading the room sets nothing.__Host-bi_oauth_state and so on, which is why they are scoped to the whole site rather than to /api/auth: that prefix is a browser rule and it requires it. The link cookie is the one left unprefixed, deliberately; the reasoning is written at its declaration in the source.That is what this site puts in a visitor’s browser, and it is the whole of it — not because somebody checked, but because the page is generated from the same list the build checks against the code. The only other names this software sets are the operator’s own, in the site owner’s browser after they enter the admin key:
__Host-bp_admin.There is no third-party cookie, no advertising cookie and no cross-site identifier here: every item above is either required to keep you signed in, a step in something you started yourself, a preference you set, or a first-party counter that is read by nobody but this server. The one item that is not strictly necessary is the visitor counter, bp_vid, and it is optional: a banner asks on your first visit, and until you press Accept it is not set and your visits are not counted. Your answer is kept in bp_consent, which is strictly necessary - without it a refusal could not be remembered. You can change your answer at any time with the Cookie settings button in the footer.
6Deleting your account
The account page has a delete button. It asks for your current password first (or, for an account that signs in only through a provider, a fresh sign-in there), because deletion is immediate and permanent and a stolen session cookie must not be enough to trigger it.
Deleting the account removes the users row and, with it, your email address and the moment it was verified, your bound player tag, every session, every bookmark, your whole viewing history, any third-party sign-in link, your avatar and profile settings, every direct message you sent or received, every friendship and pending request, every image you uploaded, and any verification code still waiting to be used. The database rows for your uploads go immediately; the image files themselves are unlinked from disk by the sweeper that runs on a schedule, normally within the hour.
Your public chat messages are taken out of the room at the same moment and stop being shown to anyone: the text is cleared and your name is replaced with a neutral placeholder, exactly as if you had taken every message back yourself. A copy stays in the operator-only archive for up to 30 days, so that a report filed about a message shortly before you left can still be answered, and the text is then deleted. Two things are kept longer, deliberately: the record that a message existed and was withdrawn, which holds no text and no name, and any message a moderator had already removed, which keeps its text and the name it was posted under because it is the operator’s record of a moderation decision. Deleting an account is not a way to erase a moderation record.
Board posts and board replies are not deleted. The link to your account is cleared, but the post text and the author name recorded on the post stay visible, so that conversations do not collapse when one participant leaves. If the operator deletes an account — see below — the author name on those posts is replaced with a neutral placeholder as well.
Bug reports are kept and become anonymous: the report stays readable by its reference code, with no account attached. The separate address you may have typed on a report (section 3) belongs to the report, not to the account, and is not removed by deleting the account — ask the operator to delete it, or delete the report.
The operator can also delete an account, and can disable one without deleting it. A disabled account cannot sign in and its sessions are ended, but nothing it owns is destroyed and it can be enabled again. Operator deletion destroys exactly the same things the list above describes. Both actions, and every time the operator reveals an account address in full, are recorded in an operator log.
If you want your posts gone, delete them from the boards before deleting your account, or ask the operator at [email protected].
7Game data this site indexes
Separately from anything about site visitors, this instance keeps an index of public Brawl Stars game data retrieved from Supercell’s developer API: player and club profiles and their raw API payloads, name history and club history reconstructed from successive polls, hourly progression snapshots, equipped skins, and archived battle logs.
That data is about game accounts, not about the person reading this page, and it is indexed because someone looked the account up here, because the account appeared on an official leaderboard, or because it appeared in a battle log or club roster this site indexed — not because its owner has any relationship with this site. An account indexed only from a battle log or a club roster starts as its tag and name alone; its full profile and raw API payload are fetched and stored when the refresh queue reaches it, or sooner when it appears in someone’s name-search results here, which fetches the profile of each such account scrolled into view. It is retained whether or not anyone here has an account, and an account that the API reports as deleted is dropped from the index.
Opening a player or club page while signed in records that visit in your own viewing history, and it also refreshes that account’s entry in the shared index. The index itself does not record who looked at what.
Asking for your account to be removed. Write to [email protected] with your player tag. Once the operator removes it, the site stops indexing that tag for good and deletes what it holds under it: the profile and its stored API data, name and club history, progression snapshots, equipped and previously seen skins, and the battle log archived under that tag. Its page, share card and preview image then say only that the player asked to be removed, and nothing is fetched for it again.
What is kept: the tag itself on the removal list, with the date and an optional short operator note - that entry is what stops the account being indexed again - and an entry in the operator log saying the removal was made. Other players’ records that include you are theirs, so they stay, but you are shown in them as “Removed player” with no name, tag or link: a battle archived under a teammate’s or opponent’s tag (the stored raw data of an archived battle is blanked after 30 days and the battle is deleted after 90), and a club roster until the club is next fetched after you leave it. Anonymous totals already computed (tier-list counts, skin usage) carry no tag and stay. Backups taken before the removal still contain what they held then.
The removal is immediate on the site. A link-preview image made before it can be served from a cache for up to a day, and copies already held by others - chat-app previews, search engines - are outside this site’s control; the removed page tells search engines not to index it. The operator can undo a removal, which only takes the tag off the list: nothing deleted comes back, and the account would be indexed afresh only the way any new account is. Removing an account from this site does not affect the game or Supercell’s own leaderboards.
8What this site does not do
- No analytics service, no telemetry, no session recording, no heatmaps.
- No advertising, no ad network, no tracking pixel, no advertising identifiers.
- No third-party JavaScript of any kind — every script on the page is part of the app.
- No profiling, no automated decisions about you, and nothing sold or shared for money.
- No phone number, payment detail or precise location is collected, ever, and this site never asks you for your real name. The one name-like thing it can hold that you did not type here is the display name your sign-in provider reports, if you use one — which for many people is their name there. It is stored on the provider link described in section 2, and on an account that a provider sign-in created it is what the username was made from.
- Every email address this site holds sits in one of these columns, and that is the whole of it — not because somebody counted, but because the list is generated from the schema:
users.email— the verified address on an account (section 2)tickets.reporter_email— the optional address volunteered on one bug report (section 3)email_verifications.email— an address waiting on a registration or an address change, held for fifteen minutes at a time before it becomes the account's or is deleted (section 2)oauth_identities.email— the address a sign-in provider reported, kept on the provider link. Usually the same address as the account's, because a new account takes it from there — but if you link a provider to an account that already had a different address, both are held (section 2)
- No email address is ever sold, rented, shared with another site, used for marketing, or used to contact anyone about anything other than the account or report it belongs to.
- No password is ever shown to anyone, the operator included — there is no plaintext password stored anywhere to show, and the operator’s account list deliberately has no way to reveal one.
9Third parties involved
cdn.brawlify.com— Brawler portraits, profile icons, club badges and map images — the artwork on nearly every page of this site. On the skin pages, a skin the Fan Kit has no render for shows its brawler's portrait from here.media.ffycdn.net— Official Supercell Fan Kit art: the skin renders on the skin pages, and the small icons beside trophies, ranked divisions and fame tiers. This is Supercell's own Fan Kit CDN, hotlinked as the Fan Kit asks; nothing from it is copied onto this server.i.ytimg.com— Video thumbnails on the Brawl videos tool, and only on that page. YouTube's terms require the thumbnail to be shown from the address their API returns, so the image is loaded from Google's thumbnail host rather than copied here.
Nothing is sent to any of them beyond an ordinary image request: the address of the image, your IP address, your browser’s user-agent, and — as with any image on any site — the fact that the request came from this site. No cookie this site set, no account id, nothing you typed and nothing about the page you were reading goes with it. They are plain image requests, not scripts and not embedded frames; there is no third-party JavaScript anywhere here, as section 8 says. Whether one of those hosts already holds a cookie of its own in your browser — because you have been to YouTube yourself, for example — is between you and them: this site cannot set, read or see it. What each host does on its own side is outside this policy and outside this site’s control.
- the six-digit code that registration sends, without which no account is created
- the six-digit code sent to a new address when the address on an account is changed
- a warning to the old address once the change is done, so it cannot happen quietly
- a heads-up to you when somebody else types your address into the registration form
- a heads-up to you when somebody tries to move your address onto a different account
- the six-digit code the forgotten-password page sends, and only ever to an account's verified address
- a notice once that code has been used to reset the password, so it cannot be replaced quietly
- a receipt when the report arrives, carrying the reference code and deliberately no link
- a notice each time the operator replies, which does carry a link to that code's page
Cloudflare receives the destination address and the message it is sending. No address is passed to it for any other purpose, and there is no mailing list of any kind. With no mail credentials configured, the site simply sends nothing — registration then stores the address without being able to verify it, and says so on the form.
10Retention
- Account data, bookmarks and board posts: until you delete them, subject to section 6.
- Public chat, the visible room: the newest 500 messages. Everything older moves to the operator-only archive rather than being thrown away.
- Public chat archive: kept until the operator prunes it, with one exception. When you take back your own message, the copy in the archive keeps its text for at most 30 days so that a report about it can still be investigated, and the text is then deleted; the record that a message was taken back, by whom and when, remains. Messages a moderator removed are kept as evidence for as long as the operator needs them. Deleting your account withdraws your messages from the room immediately and puts their text on that same 30-day clock; the moderator removals keep their text, as section 6 sets out.
- Direct messages: until either participant deletes their account, which deletes every message between them.
- Admin direct-message access log: kept indefinitely. It holds no message content.
- The email address on an account: until you change it or delete the account. Changing it replaces the old address; it is not archived.
- An address waiting to be verified, and the pending registration or change it belongs to: 15 minutes, after which the code stops working, and the row itself is deleted within a day of expiring. Nothing is kept from a signup that was never completed.
- Bug reports and their replies: kept while the operator still needs the defect on record. An email address volunteered on one is deleted when the report is deleted, and can be deleted from it on request before then — see section 3.
- Abuse counters behind the report form, behind verification and behind image uploads and image reports: two days from the start of the window each one counts. The failed sign-in throttle, the wrong-current-password counters, the chat room’s counters, the search page’s profile-loading counters and the Refresh now button’s counter: a day after the last attempt they counted. Their keys are one-way hashes (or, for site-wide totals, fixed names), never addresses or IP addresses — and every one of them that counts a caller hashes only an IPv6 caller’s network prefix, not the address.
- The operator log of account deletions, disables, password resets and address reveals: kept indefinitely. It records the action, the account id, the username and the time — no addresses and no IP addresses.
- Sessions: 90 days, or until you sign out.
- Viewing history: the newest 25 players and 25 clubs, older entries dropped automatically.
- Archived battles: pruned after 90 days.
- Daily battle aggregates: pruned after 120 days.
- Player progression snapshots: pruned after a year.
- Indexed player and club records: kept while they exist in the game, or until the player asks for the account to be removed (section 7).
- The removal list: kept for as long as the site runs, since it is what stops a removed account from being indexed again.
- Visit rows (section 2): kept until the operator deletes them; there is no automatic sweep. Declining the cookie later stops new rows but does not erase earlier ones.
11Your rights and how to exercise them
Depending on where you live you may have rights to access, correct, export or erase data held about you. In practice, most of what this site holds about an account holder is visible and editable from the account page, and deleting the account removes it.
The email address on the account can be changed or replaced from the account page, and it is erased with the account. It is shown back to you masked, as ***@example.com, which is also how the operator’s account list shows it.
A bug report is visible in full on its own reference-code page. The address you may have typed on it is separate from any account address, and the operator can delete that address from the report, or the whole report, when you ask.
For anything else about your data — to see what is held, to have it corrected, or to have it deleted — write to [email protected], from the address on your account where you have one so the request can be matched to it, and the operator will answer as soon as possible.
12Unofficial fan content
This material is unofficial and is not endorsed by Supercell. For more information see Supercell's Fan Content Policy. Fan Content Policy
Brawl Stars is a trademark of Supercell Oy. Data about game accounts shown here originates from Supercell’s public API; this privacy policy covers only what this instance does with it, and not Supercell’s own handling of player data.
13Changes and contact
This policy changes when the software changes. The version on this page is the current one, and material changes should be announced on the Announcements page.
Questions go to [email protected]. This policy is effective from 2026-09-24, and this site is run by an individual, operating the site as “BrawlPeek 站長” (the BrawlPeek site owner).
The technical claims on this page can be checked against the source; the Technology page describes the same pipeline from the engineering side.