Privacy Policy for WPM Arena¶ ↑
Effective date: 11 October 2026
Last updated: 12 October 2026
1. Who we are¶ ↑
This Privacy Policy explains how the Android game WPM Arena (the App, package name com.hearthside.wpmarena) handles information.
The data controller is the individual developer who publishes the App under the Google Play developer name Hearthside (referred to as Hearthside, we, us, or our). The controller is based in Ukraine. The controller's verified legal identity and contact address are available in the Developer contact section of the App's Google Play listing.
Privacy contact: hearthside.support@gmail.com
This notice applies to the App, its multiplayer backend, leaderboards, account recovery, advertising, in-app purchases, subscriptions, and related support. It does not govern Google Play, Google Payments, RevenueCat, Firebase, Railway, or other third-party services when they act under their own terms.
2. Privacy summary¶ ↑
-
The App does not require an email address, phone number, or password.
-
It creates an anonymous player identity for online features and progress recovery.
-
Your nickname, selected cosmetics, level, multiplayer statistics, and premium badge can be visible to other players.
-
Releases with advertising enabled may use Google Mobile Ads for optional rewarded and infrequent interstitial ads. Ad requests are configured as non-personalised. Google may process device and ad-interaction data to deliver, measure, and protect its ad service.
-
Premium removes all in-app ads. Watching a rewarded ad is optional; ordinary race and season rewards remain available without watching one.
-
Optional Firebase Analytics is consent-based in the EEA, United Kingdom, and Switzerland. Elsewhere it is enabled as described below.
-
Essential Firebase Crashlytics reports are enabled to diagnose failures.
-
Google Play processes payments. We do not receive your card number or bank details.
-
You can permanently delete your player account from inside the App.
3. Age and children¶ ↑
WPM Arena is intended for people aged 13 and over and is not directed to children under 13.
If you are a minor where you live, use the App only with the involvement and permission of a parent or legal guardian. If local law requires parental authorisation for optional analytics consent, the parent or guardian must make that choice. In the EEA, the age at which a child can give their own consent for an online service varies by country between 13 and 16.
We do not knowingly request a child's real name, email address, phone number, or date of birth. If you believe a child has provided personal data contrary to this section, contact us and we will investigate and delete it where required.
4. Information handled by the App¶ ↑
4.1 Data stored on your device¶ ↑
The App stores gameplay and preference data locally, including:
-
music, sound-effect, vibration, language, and notification settings;
-
whether onboarding and certain informational prompts have been shown;
-
nickname and equipped avatar, race avatar, trail, title, theme, and soundtrack;
-
Gold, Gems, XP, level, owned items, claimed rewards, achievements, daily reward state, rank and season state;
-
detailed typing statistics and local match history;
-
purchase-delivery transaction identifiers used to prevent duplicate grants;
-
the share reward and review-prompt state; and
-
your analytics choice where a choice is required.
Android may include eligible local App data in Google device backup or device-to-device transfer when those features are enabled in your Google and device settings. The encrypted multiplayer credential is excluded from normal Android App backup and is handled separately through Google Block Store, as described below.
Local data remains on the device until it is replaced, reset, deleted through the App, cleared through Android settings, or removed when the App is uninstalled, subject to any Android or Google backup copy controlled by you.
4.2 Anonymous player identity and recovery¶ ↑
When an online feature is first used, the App creates an anonymous identity. It does not use your Google account name, email address, phone number, or hardware serial number. The player identity does not include the Android advertising ID; the separate ad SDK may process device/ad identifiers as described in Section 4.7.
The identity includes:
-
an internal random player identifier;
-
a short public player ID;
-
a random credential ID;
-
a random 256-bit recovery secret;
-
short-lived session tokens; and
-
an optional one-time recovery code generated at your request.
The recovery secret is encrypted locally with AES-GCM using a key held in the Android Keystore. On the server, recovery secrets, recovery codes, and session secrets are stored only as keyed cryptographic hashes, not as readable secrets.
The App also asks Google Block Store to back up a small copy of the credential ID and recovery secret so the identity can be restored during setup of a new Android device. Google controls the transfer and cloud-backup infrastructure. End-to-end encryption availability depends on the device and its lock-screen configuration. The App can retrieve the restored bytes after device setup in order to sign you back in.
4.3 Profile and synced progression¶ ↑
Our backend stores the information needed for online play and cross-device progress restoration:
-
nickname;
-
public player ID;
-
selected profile avatar, race avatar, trail, and title;
-
level and premium-badge state;
-
multiplayer wins, losses, match count, best WPM, average WPM, and average accuracy;
-
a private progress snapshot containing level, XP progress, best and latest WPM, best accuracy, selected accuracy counters, games played, Gold and Gem balances, and owned item IDs; and
-
record creation and update timestamps.
Some richer systems remain local only. In particular, detailed lifetime metrics, achievements, local transaction history, daily reward state, and rank-season state are not currently part of the backend progress schema.
4.4 Multiplayer and match information¶ ↑
For multiplayer features, the App and backend process:
-
lobby and invite codes, lobby size, ready state, and game language;
-
matchmaking queue state and compatible-language selection;
-
match ID, race mode, practice text ID and text content, and timestamps;
-
correct-character count, error count, elapsed time, WPM, accuracy, place, finish status, and disconnection state; and
-
short-lived live progress needed to draw each racer on every participant's screen.
While you type a race text, the client sends the prefix of that App-provided text needed for server-side validation. It is processed for the live race and is not stored in the completed match result. The App does not read what you type in other apps or outside its race input field.
Quick Match can use computer-controlled racers when needed. Their names and cosmetics are generated for the selected game language and do not represent real people.
4.5 Purchases and subscriptions¶ ↑
The App sells consumable Gold and Gem packs and weekly or monthly auto-renewing Premium subscriptions through Google Play Billing. RevenueCat provides purchase validation and entitlement management.
Google Play processes your payment method, billing profile, taxes, and Google account relationship. We do not receive your complete card number, bank account details, or billing address.
RevenueCat receives an automatically generated anonymous App User ID, technical device and App information, Google Play purchase tokens, product IDs, transaction and subscription status, entitlement status, store locale, and currency information. The current integration does not send RevenueCat your nickname, public player ID, email address, phone number, or advertising ID.
The App receives product availability, localised prices, purchase results, and whether Premium is active. Purchase-delivery identifiers may be stored locally to prevent granting the same currency pack more than once. Updated balances and owned item IDs can then be included in the backend progress snapshot.
4.6 Firebase Analytics¶ ↑
We use Google Analytics for Firebase to understand aggregate App usage and improve gameplay.
In the EEA, United Kingdom, and Switzerland, Analytics is disabled until you choose Allow usage data in the first-launch privacy prompt. Choosing Essential only keeps Analytics disabled. You can later change the choice in Settings > Privacy > Usage Analytics. Turning it off stops future Analytics events and resets the Analytics data held on that installation.
Outside those regions, Analytics is enabled without displaying the consent prompt, based on our legitimate interest in understanding and improving the App where applicable law permits this. You may object by contacting us. We will consider the request and take the steps required by the law that applies to you. Clearing App data resets the Analytics identifier, although Analytics will be enabled again on the next launch outside a consent region.
To decide whether the regional prompt is required, the App checks SIM-country, network-country, and Android locale country codes on the device. It does not request GPS or a location permission for this check. If the region cannot be determined, the App shows the consent prompt. These country-code signals are not intentionally sent to us for this decision.
When enabled, Analytics can process:
-
a generated Analytics App instance identifier;
-
App version, device model, operating system, screen and locale information;
-
session starts and screen views;
-
onboarding steps, Premium-screen opens/skips, mode choices, and race starts;
-
race mode, game language, WPM, accuracy, place, racer count, and DNF state;
-
race readiness, keyboard visibility, first accepted input, progress milestones, aggregate error counts, result views, and explicit exits;
-
app background/resume and screen time, plus ad load/show/reward/error events and estimated paid-ad value;
-
level-up events;
-
virtual-item purchase item ID, virtual currency, and price;
-
real-money checkout, completion, or failure events and product ID; and
-
coarse country or region inferred by Google from network information.
The race funnel uses a random identifier for each attempt so its steps can be grouped. It does not send the passage, text typed, recovery credentials, nickname, or public player ID to Analytics. In the initial ad configuration, requests are marked non-personalised and Firebase's separate advertising storage, advertising user data, and personalisation signals remain denied. Those Firebase settings do not disable the separate Google Mobile Ads SDK.
4.7 Advertising and ad choices¶ ↑
The App integrates Google Mobile Ads (AdMob) and Google's User Messaging Platform (UMP). Ads are only requested in releases that have advertising enabled. In those releases, the SDK is initialized only after its consent information allows an ad request and the App has confirmed that Premium is not active. A release with advertising disabled does not load or request ads. Where Google requires consent or a privacy choice, UMP presents the form and the App provides Settings > Ad privacy choices when Google says that control is required. The initial integration sends non-personalised ad requests in all regions; this limits ad personalisation but does not mean the SDK handles no data.
Google's Mobile Ads SDK may automatically collect and share a device's IP address (which can indicate general location), ad and App interactions such as launches, taps, and ad views, diagnostics, and device or account identifiers. The Android advertising ID may also be available depending on Android and the device's privacy settings. Google uses these data for ad delivery, measurement, analytics, fraud prevention, and service operation. The App does not attach your public player ID, nickname, race passage, or typed characters to an ad request. See Google's Mobile Ads SDK disclosure and privacy information.
Rewarded ads play only after you choose to watch. Optional ad rewards may include non-transferable in-App Gold or Crystals with no cash value. Skipping an ad does not remove or delay your ordinary race or season reward. Premium members see no ads and can claim the same optional rewards directly. Interstitials are limited to occasional returns from a completed solo result to Home; the first session and early races are excluded, and frequency caps apply.
4.8 Firebase Crashlytics¶ ↑
Firebase Crashlytics is enabled to diagnose crashes and serious non-fatal errors. It can process:
-
crash stack traces and diagnostic state;
-
App version and failure timestamps;
-
device model, operating-system version, CPU architecture, memory and disk information, orientation, and rooted-device state;
-
Firebase and Crashlytics installation identifiers;
-
recent screen breadcrumbs and a short internal operation context; and
-
your anonymous public player ID, which is attached so a support report can be matched to the relevant crash.
Crash reports do not intentionally include the race text, typed characters, recovery secrets, access tokens, payment-card data, or contact details.
Crashlytics is always enabled under our legitimate interest in maintaining a stable and secure App. It is separate from optional Analytics and remains enabled if you choose Essential only. You have a right to object where applicable; contact us with your public player ID and the reason for the objection, and we will assess and respond as required by law.
4.9 Server and hosting logs¶ ↑
The backend and Railway infrastructure process ordinary connection and security information such as request time, method, requested path, response status, correlation ID, source IP address, user agent, edge region, connection errors, and service diagnostics.
Application logging is designed not to record request bodies, recovery secrets, access tokens, database passwords, or race typing content. An invite code can appear temporarily in the requested URL when an invitation link is opened.
4.10 Notifications¶ ↑
Daily reward reminders are local notifications scheduled on the device. There is no push-notification server and no notification token is sent to us.
On Android 13 and later, the App asks for notification permission before a reminder can be shown. Turning Daily Reminders off cancels the App's scheduled reminder. You can also disable notifications in Android settings.
Google Play Games Services¶ ↑
If you choose to use Google Play Games features, Google may provide the App with your Play Games player identifier, display name, profile image, and game activity needed for sign-in, achievements, and leaderboards. Google processes your Google Account information under its own privacy terms; the App does not request your Google Account email address for these features. If Saved Games is enabled in a release, the App may read or write its own game-save data in the App-specific storage area provided by Google Play Games Services in Google Drive. This storage is not used to browse your Drive files. You can manage your Play Games account and connected-app access in your Google Account settings.
4.12 Android permissions¶ ↑
The App declares:
-
INTERNETfor multiplayer, account sync, purchases, Analytics, and crash reporting; -
com.android.vending.BILLINGfor Google Play purchases and subscriptions; -
VIBRATEfor optional game haptics; -
POST_NOTIFICATIONSfor optional local daily-reward reminders; and -
RECEIVE_BOOT_COMPLETEDto reschedule an enabled local reminder after a reboot or App update.
The debug build and production builds with ads enabled include Android's com.google.android.gms.permission.AD_ID for Google Mobile Ads. Production builds without production ad IDs remove this permission. The App removes AdServices attribution permissions. Android and Google Play settings may restrict advertising identifiers on a device. The App does not request camera, microphone, contacts, calendar, SMS, call logs, photos, files, or precise-location permissions.
5. What we do not collect¶ ↑
Unless you voluntarily put such information in a public nickname or send it to support, we do not ask for or collect:
-
your real name, email address, phone number, home address, or date of birth;
-
government identifiers, biometric data, health data, or payment-card details;
-
contacts, messages, call history, photos, videos, recordings, or files;
-
GPS or precise location;
-
keyboard input outside the active race field; or
-
the Android advertising ID for our own player-account or Firebase Analytics profile; Google's Mobile Ads SDK may process device/ad identifiers as described in Section 4.7.
We do not sell personal data or use the ad SDK to build our own cross-app profile. Ad requests are configured as non-personalised; Google processes the data described in Section 4.7 under its applicable terms.
6. Why we process information¶ ↑
Where the GDPR or UK GDPR applies, our principal legal bases are:
-
Contract: create and recover an anonymous player identity; provide multiplayer, leaderboards, progress sync, purchases, and requested support.
-
Consent: Firebase Analytics in the EEA, United Kingdom, and Switzerland; ad privacy choices or permissions where applicable law requires them; Android notification permission.
-
Legitimate interests: App security, abuse prevention, operational logs, Crashlytics, and Analytics outside consent regions where this basis is permitted. Our interests are maintaining a stable service, preventing cheating, and understanding product performance.
-
Legal obligation: transaction, tax, accounting, consumer-protection, and lawful disclosure requirements.
We do not use personal data for automated decisions that produce legal or similarly significant effects. Automated anti-cheat or rate-limiting measures may affect access to competitive features; you may ask us to review such an action.
7. Information visible to other players¶ ↑
Competitive features make the following information public by design:
-
nickname and public player ID;
-
selected avatars, trail, and title;
-
level and Premium badge;
-
multiplayer wins, losses, match count, best WPM, average WPM, and average accuracy; and
-
live race position, WPM, errors, connection state, and final result for people in the same match.
Do not use a real name, email address, phone number, social-media handle, or other identifying information as your nickname. There is no player chat, voice chat, image sharing, or friend messaging in the App.
Balances, recovery credentials, purchase history, local detailed statistics, and crash reports are not shown to other players.
8. Service providers¶ ↑
We use the following providers only for the described purposes:
-
Google Play and Google Play Billing: distribution, purchases, subscriptions, refunds, and payment management. policies.google.com/privacy
-
Google Firebase Analytics, Crashlytics, and Installations: usage measurement and stability diagnostics. firebase.google.com/support/privacy
-
Google Mobile Ads and User Messaging Platform: ad delivery, measurement, fraud prevention, and consent/privacy choices. Google Privacy Policy; AdMob privacy information
-
Google Block Store and Android Backup: credential restore and eligible device backup or transfer. developers.google.com/android/reference/com/google/android/gms/auth/blockstore/Blockstore
-
RevenueCat, Inc.: purchase validation, product information, anonymous customer records, and Premium entitlements. www.revenuecat.com/privacy-policy
-
Railway Corp.: backend hosting, PostgreSQL storage, network routing, and operational logs. railway.com/legal/privacy
We may disclose the minimum necessary information to professional advisers, service providers, a successor operating the App, or a competent authority when required by law or necessary to protect rights, safety, and service integrity.
9. International transfers¶ ↑
We are based in Ukraine. Providers may process information in the EEA, United Kingdom, United States, and other locations where they operate.
Where transfer restrictions apply, we rely on the safeguards made available under the relevant provider agreements, such as Standard Contractual Clauses, the UK transfer addendum, or an applicable adequacy framework. We also use technical safeguards including TLS, access controls, encrypted credential storage, and cryptographic hashing of secrets.
You may contact us for more information about the safeguards relevant to your data.
10. Retention¶ ↑
-
Player profile and synced progress: until the player account is deleted.
-
Match participation and history: until account deletion. When your participation is removed, a completed match record is also removed if it has no remaining participants.
-
Sessions: short-lived, normally one hour, unless revoked sooner.
-
Recovery credentials: until replaced, revoked, or deleted. A recovery code remains until used, revoked, or deleted.
-
Lobby snapshots: normally expire within two hours.
-
Live race snapshots: expire after the race and its short reconnect/finish window; a hard race timeout is normally five minutes.
-
Railway logs: retained according to the active hosting plan, normally between 7 and 90 days.
-
Firebase Analytics: retained according to the Firebase project retention setting; user-level event data is configured to be kept for no longer than 14 months, while aggregated reports may remain longer.
-
Firebase Crashlytics: Google retains crash traces and associated installation identifiers for 90 days before beginning deletion from live and backup systems.
-
Google Play and RevenueCat purchase records: retained under their transaction, fraud-prevention, accounting, tax, and legal requirements.
-
Google Mobile Ads and UMP: ad-service data is retained under Google's terms and retention practices; local consent and ad-frequency state remain on the device until App data is cleared or the App is uninstalled.
-
Database backups: deleted records may remain in restricted backups until the relevant backup expires or is overwritten, normally no longer than 90 days, and are not restored to ordinary service except for disaster recovery.
11. Security¶ ↑
We use measures intended to protect information, including:
-
HTTPS/TLS and secure WebSockets; release builds reject cleartext traffic;
-
Android Keystore AES-GCM encryption for the local recovery credential;
-
keyed cryptographic hashes for recovery secrets, recovery codes, and session secrets on the server;
-
rate limits and server-side validation for online actions;
-
restricted database access and managed hosting controls; and
-
logging rules that exclude credentials and request bodies.
No system can guarantee absolute security. Keep recovery codes private and contact us promptly if you believe your player identity has been compromised.
12. Your rights¶ ↑
Depending on where you live, you may have rights to:
-
access a copy of your personal data;
-
correct inaccurate data;
-
delete data;
-
restrict processing;
-
receive portable data;
-
object to legitimate-interest processing;
-
withdraw consent without affecting earlier lawful processing; and
-
complain to a data-protection or consumer authority.
We do not sell personal information or share it for cross-context behavioural advertising. This applies equally to requests under California privacy law.
To exercise a right, email hearthside.support@gmail.com. Include your public player ID and enough information to verify control of the anonymous identity. Do not send your recovery secret in ordinary email unless support specifically provides a secure verification method.
We normally respond within 30 days. We may need more time where permitted by law and will explain the delay. If we cannot reliably connect a request to an anonymous identity, we may be unable to provide or alter that record.
EEA users may find their supervisory authority through the European Data Protection Board: www.edpb.europa.eu/about-edpb/about-edpb/members_en. UK users may contact the Information Commissioner's Office: ico.org.uk/.
13. Account and data deletion¶ ↑
Delete inside the App¶ ↑
Open Settings, choose Delete Account, confirm the warning, and complete the deletion. The App requests deletion of the backend player record and then clears the local player economy and stored recovery credential.
This permanently removes from active backend systems:
-
the anonymous player identity, nickname, public profile, and sessions;
-
the private progress snapshot, balances, and owned item IDs;
-
recovery credentials and recovery codes;
-
your match-participation rows; and
-
live snapshots that contain your player identity.
Deletion is irreversible. Progress, balances, claimed rewards, and cosmetic ownership cannot be recovered after the relevant copies and backups expire.
Request deletion outside the App¶ ↑
Use the account-deletion link in the App's Google Play listing or email hearthside.support@gmail.com with the subject Account deletion request. Include your public player ID and any information reasonably needed to verify control. We will complete a valid request within the period required by applicable law.
Information not automatically removed with the player account¶ ↑
-
Deleting the player account does not cancel an active Google Play subscription. Cancel it separately in Google Play.
-
Google Play and RevenueCat may retain transaction and entitlement records under their own legal obligations. An active Premium entitlement can remain available or be restored independently of the deleted gameplay profile.
-
Analytics data is not linked to the player account. Account deletion does not automatically identify or erase aggregate Analytics records.
-
Existing Crashlytics reports can contain the former public player ID until their retention period expires. Contact us if you want us to evaluate a separate deletion request for identifiable crash reports.
-
Deleted records can remain temporarily in restricted disaster-recovery backups as described in Section 10.
Uninstalling the App alone does not delete the backend player account and does not cancel a subscription.
14. Your controls¶ ↑
-
Usage Analytics in consent regions: first-launch choice and Settings > Privacy > Usage Analytics.
-
Ad privacy choices: Settings > Ad privacy choices when Google requires that control for the device or region.
-
Daily reminders: App Settings and Android notification settings.
-
Vibration, music, and sound effects: App Settings.
-
Google backup and device transfer: Android and Google account settings.
-
Subscription: Google Play > Payments & subscriptions > Subscriptions.
-
Public appearance: Profile screen.
-
Player account deletion: Settings > Delete Account.
15. Changes to this policy¶ ↑
We may update this policy when the App, providers, or law changes. We will change the date at the top. For a material change, we will provide an appropriate in-App or store-listing notice and request consent again where required.
16. Contact¶ ↑
Data controller: the individual developer publishing WPM Arena under the Google Play developer name Hearthside, based in Ukraine. The verified legal identity and contact address appear in the App's Google Play listing.
Email: hearthside.support@gmail.com
For a faster response, use a subject such as Privacy request, Data access request, or Account deletion request and include your public player ID where relevant.
WPM Arena is an independent game. Google Play, Android, Firebase, and RevenueCat are trademarks of their respective owners.