Privacy Policy
App: Ludo Titans (Android)
Effective date: 11 October 2026
Last updated: 26 October 2026
1. Who we are
Ludo Titans is published by Ratio Games, Mangaluru, Karnataka, India. Contact for privacy questions: support@dealcoast.in. Website: https://ludo.beyondthree.in. Grievance officer and data protection contact: Ashitosh, Resident Grievance Officer, grievance@dealcoast.in.
2. Short version
- Offline play (against the computer, pass and play on one device, and the practice cup against computer players) works without an account. Your game data stays on your device. Apart from usage and diagnostic events (see the points below), it sends us nothing.
- Online play (quick match, private rooms, friends, clubs, tournaments, leaderboards, chat) is for players aged 13 and over and needs an account on our backend. Players who say they are under 13, who prefer not to say, or who have not yet answered the age question get offline play only: the app makes no request to our backend for them and sends no usage events. The age answer is a self-declaration kept on your device; we do not verify it.
- For online play you can use a guest account (display name only, no email) or an account with an email address and password, or Google sign-in. If you use email or Google, we receive and store your email address.
- For online play we also store your game progress and results, your friends, your club, your friend messages, your chat in rooms and clubs, and reports you file. While a match runs, its state is kept in our database.
- Usage events and crash or error events are sent by default for players aged 13 and over, and you can switch them off in Settings, Data and privacy (section 3.2). They carry a random install ID, so they are pseudonymous rather than anonymous. If you are signed in they are also stored with your account ID, so they are linked to your account and deleted when you delete it. They are kept 90 days.
- The app contains Google's advertising library (AdMob) and Google Play billing software. It requests and shows optional rewarded ads only to players aged 13 and over who allow them (section 3.5). Purchases are for players aged 13 and over.
- Our backend runs on Supabase, with the database in Mumbai, India. Account emails are sent through Resend. Google provides sign-in, ads and Play billing. The website is hosted by Cloudflare (section 5).
- You can export your online data and permanently delete your online account inside the app (Settings, Account). There is also a web page and an email route for deletion requests.
- We do not sell your data and we do not use it for profiling.
3. Data we process
3.1 Stored only on your device
Saved in the app's private storage. We never receive it unless a later section says it is sent.
- Display name and avatar choice.
- Progress: XP, level, coins, gems, missions, daily rewards, achievements, season and ranked progress, cosmetics owned, match history, and offline club and tournament data.
- Settings: language, theme, text size, contrast, haptics, sound, notification and friend-request preferences, chat and emote muting, quick-chat-only, and the analytics switch.
- Age group: the band you pick on first launch (under 13, 13 to 17, 18 or older, or prefer not to say). Only the band is stored, never a birth date. It is a self-declaration that we do not verify. It is not sent to our backend. You can change it in Settings, Ads and privacy.
- Store data: items you own, ad counters, and records of your purchases (product, purchase token, order state) kept on your device. When a purchase completes, the app also sends the purchase token and product ID to our backend (section 3.2).
- Signed-in session: the session and sign-in tokens issued by our authentication service (Supabase Auth) are kept in the Android Keystore where the phone supports it (otherwise in private app storage) so you stay signed in. A guest account is also a session on your phone: if you clear the app's data or uninstall, a guest account that was not secured with email or Google cannot be recovered. The app also keeps your email address, whether it is verified, and whether Google is linked, in private app storage.
- A random install ID, created when analytics first runs (section 3.2). It is not your Android advertising ID, not a hardware ID and not linked to your email. It is reset if you clear app data or reinstall.
- Blocked-player list, a queue of reports not yet delivered (it can contain the reported chat text), a queue of usage events not yet sent, and a cache of the game settings downloaded from our backend.
- Diagnostics log: the last 60 technical problems (error type, a short message with tokens, passwords and secrets removed, a short stack trace, the time). The removal is pattern based and may miss other text such as an email address that appears inside an error message. It stays on your device unless you open Settings, Diagnostics, choose Share or Copy and send it yourself. You can clear it at any time. The same kind of error can also be sent as a crash event if analytics is on (section 3.2).
3.2 Sent to and stored on our backend (online play)
This section applies only to players who chose 13 to 17 or 18 or older. For players who chose under 13 or prefer not to say, and before an age group is chosen, the app sends nothing to our backend: no account, no chat, no friends, clubs, tournaments or leaderboards, no usage events and no request for the game settings. A player who signed in with an earlier version and then chooses under 13 or prefer not to say keeps the account unchanged (we do not delete it automatically) but cannot use online features; it can be deleted through the web page or by emailing us (section 9).
- Sign-in data (Supabase Auth): a user ID for every account, including guests. For email accounts: your email address, a hash of your password (never the password itself, held by Supabase Auth), whether you confirmed the email, and the related times. For Google sign-in: your Google account identifier (the subject) and the email address Google reports. We never receive your Google password. Also the creation time, last sign-in time, and your sessions and refresh tokens. Google processes the sign-in itself under its own privacy policy.
- Profile: display name (2 to 20 letters, digits, space, underscore or hyphen), country code (2 letters, taken from your phone's language and region setting, not from GPS; used for country leaderboards), friend-request preference, chat-mute time and creation time. Other players can see your display name in friend search, rooms, clubs, tournaments and leaderboards. Do not use your real name if you do not want it shown.
- Game stats calculated by the backend: XP, coins, gems, rating, wins, matches played. Rating and name appear on leaderboards. A ledger of coin, gem and XP changes with the reason, and your daily mission progress.
- Last-seen time: updated when you make requests, at most about every 30 seconds. A player counts as online if seen in the last 2 minutes, and friends can see that. It is also used to decide when an unused guest account can be removed (section 6). It is not included in your export.
- Matches: room code, mode, number of players, start and end time, winner, per-seat display name; per player: placement, XP and coins awarded, rating before and after, and whether the seat was a computer player. The state of a running match, and a move-by-move replay log of finished matches, are stored in our database. Tournament entries (with your display name at the time), placement, entry fee and prizes.
- Friends, friend requests, your friend-request preference and your block list. Blocking removes any friendship and pending requests.
- Clubs: membership, your XP contributions, any removal from a club, and clubs you created (club name and description are visible to others).
- Messages: direct messages between accepted friends (text, sender, recipient, time, read time; up to 200 per pair, older ones are deleted). Room and club chat lines are stored too. Messages are not encrypted end to end. They are not served once either friend blocks the other or the friendship ends, but they are kept so they can still be reported.
- Reports you send (section 3.3). Bans and chat mutes applied by moderators or by an automatic rule, with reason, time, expiry and who applied them. An audit entry (who, what action, which account ID, no message text) is written for each admin and automatic moderation action.
- Ads: when you watch a rewarded ad, a ticket (placement and times) and the verified reward record (Google's transaction ID, ad unit, reward item and amount, time) linked to your account.
- Purchases: when a real-money purchase completes, the app sends the purchase token and product ID to our backend, which confirms it with Google Play before crediting it. We store the product ID, the purchase token, the order ID, the time and whether the purchase was later refunded or revoked, linked to your account, so the same purchase cannot be credited twice. Gift vouchers are not available in this version; if gift codes are added we will update this policy first.
- Usage and diagnostic events (analytics): sent by default; you can switch them off in Settings, Data and privacy ("Share usage and diagnostic data"). Each event has an event name from a fixed list, a random install ID, the time, and a few allowed details. The kinds of events are: app opens, match started, finished or abandoned, rewards claimed, missions completed, purchases started and completed, ad events (an ad watched or failed), the prompt that asks you to verify your email, and crashes or errors. The allowed details are things like the app version, game mode, number of players, outcome, duration, and a mission or product ID. They never include your name, email, chat text, room codes or match IDs. A crash or error event carries a short error message with tokens, emails and long secrets removed by pattern, which may miss some text. When you are signed in, the events are also stored with your account ID, so they are linked to your account and are deleted when you delete it; events sent before you sign in carry only the install ID. They are kept 90 days. Nothing is sent for players under 13, players who prefer not to say, players who have not answered the age question, or players who switched analytics off; switching it off also discards events that were not yet sent.
- Push notification tokens: push notifications are off until you turn them on (Settings, Notifications, or when the app offers it after your first match). If you do, and Android allows the app to show notifications, the app asks Google Firebase Cloud Messaging for a device token and sends it to our backend, which stores it with the platform, app version and times. We use it only to tell you that a friend sent you a message or a friend request, or that a tournament is about to start. A notification never contains message text; it may name the friend if that option is on. Players under 13 and players who preferred not to say their age never register a device. Turning notifications off, signing out or deleting your account removes the token.
- Game settings request: the app fetches the public game configuration (balance values, maintenance notice, minimum app version) from our backend. The request carries no account data, but any request reveals your IP address to the service.
- Technical data: your IP address and request details are seen by Supabase and its network for every request, and by Supabase Auth for sign-in attempts, and may be kept in their platform logs under their own settings. Our own tables keep rate-limit counters keyed by account ID or a function-specific key for at most 2 days. We do not use IP addresses for advertising or profiling.
We do not collect: phone number, real name, contacts, photos, files, microphone, camera, GPS location or payment card details. We do not send your advertising ID to our backend. Our backend does not know your age group.
3.3 Chat, emotes and reports
- Text chat exists in private rooms (rooms created with a code), in club chat and between friends (direct messages). There is no text chat in public quick-match games. Quick chat phrases and emotes are short preset reactions.
- Messages are limited to 200 characters, rate limited, passed through a word filter, and not delivered to players who blocked the sender. You can also mute chat in Settings. Online chat is available only to players who chose 13 to 17 or 18 or older; the app enforces this on the device and our backend does not check your age.
- Room and club chat lines and direct messages are stored in our database and kept for the periods in section 6 (room and club chat is kept for a shorter time than direct messages).
- If you report a player and attach a chat message (room, club or direct message), the backend saves a copy of that message text, your report reason (3 to 500 characters), optional context you provide (up to 500 characters), your account ID and the reported account ID, so moderators can review it.
- Moderators and the people who run the service can read reports, the message copies in them, and, with database access, any stored data including email addresses and direct messages. Only the publisher can reach the database and the moderation tools, and access needs a secret key.
3.4 Moderation and safety data
- Reports, bans and chat mutes are kept for safety review. Account IDs, not names, are what the audit trail records.
- Rewards are capped for repeated matches between the same accounts, and rate limits apply to sign-in, search, invites, chat, exports, deletions and game actions. These use account IDs or function-specific keys.
- Guest accounts cannot join tournaments; a tournament needs an account secured with email or Google. Other players see a limited public profile of you only if you are friends or have a pending friend request or block with them; otherwise they can find you only by searching your exact display name.
3.5 Ads and purchases
- The app contains Google's advertising library (Google Mobile Ads, AdMob) and the Google Play billing library. The app manifest declares the Android advertising-ID permission (it comes from the Google library). Google's library also starts a small component when the app process starts. We have not verified what that component does, so we do not describe it here beyond this: the app contains Google's advertising library, and the app requests and shows ads only as described below.
- When ads start: the ad library is started, and ads are requested, only when ads are switched on in the build you installed, AND you chose the 13 to 17 or 18 or older age group, AND the consent rules allow ads. For players who chose under 13 or prefer not to say, and before an age group is chosen, the ad library is never started, no ad is requested and the consent form is never shown. If you later change your age group to one of those, ads stop.
- What ads are: optional rewarded ads, shown only if you choose to watch one, never during a match. They are served by Google AdMob. Where the law requires it, the app shows Google's consent form first. When you finish a rewarded ad, Google sends our backend a signed confirmation (transaction ID, ad unit and the ticket we issued) so we can verify the reward before granting it.
- Teens (13 to 17): non-personalised ads only, a maximum ad content rating of Teen, and requests are marked as coming from a user under the age of consent. Adults: the content rating cap is also Teen. These settings follow the age group you declared; we cannot verify it.
- What Google receives: when ads run, Google AdMob may collect and use your advertising ID, device and app information, your IP address (including an approximate location derived from it), how you interact with ads, and crash and diagnostic data, under Google's own privacy policy. We do not receive what Google collects.
- Purchases are for players aged 13 and over: the purchase buttons are switched off for players who chose under 13 or prefer not to say, and before an age group is chosen. Purchases are processed by Google Play. We do not receive your card details. Our backend checks the purchase with Google Play and later checks for refunded purchases; what we store is described in section 3.2. The products are coin packs, a starter bundle, a season pass and a one-time ad-free purchase.
4. Why we use data
- Run the game: accounts, sign-in, matchmaking, rooms, turn handling, keeping a running match, rewards, ratings, leaderboards, tournaments, clubs.
- Account services: email confirmation, password reset, account security.
- Social features: friends, invites, chat, blocking.
- Safety: reports, moderation, mutes, bans, rate limiting, abuse prevention.
- Security and reliability of the service.
- Remote settings: balance values, maintenance notice, minimum supported app version.
- Ads and purchases, where enabled and allowed for your age group: showing rewarded ads you choose to watch, verifying rewards and purchases, preventing double credit, and delivering what you buy.
- Understanding how the app is used and fixing bugs: the usage and crash events (section 3.2).
We do not sell your data. We do not use it for profiling. Where the law requires a legal basis, we rely on: running the game and your account (contract); keeping players safe and the service secure, and understanding use of the app and fixing errors (legitimate interests, with an opt-out in Settings); and showing ads where required (your consent).
5. Sharing
- Hosting and backend: our database, sign-in service (Supabase Auth), server functions and realtime connections run at Supabase. The database is in Mumbai, India (region ap-south-1). Supabase processes data on our behalf.
- Email delivery: account confirmation and password-reset emails are sent through Resend, which sees the recipient email address and the message (including the link or code). Its sending region is Tokyo (ap-northeast-1).
- Google: sign-in (if you use it), AdMob ads (section 3.5), Google Play billing and purchase checks, and, only if you turn notifications on, Firebase Cloud Messaging.
- Website: the pages at ludo.beyondthree.in (this policy, the terms, support and account deletion, and the page that email links open) are served by Cloudflare, which may keep ordinary web request logs.
- Other players can see: your display name, rating, country (on leaderboards), online status (to friends), your club, club name and description, and your in-room chat, club chat and emotes. Friends can read your direct messages to them.
- Share sheet: if you tap Share (result card, Export my data, or a diagnostics log), the app hands a picture or text to the Android share sheet. You choose the destination. We do not receive it.
- Legal: we may disclose data if required by law or to protect users.
- We do not share personal data with data brokers. We do not use a separate analytics or crash-reporting company: usage and crash events are stored in our own Supabase database.
6. Retention
- Local data on your device: until you clear app storage, delete your account in the app, or uninstall.
- The backend has an automatic clean-up job that runs daily and applies the periods below. The periods are settings we can change; these are the current ones.
- Direct messages: 90 days. A message that an open report points at, and messages from a player who is currently banned or muted, are kept longer.
- Room and club chat: 7 days (same exceptions).
- Resolved or dismissed reports: 180 days after they are closed. Open reports are kept.
- Match results and match records: 90 days, but never those inside the current season or the last 8 days. The replay log of a finished match: 14 days. Finished or closed rooms: 7 days. Your rating, wins, XP and leaderboard standing are stored on your account and kept until you delete it.
- Gift vouchers never redeemed (if any exist): 90 days after they expire.
- Guest accounts that never played, have no purchases, recent messages or reports, and no email or Google sign-in: 365 days after last activity, including the sign-in record.
- Admin and moderation audit entries: 365 days.
- Usage and crash events: 90 days.
- Push device tokens: disabled tokens 30 days, unused tokens 90 days.
- Rate-limit counters: 2 days.
- Accounts with an email address or Google sign-in, bans, wallet ledger, missions, ad reward records, purchase records and club contributions: kept until you delete the account (no inactivity deletion). Purchase tokens are then kept without a link to you (section 9).
- Sign-in sessions, refresh tokens and sign-in logs: handled by Supabase Auth under its own settings.
- Platform logs and backups: our hosting provider keeps platform logs for a limited time under its own settings; they can hold IP addresses and account IDs. It also keeps automatic backups under its own schedule. Data you delete can remain in a backup until that backup expires.
7. Security
- All traffic uses HTTPS or secure websockets. Release builds of the app block plain-HTTP traffic and trust only the system certificate store.
- Row-level access rules on our database tables, so a signed-in player can read and change only what the rules allow. The backend decides dice rolls, turns and results, so clients cannot set their own rewards.
- Passwords are hashed by Supabase Auth and never stored or logged in clear. Access tokens are short-lived and renewed with a refresh token. Banned or deleted players are rejected on every request.
- Rate limits on sign-in, API calls, friend requests, search, invites, chat, exports, deletions and game actions; request size limits.
- Ad rewards and purchases are verified on the backend with Google. Secrets are kept in Supabase's secret storage and function secrets.
- Admin actions are written to an audit log; admin access needs a key.
- On the device the session is in the Android Keystore where available, and cloud and device-to-device backup of app data is disabled.
Known limits: room codes are 8 characters and wrong guesses are rate limited, but a code can still be guessed by a determined attacker; extra protections such as CAPTCHA and multi-factor sign-in for staff accounts are not all switched on; on a phone without a working Keystore the app falls back to private app storage; if the app's data is cleared, a guest account cannot be recovered, so secure it with email or Google if you want to keep it; deleting an account needs only a valid sign-in and a typed confirmation, not the password again; direct messages are stored readable by the service; no system is perfectly secure.
8. Children
- Ludo Titans is intended for players aged 13 and over. On first launch it asks for an age group (under 13, 13 to 17, 18 or older, or prefer not to say) and offers no preselected answer. Only the group is stored, on the device. It is a self-declaration. The app does not verify it, so a child could answer wrongly. You can change the answer in Settings, Ads and privacy.
- Under 13, prefer not to say, and before an answer is given: offline play only (against the computer, pass and play on one device, and the practice cup). For these players the app makes no request to our backend at all (no account, chat, friends, clubs, tournaments, leaderboards, usage events or game-settings request), shows no ads, never starts the ad library, never shows a consent form, and does not allow purchases. Their game data stays on the device.
- 13 to 17: online features, usage events (unless switched off), optional rewarded ads only after the consent rules allow them and always non-personalised, and purchases.
- 18 or older: online features, usage events (unless switched off), optional rewarded ads after the consent rules allow them, and purchases.
- Online features are therefore not available to a player who declares an age under 13, but because the age is self-declared and unverified, a younger child who answers wrongly could still use them. Ludo Titans is not meant for children under 13.
- A player who signed in with an earlier version and then chooses under 13 or prefer not to say keeps their account untouched (nothing is deleted or sent), but cannot use online features. A parent or guardian can email us to have such an account deleted.
- If you believe a child under 13 has given us data, contact support@dealcoast.in and we will delete it.
9. Your rights and choices
- Offline data: clear app storage or uninstall.
- Display name and settings: change them in the app. The display name is sent to the backend when you change it online.
- Friend requests: switch off in Settings. Block and report players from friends, rooms and the report sheet.
- Analytics events: switch off in Settings, Data and privacy. Nothing more is sent, and events not yet sent are discarded. Events already stored are deleted after 90 days or when you delete your account.
- Age group and ads: change the age group and review ad choices in Settings, Ads and privacy. Switching to under 13 or prefer not to say stops ads, usage events and online use.
- Notifications: the app has an in-app inbox and, only if you turn them on, push notifications. You can switch push off in Settings, Notifications, or in Android settings; switching it off in the app also removes this device's token from our backend.
- Access and export: Settings, Account, Export my data downloads a JSON file with your profile and settings, your sign-in records (email, providers and times, never the password hash or tokens), match results and matches, your wallet ledger and missions, ad rewards, friends and requests, blocks, club membership and contributions, reports you filed and reports about you (never who reported you), bans, direct messages you sent and received, room and club chat lines, vouchers, purchases (the purchase token shown only as a short reference), tournament entries and prizes, how many push devices are registered (never tokens), and up to 5000 of your analytics events. You can export up to 3 times per hour.
- Deletion: Settings, Account, Delete my account permanently deletes your online account and the progress on this device after you type a confirmation word. It is immediate and cannot be undone, and you can do it up to 3 times per hour. It removes: your profile (display name, country, XP, coins, gems, rating, wins, settings, last-seen time); your sign-in data (email address, password hash, linked Google identity and sessions); friends, friend requests and blocks; direct messages you sent and received and room and club chat lines you wrote; match results, wallet ledger, missions, ad reward records, club contributions and club removal records; your place in lobbies and the matchmaking queue; tournament registrations (the entry fee is refunded if the tournament had not started) and your tournament prize records; vouchers you issued; reports about you, bans and mutes; push device tokens; analytics events linked to your account and events from any app install that ever carried your account ID (this can also remove events of another account that used the same phone); and rate-limit counters for your account. Matches that are running are marked forfeited for your seat, and your name in them becomes "Deleted player". If you lead a club, leadership passes to its longest-standing member, or the club is dissolved with its chat if you were the last member. Your sessions end immediately.
- What deletion does not remove: reports you filed about other players stay for moderation but no longer point to you and their free-text context is cleared (the copy of the reported message stays as evidence); the purchase token and product ID of your purchases stay without any link to you, so the same purchase cannot be claimed again; vouchers you redeemed stay as records without your id; match records keep room code, mode and times (their winner link to you is cleared), and other players' results from the same matches stay and may show your name as "Deleted player"; tournament entries stay in the bracket as "Deleted player"; an audit entry that your account was deleted, and earlier admin or moderation audit entries that mention your account ID, stay until their retention period ends (section 6); logs and backups (section 6); data we must keep by law or to handle a legal claim. Google keeps what it holds under its own policies (sign-in, ads, Play), and you can manage that in your Google account.
- If you cannot use the app: email support@dealcoast.in and we will delete your account or send a copy within 30 days after confirming it is yours (we may ask you to write from the email address on the account, or to send details of the account). A guest account that was never secured with email or Google cannot be proven to be yours from outside the app, so use the in-app deletion if you still have the app. The public page for deletion requests is at https://ludo.beyondthree.in/delete-account.
- Depending on where you live you may have rights to access, correct, delete, restrict, object, port, withdraw consent and complain to a regulator. To use these rights, email us at the address above. We will answer within the time the law requires.
10. International transfers
Our database, sign-in service and server functions run at Supabase in Mumbai, India (ap-south-1). Supabase also uses a global network to serve requests. Account emails go through Resend, with its sending region in Tokyo. Our website host (Cloudflare) and the Google services used by the app (sign-in, billing, and ads where they run) may process data in other countries, which can include India, Japan, Singapore and the United States. Your data may therefore be processed outside the country where you live. Our providers apply their own safeguards for transfers.
11. Third parties and software components
The app contains: Flutter, http, supabase_flutter (connection to our Supabase backend: sign-in, database requests and realtime), shared_preferences (local storage), flutter_secure_storage (Android Keystore), connectivity_plus (reads whether the phone has a network; sends nothing), url_launcher (opens the store page when an update is required, and links), share_plus (system share sheet), audioplayers (local sound), google_sign_in (Google sign-in, section 3.2), google_mobile_ads (Google AdMob, section 3.5) in_app_purchase (Google Play billing, section 3.5), firebase_core and firebase_messaging (Google Firebase Cloud Messaging for push notifications, used only if you turn notifications on) and flutter_local_notifications (shows a notification on your phone). When ads run, Google's library may collect diagnostic data for Google (section 3.5). No separate analytics or crash-reporting company's software is included.
12. Changes
We will post changes here and update the date. For material changes we will tell you in the app.
13. Contact
Ratio Games, Mangaluru, Karnataka, India. Email: support@dealcoast.in. Web: https://ludo.beyondthree.in. Grievance officer: Ashitosh, Resident Grievance Officer, grievance@dealcoast.in (Mangaluru, Karnataka, India). Complaints are acknowledged within 24 hours and resolved within 15 days.