Moonlet Labs games
Privacy policy for games
The short version
- The games need no account or sign-in, and with online features off we run no servers that store your data. Your puzzles, boards, notes, progress and stats stay on your phone and in your Android backup; every puzzle and board, the daily one included, is made on your phone or comes from a set built into the app.
- Online features are optional and off until you turn them on. They add a nickname, your daily puzzle times, friends and, if you turn them on, notifications, stored on a server we run on Cloudflare, and an optional Google sign-in. You can delete all of it in the game (Settings → Online → Delete my online data) or at games/delete.html. See Online features.
- The apps send crash reports and usage statistics to Google Firebase, and fetch app settings from it. This data is linked to pseudonymous identifiers that Firebase creates for the app on your phone, not to your name or email. Data protection law still treats it as personal data, and so do we.
- The apps show ads from Google AdMob. Google may use your advertising ID and IP address to show and measure ads, and to personalise them if you allow it.
- In the EEA, the UK and Switzerland, the app asks for your consent first. Analytics, crash reports and personalised ads run only if you agree.
- Elsewhere, analytics and crash reports run by default. You can turn usage statistics off in Settings → Privacy, and in US states where Google's US state privacy message applies you can opt out of personalised ads there too.
- We advertise our own apps with Google Ads. When usage statistics are on (and, in the EEA, the UK and Switzerland, only if you consent), Google Ads learns that the app was installed and when you finish a job with it, so we can tell which of our campaigns work.
- "Remove ads" is a one-time purchase made through Google Play. Google Play processes the payment; the game keeps only the fact that ads are removed, on your phone.
Contents
- What we collect and why
- Legal bases (EEA, UK and Switzerland)
- What stays on your phone, and app permissions
- Ennead: Sudoku Puzzles
- Dowse: Minesweeper Puzzles
- Stellate: Star Battle Puzzles
- Advertising
- Purchases
- Online features
- Consent and your choices
- Who receives your data
- International transfers
- How long data is kept
- Your rights
- US state privacy rights
- Children
- Our website
- Security
- Online features: terms
- Changes to this policy
- Contact
- Google Play Data safety summary
What we collect and why
With online features off, we have no servers that the games talk to (with them on, see Online features). The games use Google services, described below, and those services are where data about your use of the games ends up. None of them receives your name, email address, contacts, photos, files or precise location; the games never ask for them. Every connection to Google is encrypted (TLS), and Google receives your IP address whenever the game connects.
Crash reports (Firebase Crashlytics)
- What: when a game crashes, a report with the stack trace, app version, device model, Android version, the device's state at the time (for example free memory and disk space, orientation and whether the device is rooted), a Crashlytics installation identifier and the Firebase installation ID.
- Not included: your puzzles, your numbers, notes or settings, or your location.
- Why: to find and fix faults.
- When: in the EEA, the UK and Switzerland, only if you consent in the consent form. Elsewhere, crash reports are sent by default, based on our legitimate interest in keeping the apps working; there is no in-app switch for them.
Usage statistics (Google Analytics for Firebase)
- What: events such as app opens, sessions and their length, screens viewed, app updates, and each game's own events. Ennead's: when a puzzle starts, is solved or is left unfinished, with its level and where it came from (a puzzle you started, today's puzzle or a past day's); for a solved puzzle, rough ranges of the time it took, the hints you used and the mistakes you made (for example "5 to 15 minutes" or "2 or 3 hints", never the exact figure); for a puzzle left unfinished, a rough share of its empty squares that were filled (under a quarter, a quarter to three quarters, or over three quarters) and why it was left (a new puzzle replaced it, you started it over, or a past daily puzzle dropped out of the recent days); and for a daily puzzle, a rough range of your run of solved days and whether you used hints; when a hint or a "where to look" nudge is shown, and which kind; how a hint offer ended (you watched the ad, closed it early, said no, or took the free nudge); whether a full-screen ad was due after a solved puzzle, and whether it showed; the steps of the daily reminder and of the Remove ads purchase; the first time in a session you use a feature such as notes, the keyboard or a board theme; and a few settings kept as properties of the installation (the last level you started, the board, the number pad, whether ads are removed and whether the reminder is on). They never include the puzzles, your numbers, your notes, where you placed anything, exact times or counts, dates, or anything you type. Dowse's: when a board starts, is solved or is left unfinished, with its level and where it came from (a new board, today's board or a past day's); for a solved board, rough ranges of the time it took, the hints you used and the slips you made (for example "2 or 3 slips"), and whether a mine ended it in Classic; for a board left unfinished, a rough share of its safe squares that were open (the same three ranges) and why it was left (the same reasons, or Classic's New board after a mine); for a daily board, a rough range of your run of solved days and whether you used hints; when a new board is made on your phone, its level, a rough range of how long that took and whether it was made under relaxed rules; when you open a mine, the level, whether it was a slip or ended the board in Classic, and whether it came from a tap, a chord or a hold; what you chose after a Classic ending (take it back or a new board); hint and "where to look" use, hint offers, full-screen ads, the daily reminder and the Remove ads purchase as for Ennead; the first time in a session you use a feature such as Flag mode, the keyboard, zoom or a board theme; and as properties of the installation, the last level you started, the board, the board size, whether Classic is on, whether ads are removed and whether the reminder is on. They never include the boards, where the mines are, the squares you opened or flagged, exact times or counts, dates, or anything you type. Stellate's: when a puzzle starts, is solved or is left unfinished, with its level and where it came from (a new puzzle, today's puzzle or a past day's); for a solved puzzle, rough ranges of the time it took and the hints you used (for example "5 to 15 minutes" or "2 or 3 hints"); for a puzzle left unfinished, a rough share of its stars that were placed (under a quarter, a quarter to three quarters, or over three quarters) and why it was left (a new puzzle replaced it, you started it over, or a past daily puzzle dropped out of the recent days); for a daily puzzle, a rough range of your run of solved days and whether you used hints; hint and "where to look" use, hint offers, full-screen ads, the daily reminder and the Remove ads purchase as for Ennead; the first time in a session you use a feature such as the Star / Dot toggle, dragging across squares, Show conflicts, turning Auto-dot off, the keyboard, zoom or a board theme; and as properties of the installation, the last level you started, the board, whether ads are removed and whether the reminder is on. They never include the puzzles, the stars or dots you placed, exact times or counts, dates, or anything you type. In every game, also when you solve a puzzle (only that a puzzle was solved, never which one); and whether consent was given. Each event carries the app-instance ID (a random identifier for this installation of the app), app and Android version, device model and brand, language, the install source reported by Google Play, and the country, region and city derived from your IP address. Google does not store the IP address itself in Analytics.
- Advertising ID: Analytics reads your advertising ID only when ad measurement is allowed (see "Shared with Google Ads" below), and never for personalised ads.
- Why: to see which features people use and decide what to improve; and to measure which of our own Google Ads campaigns lead to installs and to people using the app, so we spend on the ones that work.
- Shared with Google Ads: two events, the app's first open (
first_open) and finishing a job with a tool (task_completed, with only which tool), together with the app-instance ID and your advertising ID that Google Ads needs to tell which of our ads, if any, led to them. We see only totals per campaign. This data is not used for personalised ads or to build advertising audiences. - When: in the EEA, the UK and Switzerland, only if you consent: to usage statistics for the statistics, and additionally to "Measure advertising performance" for us and for Google in the consent form for the Google Ads part. Elsewhere, by default, based on our legitimate interest in understanding which features are used and in measuring our own advertising; in US states where Google's US state privacy message applies, opting out there also stops the Google Ads part. "Share usage statistics" in Settings → Privacy turns both off at any time.
App configuration and experiments (Firebase Remote Config and A/B Testing)
- What: the game fetches configuration from Firebase, such as how often full-screen ads may appear, the hint and ad limits below, and switches that turn a feature or ads off if something goes wrong. To do this it sends the Firebase installation ID and basic app and device information (app version, Android version, language and time zone).
- Experiments: some players may get slightly different limits for a while, so we can see which keeps the game fair and pleasant, always within fixed bounds: 3 to 5 hints a day from ads, no full-screen ad before 3 to 6 solved puzzles, 1 or 2 free hints per puzzle, and the reminder offered after 3 to 7 solved daily puzzles. The daily puzzle is never part of an experiment: it is the same for everyone.
- Why: to operate the games, control ad frequency and tune these limits without shipping an update.
- When: after the consent step on launch has finished, whatever you chose there, and then from time to time while the app is in use.
Consent check (Google User Messaging Platform)
Each time an app starts, it asks Google's consent service whether a consent or privacy message applies where you are, and stores your answers on your phone. Google receives your IP address and basic device information for this. See Consent and your choices.
Advertising (Google AdMob)
The ads SDK collects data for Google, which uses it as an independent controller. See Advertising.
Purchases (Google Play)
The Remove ads purchase is made through Google Play, which receives your payment details under its own terms. The Google Play Billing library in the game also sends its own diagnostic logs to Google. See Purchases.
Support email
If you email us, we receive your email address, your message and anything you choose to include (such as your phone model). We use it only to answer you. We keep the thread for as long as we need it to resolve your request, then delete it no later than 12 months after the request is resolved.
Website
Visiting moonletlabs.com sends your IP address to our host and to Google Fonts. See Our website.
Things we do not do
We do not sell your personal data for money or build profiles of you (Google may, for personalised ads, as described under Advertising), and we do not make decisions about you by automated means that have legal or similarly significant effects. You are not required by law or by contract to give us any personal data; the apps work offline and without consent.
Legal bases (EEA, UK and Switzerland)
If you are in the EEA, the UK or Switzerland, these are the legal bases we rely on under the GDPR, the UK GDPR and the Swiss Federal Act on Data Protection, and for reading or storing information on your device under the ePrivacy rules and UK PECR.
| Purpose | Legal basis |
|---|---|
| Usage statistics (Analytics) | Your consent. You can withdraw it at any time; this does not affect processing before you withdrew. |
| Measuring our own Google Ads campaigns (Analytics events shared with Google Ads) | Your consent, given in the consent form ("Measure advertising performance"). You can withdraw it at any time in "Privacy options", or turn "Share usage statistics" off. |
| Crash reports (Crashlytics) | Your consent, as above. |
| Personalised ads (AdMob) | Your consent, given in the consent form. Google relies on its own legal bases as an independent controller. |
| Non-personalised and limited ads (AdMob) | As set out in Google's consent framework: your consent where Google's consent form requires it, and otherwise our legitimate interest in funding free apps with advertising. |
| App configuration (Remote Config) | Our legitimate interest in operating the apps, switching off faulty features and controlling how often ads appear. Remote Config is needed to deliver the apps as configured. |
| Consent check (User Messaging Platform) | Our legal obligation to ask for and record consent, and our legitimate interest in doing so reliably. |
| Support emails | Our legitimate interest in answering you, or steps you ask us to take. |
| Website logs | Our legitimate interest in delivering a secure website. |
| Keeping records the law requires, or responding to lawful requests | Legal obligation. |
You can object at any time to processing based on our legitimate interests by emailing support@moonletlabs.com. See Your rights.
What stays on your phone, and app permissions
Your puzzles, progress, stats and settings are stored in the game's private storage on your phone. We cannot see them. Uninstalling the game or clearing its storage deletes them from the phone.
Google Play rating prompt. Each game keeps a few counters with its settings: on how many days you used it, how many puzzles you solved, and when it last asked Google Play to show its rating prompt. They decide when the game may ask, at most once every 90 days; Google Play then decides whether the prompt appears. They never leave your phone (except in your own Android backup, with the settings). If you rate or review the game there, Google Play handles it under Google's terms, and the game is never told whether you did.
Android backup. If you have Android backup turned on, Android includes the game's puzzles, progress, stats and settings, and your "Share usage statistics" choice, in your own Google account backup and in a device-to-device transfer to a new phone. Google stores that backup under its own terms; Moonlet Labs cannot access it. A backup you made stays in your Google account until you delete it or Android lets it expire, which can be after you uninstall the game.
Never backed up. Firebase identifiers, your consent choices, queued crash reports and usage statistics, ad data, the count of hints you got from ads today, and the "ads removed" flag are never included in a backup or transfer. A reinstall or a new phone therefore starts with fresh Firebase identifiers, asks for consent again where consent is required, and checks a Remove ads purchase with Google Play again.
Permissions
| Permission | Games | Why |
|---|---|---|
| Internet access (INTERNET) | All | Ads, consent check, usage statistics, crash reports, app configuration, Google Play Billing's diagnostic logs and, if you turn them on, online features (our server on Cloudflare, Google sign-in and notifications). No puzzle needs it: every puzzle, the daily puzzle included, is made on the phone. |
| View network connections (ACCESS_NETWORK_STATE) | All | Added by the Google ads and Firebase SDKs, by the Google Play Billing library and by Android's background-task library, to check whether a connection is available before sending or loading. |
| Advertising ID (com.google.android.gms.permission.AD_ID) | All | Added by the Google ads and Analytics SDKs, so AdMob can read your advertising ID, and Analytics can read it for measuring our own Google Ads campaigns when that is allowed (see Usage statistics). |
| Prevent phone from sleeping (WAKE_LOCK) | All | Added by the Google Analytics and Firebase Cloud Messaging SDKs and by Android's background-task library, to finish sending queued data or background work, such as the games' daily reminder. |
| Foreground service (FOREGROUND_SERVICE) | All | Declared by Android's background-task library, which the Google SDKs and the games' daily reminder use. The games run no foreground service of their own. |
| Run at startup (RECEIVE_BOOT_COMPLETED) | All | Declared by Android's background-task library, to reschedule queued background work after the phone restarts, such as the games' daily reminder. The Google ads SDK asks Android to drop this permission, so builds with ads, such as the released games, do not request it. |
| Android ad services (ACCESS_ADSERVICES_AD_ID, ACCESS_ADSERVICES_ATTRIBUTION, ACCESS_ADSERVICES_TOPICS) | All | Added by the Google ads and Analytics SDKs, so they can use Android's privacy-preserving advertising APIs (ad ID, ad attribution and interest topics computed on the phone) where your phone offers them and you have not turned them off in Android's ad privacy settings. |
| Control vibration (VIBRATE) | Ennead, Dowse, Stellate | Only for Haptics: a light tap as you write a number, open or flag a square, or place a star or a dot, off until you turn it on in Settings. |
| Notifications (POST_NOTIFICATIONS), asked at run time on Android 13 and later | Ennead, Dowse, Stellate | Only for the daily reminder and, if you turn online features and their notifications on, for friend notifications (an accepted invite, a friend's solved puzzle, a friend starting to play). Asked only when you turn one on. The reminder is one notification a day at the time you choose, "Today's puzzle is ready." in Ennead and Stellate and "Today's board is ready." in Dowse. The games show no other notification. |
| Push messages (com.google.android.c2dm.permission.RECEIVE) | All | Added by Firebase Cloud Messaging, so the game can receive push messages from it. Used only when you turn online features and their notifications on (see Online features), to receive friend notifications; the game receives nothing through it otherwise. |
| In-app purchases (com.android.vending.BILLING) | Ennead, Dowse, Stellate | Added by the Google Play Billing library, so each of them can offer its own one-time Remove ads purchase through Google Play and ask Google Play whether you have bought it. |
| Install referrer (com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE) | All | Added by Analytics, to read from Google Play which link or campaign led to the install. The games' online features also use Google Play's install referrer library, once, on the first launch after an install, so that a challenge link whose Google Play button you used opens its challenge (see Online features). |
No game asks for your location, contacts, camera, microphone, photos or files, or for permission to set exact alarms.
Ennead: Sudoku Puzzles
- Ennead: Sudoku Puzzles (com.moonletlabs.sudoku). Your puzzles, notes and stats stay on this phone and in your Android backup. Ennead keeps your puzzles (the ready puzzles and every one you play), your games in progress with every move you can undo, your notes, times, hints and results, and your solved daily puzzles in the app's own storage on your phone, and Android includes them in your backup.
- Every puzzle is made on your phone, or comes from a set built into the app. Today's puzzle is worked out on your phone from the date, so it is the same for everyone on the same date without any server; nothing is downloaded and nothing about your puzzles is sent anywhere unless you turn on online features (see Online features).
- Stats keep your last 1,000 results; a game's undo history is deleted when the puzzle is solved or left. Uninstalling the app or clearing its storage deletes everything from the phone.
- Your settings (how numbers are checked, highlights, notes, the number pad, the board, shapes, the larger board, the timer, sound, haptics and the reminder time) are stored on your phone and included in your Android backup.
- The daily reminder is off until you turn it on, in Settings or when Ennead offers it once after you have solved a few daily puzzles, and you choose its time. On Android 13 and later, Ennead asks for permission to show notifications only then. It is one notification a day, made on your phone ("Today's puzzle is ready"), never sent when you have already solved today's puzzle, and it turns itself off after two weeks without a tap.
- Ads: a banner at the bottom of Home, Solved, Stats and past daily puzzles, never while a puzzle is in play, in Settings or in a sheet or dialog. At most one full-screen ad per app open, only between a solved puzzle and its results, announced on the screen before it plays, never in your first three puzzles and never within 30 seconds of another full-screen ad. Rewarded ads only when you choose to watch one for a hint, up to 5 a day; if no ad is available you get the hint anyway, and after the fifth, hints are free for the rest of the day. No ads while you solve today's puzzle, and solving it never leads to a full-screen ad. Ads are muted and limited to content rated G.
- Remove ads: Purchases are processed by Google Play; Ennead stores only an 'ads removed' flag on your phone. It is not backed up, and Ennead checks it with Google Play each time it starts.
- Sound and haptics: the quiet pencil sounds are made on your phone and stay silent while other audio plays. Haptics, a light tap as you write, is off until you turn it on in Settings, and uses the phone's vibration (the VIBRATE permission above). Ennead never uses the microphone and records nothing.
- Usage statistics, when they are on, are the Ennead events and settings described under Usage statistics, with rough ranges instead of exact times and counts. Every value sent is one of a fixed list (a level, a kind of hint, a range such as "5 to 15 minutes"), so nothing you write or type can be sent. They never include the puzzles, your numbers, your notes, where you placed anything or anything you type.
- Online features (optional, off until you turn them on): your nickname, daily puzzle times, friends and notification choices are stored on our server, as described under Online features. Your puzzles stay on your phone.
- Downloadable puzzle packs are not in the app yet. Before they are, this policy will say where they come from and what a download sends.
Dowse: Minesweeper Puzzles
- Dowse: Minesweeper Puzzles (com.moonletlabs.mines). Your boards, flags and stats stay on this phone and in your Android backup. Dowse keeps your boards (the ones you play, with the squares you opened and flagged), your games in progress with every move you can undo, times, hints, slips and results, and your solved daily boards in the app's own storage on your phone, and Android includes them in your backup.
- Every board, the daily board included, is made on your phone. Today's board is worked out on your phone from the date, so it is the same for everyone on the same date without any server; nothing is downloaded and nothing about your boards is sent anywhere unless you turn on online features (see Online features).
- Stats keep your last 1,000 results; a game's undo history is deleted when the board is solved or left. Uninstalling the app or clearing its storage deletes everything from the phone.
- Your settings (how flags are checked, Classic, hold to flag, chording, the count of mines left, the board and its size, shapes, the timer, sound, haptics and the reminder time) are stored on your phone and included in your Android backup.
- The daily reminder is off until you turn it on, in Settings or when Dowse offers it once after you have solved a few daily boards, and you choose its time. On Android 13 and later, Dowse asks for permission to show notifications only then. It is one notification a day, made on your phone ("Today's board is ready."), never sent when you have already solved today's board, and it turns itself off after two weeks without a tap.
- Online features (optional, off until you turn them on): your nickname, daily board times, friends and notification choices are stored on our server, as described under Online features. Your boards stay on your phone.
- Ads: a banner at the bottom of Home, Solved, Stats and past daily boards, never while a board is in play, in Settings or in a sheet or dialog. At most one full-screen ad per app open, only between a solved board and its results, announced on the screen before it plays, never in your first three boards and never within 30 seconds of another full-screen ad. No ad on, or after, a mine: opening a mine never leads to an ad, and a board that ever had a slip, or that ended in Classic, is never followed by a full-screen ad. Rewarded ads only when you choose to watch one for a hint, up to 5 a day; if no ad is available you get the hint anyway, and after the fifth, hints are free for the rest of the day. No ads while you solve today's board, and solving it never leads to a full-screen ad. Ads are muted and limited to content rated G.
- Remove ads: Purchases are processed by Google Play; Dowse stores only an 'ads removed' flag on your phone. It is not backed up, and Dowse checks it with Google Play each time it starts. It is Dowse's own purchase: buying Remove ads in another game does not remove Dowse's ads.
- Sound and haptics: the quiet sounds are made on your phone and stay silent while other audio plays. Haptics, a light tap as you open or flag a square, is off until you turn it on in Settings, and uses the phone's vibration (the VIBRATE permission above). Dowse never uses the microphone and records nothing.
- Usage statistics, when they are on, are the Dowse events and settings described under Usage statistics, with rough ranges instead of exact times and counts. Every value sent is one of a fixed list (a level, a kind of hint, a range such as "2 or 3 slips"), so nothing you write or type can be sent. They never include the boards, the squares you opened or flagged, where the mines are, or anything you type.
Stellate: Star Battle Puzzles
- Stellate: Star Battle Puzzles (com.moonletlabs.starbattle). Your puzzles, marks and stats stay on this phone and in your Android backup. Stellate keeps the puzzles you play with the marks you made, your games in progress with every move you can undo, times, hints and results, and your solved daily puzzles in the app's own storage on your phone, and Android includes them in your backup.
- Every puzzle, the daily puzzle included, is made on your phone or comes from a set built into the app. Today's puzzle is worked out on your phone from the date, so it is the same for everyone on the same date without any server; nothing is downloaded and nothing about your puzzles is sent anywhere unless you turn on online features (see Online features).
- Stats keep your last 1,000 results; a game's undo history is deleted when the puzzle is solved or left. Uninstalling the app or clearing its storage deletes everything from the phone.
- Your settings (the board, Show conflicts, Auto-dot, how a tap works, sound, haptics, the reminder time, the level you last started, whether you have seen the rules card, and how many of the built-in first puzzles you have solved) are stored on your phone and included in your Android backup.
- The daily reminder is off until you turn it on, in Settings or when Stellate offers it once after you have solved a few daily puzzles, and you choose its time. On Android 13 and later, Stellate asks for permission to show notifications only then. It is one notification a day, made on your phone ("Today's puzzle is ready."), never sent when you have already solved today's puzzle, and it turns itself off after two weeks without a tap.
- Online features (optional, off until you turn them on): your nickname, daily puzzle times, friends and notification choices are stored on our server, as described under Online features. Your puzzles stay on your phone.
- Ads: a banner at the bottom of Home, Solved (today's puzzle too, once you have solved it), Stats, Friends and past daily puzzles, never while a puzzle is in play, on a solved day's read-only print, on a challenge you have received, in Settings or in a sheet or dialog. At most one full-screen ad per app open, only between a solved puzzle and its results, announced on the screen before it plays, never in your first three puzzles and never within 30 seconds of another full-screen ad. A hint that fixes a wrong mark is free and never asks you to watch an ad. Rewarded ads only when you choose to watch one for a hint, up to 5 a day; if no ad is available you get the hint anyway, and after the fifth, hints are free for the rest of the day. No ads while you solve today's puzzle, and solving it never leads to a full-screen ad. Ads are muted and limited to content rated G.
- Remove ads: Purchases are processed by Google Play; Stellate stores only an 'ads removed' flag on your phone. It is not backed up, and Stellate checks it with Google Play each time it starts. It is Stellate's own purchase: buying Remove ads in another game does not remove Stellate's ads.
- Sound and haptics: the quiet sounds are made on your phone and stay silent while other audio plays. Haptics, a light tap as you place a star or a dot, is off until you turn it on in Settings, and uses the phone's vibration (the VIBRATE permission above). Stellate never uses the microphone and records nothing.
- Usage statistics, when they are on, are the Stellate events and settings described under Usage statistics, with rough ranges instead of exact times and counts. Every value sent is one of a fixed list (a level, a kind of hint, a range such as "5 to 15 minutes"), so nothing you write or type can be sent. They never include the puzzles, the stars or dots you placed, or anything you type.
Advertising
The games are free and funded by ads from Google AdMob, as described per game above, and each game offers its own one-time purchase that removes them (see Purchases). Ads never appear while a puzzle is in play. We limit ads to content rated G.
Rewarded ads play only when you tap the button to watch one for a hint. Google learns that the ad was shown and whether it was watched to the end, as for any ad; we do not send Google anything about your puzzle.
To request, show and measure ads and prevent fraud, the Google Mobile Ads SDK collects your advertising ID, IP address and the approximate location derived from it, device and app information, ad interactions and diagnostic information such as app launch time and crashes in the SDK. Google uses this data as an independent controller under its own policies, and may share it with its advertising partners, who are listed in the consent form. See How Google uses information from sites or apps that use our services and the Google Privacy Policy.
- Personalised ads are based on information Google holds about your activity across apps and websites. In the EEA, the UK and Switzerland they are shown only if you consent.
- Non-personalised ads are based on context, such as the app and your approximate location. Google still uses your device's identifiers for frequency capping, measurement and fraud prevention.
- If you refuse consent where it is asked, the app works normally; you may see non-personalised or limited ads, or none.
Google and its advertising partners may collect information about your activity over time and across apps for personalised ads. See Consent and your choices to limit this.
Purchases
Each game's only purchase is Remove ads, a one-time purchase with no subscription, made separately in each game: buying it in one game does not remove ads in another. You make it through Google Play, which processes your payment under the Google Play Terms of Service and the Google Privacy Policy; we never see your payment details, name or email address. Google Play gives the game the purchase's state and a purchase token, which the game checks on your phone and uses only to turn ads off. No server of ours receives them. If a purchase is refunded or cancelled, ads return the next time the game starts. "Restore purchase" in Settings asks Google Play again, for example on a new phone. Google Play's order records are kept by Google under its own terms; Analytics records only the step of the purchase (for example "completed" or "restored"), never an order, token or price you paid.
Google Play Billing's diagnostic logs. The Google Play Billing library that the games use to talk to Google Play sends its own diagnostic logs to Google, through Google's data-transport library, about the billing requests the game makes (for example the purchase check each time the game starts): which request was made and how it ended, the library and app versions, and basic device information such as the model and Android version. Google uses them to run and improve Google Play Billing. They never include your puzzles or anything you type, and we cannot see them. Because they come from Google Play's own library, not from our analytics, "Share usage statistics" does not turn them off; they are sent whether or not you have bought anything.
Online features
Online features are optional and off until you turn them on in Settings → Online (or when a game offers them, for example when you open a friend's invite). With them off, a game sends nothing to our servers. With them on, the game talks to a server that Moonlet Labs runs on Cloudflare, so this section applies in addition to the rest of this policy. A game's online features compare your times for the daily puzzle with other solvers and with friends you add, and let you send challenges and invites.
What we collect and why
- A player ID. The first time you turn online features on, the game creates a random install ID on your phone (kept on the phone only and never included in an Android backup or transfer, so a restored or new phone starts with online features off, as a new player; signing in with Google brings back your friends and history) and we create a player ID for it. We store only a SHA-256 hash of the install ID, never the install ID itself. Why: to recognise you between sessions without an account.
- Your nickname, which you choose (3 to 20 characters, checked against a filter). Friends see it, and it is the name in the challenge links you share. If a nickname is held after reports, others see a fallback such as "Player 4F2A" instead.
- A Google account ID, only if you sign in with Google. The game sends the Google sign-in token to our server once, when you sign in; it is a signed statement from Google that can also carry your name, email address and photo. Our server checks it and reads only the account's stable ID (the
subvalue), keeps only that ID, and does not store or log the token or anything else in it. Why: to keep one player across your phones and across Moonlet Labs games, and to find your data if you ask to delete it. Signing in is optional. - Your daily puzzle solves: the game, the puzzle's date, its level, your time, the hints and undos you used, whether the puzzle was assisted, and when you solved it. When you first turn online features on (and again after you delete your online data or sign out), the game also uploads, once, the daily results already on your phone, so your run starts with your real history. Why: to show your run, your week, your friends' times and your percentile.
- Per-day counts of solve times (how many solvers took each number of seconds, unassisted solves only). They have no player attached. Why: to work out "Faster than 72% of today's solvers".
- Your friends and invites: who is friends with whom, the invite codes you create (they expire after 30 days), the people you block, the nickname reports you send (who reported whom, and a fixed reason, "nickname"), and, for about a day (at most 25 hours), a record of invite codes you typed that did not exist (your player ID and the time), used to limit guessing. Why: to show friends' times, and to keep the nickname filter and blocking working.
- A notification token and your notification choices, only if you turn notifications on: Google's Firebase Cloud Messaging token for your phone (per game), and which of "Invites accepted", "A friend solves today's puzzle" and "A friend starts playing" you want. Why: to send the notifications you chose.
- Your time zone offset (minutes from UTC), the games you play, and when you first and last connected. Why: to work out your run for the right local day, to show which friends play which game, and to delete players who have gone.
- Your IP address reaches Cloudflare whenever the game connects. We use it for rate limits (for example, a limited number of new sessions a minute per address) and do not store it in our database.
- Usage statistics about online features. If usage statistics are on (see Usage statistics above), each game also records these events with fixed values only: online features turned on, signed in with Google, a challenge shared or opened (its kind, and whether the game was already installed), a friend added (by code or by link), the answer to the one-time notifications offer (yes or no), and a friend notification opened (its type). They carry no player ID, nickname or time.
- Not collected: your puzzles or boards, your notes, your name or email address (apart from what the Google sign-in token carries, above), your contacts, your location, or anything you type apart from your nickname and a friend's invite code.
Challenge and invite links
A challenge link (moonletlabs.com/c/…) carries the level, the date or puzzle number, the time and the nickname of the person who made it, and an invite code if they added one. The page behind it reads the link in your browser and shows it to you; the link is not sent to a server of ours other than the request for the page, which our host Vercel logs like any web request (see Our website). If you install a game from the link's Google Play button, the game reads the link from Google Play's install referrer once, on first launch, to open the challenge. Nothing in a link is trusted: it only fills in the challenge screen.
Who processes it
- Cloudflare, Inc. runs the server and the database (Cloudflare Workers, D1 and Queues): our processor. Cloudflare handles requests at the edge location nearest you, in the United States, the EU and other countries where it operates, under its data processing terms. See International transfers.
- Google LLC, for Firebase Cloud Messaging, which delivers notifications you turned on: our processor, under the same Firebase terms as above. It receives the notification token and a short data message for each notification (its type, the game, the friend's nickname and the date); the text you see is made on your phone.
- Google LLC, for Google Sign-In, only if you sign in: Google's Credential Manager on your phone shows the account chooser and hands the game a signed token; our server checks the token against Google's published public keys. Google handles the sign-in on your phone as an independent controller under its own privacy policy; we keep only the account ID.
We do not sell this data, use it for advertising, or share it with anyone else. Friends you add see your nickname, your daily times for today and the past week (and whether each was assisted), whether you solved today's puzzle, your run of solved days, and which of our games you play; other solvers see only the counts.
How long online data is kept
- Per-day solve-time counts: 400 days, then dropped.
- Your daily solves: for as long as your player exists, because they make your run and week view.
- A player with no session for 18 months is deleted, with everything that names them.
- Invite codes stop working after 30 days and are deleted with your player. Records of invite codes you typed that did not exist are kept for about a day (at most 25 hours). Friendships, blocks and reports you made, and your notification choices, are kept while your player exists. Your notification token is removed from our server when you turn all notifications off, turn online features off, sign out or delete your online data.
Deleting your online data
- In the game: Settings → Online → Delete my online data (the row is shown whenever this phone has online data, including after you turn online features off; if you never turned them on there is nothing to delete). This works whether or not you signed in. For a player who signed in with Google, it deletes the player in every Moonlet Labs game; an anonymous player is deleted in that game only.
- On the web, if you signed in with Google: moonletlabs.com/games/delete.html.
Deleting removes your player and every record that names you: nickname, Google account link, solves, friendships, invites, blocks, reports and notification token. The per-day solve-time counts stay, because they are totals with no player attached. The web page loads Google's sign-in script from accounts.google.com, so Google receives your IP address and browser information, and its own cookies, when you open that page, under the Google Privacy Policy; the page sends us nothing until you sign in and confirm. Your puzzles, stats and settings on your phone are not touched, and signing out does not delete anything. Turning online features off in Settings → Online stops the game sending data; what is already on our server stays until you delete it or the retention periods above end.
Your rights, security and children for online data
The rights in Your rights apply to online data too, and unlike the data of the other sections it is tied to a player ID, so we can find, export or delete it for a signed-in player: use the deletion routes above, or email support@moonletlabs.com from the account you signed in with. For a player who never signed in, we cannot tell which data is yours from an email address; deleting in the game is the way. Data is encrypted in transit, access to the server and database is limited to the people who run Moonlet Labs, and our server limits how often a player or an address can call it. Online features are meant for people aged 13 and over, as with the rest of each game, and have no free-text chat: the only text a player enters that others see is a filtered nickname.
Consent and your choices
- EEA, UK and Switzerland. On first launch, the app shows a consent form from Google's User Messaging Platform, a consent management platform registered with the IAB Transparency and Consent Framework. It lists the purposes and the ad partners. No ad is requested, and no usage statistics or crash reports are sent, until you have answered. You can change or withdraw your choice at any time in the app's Settings → Privacy → "Privacy options", which shows the form again.
- US states with privacy laws. Settings → Privacy → "Privacy options" shows Google's US state privacy message, where you can opt out of the sale or sharing of your personal data for targeted advertising. See US state privacy rights.
- Usage statistics, everywhere. Settings → Privacy → "Share usage statistics" turns Analytics off on this phone, and with it everything shared with Google Ads. It cannot turn Analytics on where you refused consent in the consent form.
- Advertising ID. You can reset or delete your advertising ID in your phone's settings (usually Settings → Privacy → Ads, or Settings → Google → Ads). Deleting it stops apps from using it for personalised ads.
- Reset the app's identifiers. Uninstalling the app, or clearing its storage, deletes the Firebase identifiers on your phone. The apps never include these identifiers in Android backup or device transfer, so a reinstall or a new phone starts with fresh Firebase identifiers that are not linked to the old ones, except that where ad measurement is allowed (see Usage statistics), Google Ads can still connect them through your advertising ID if it has not changed. To prevent that, reset or delete your advertising ID in your phone's settings (see above).
Where the "Privacy options" entry is not shown, no consent or opt-out message applies to your region. You can still use the other controls above, or email us.
Who receives your data
- Google LLC, for Firebase (Crashlytics, Analytics, Remote Config, installation IDs): our processor and service provider, under the Firebase Data Processing and Security Terms. Our Firebase projects are configured with the Google Analytics data-sharing settings and Google signals turned off, so Google does not use this data for its own purposes. See Privacy and Security in Firebase.
- Google LLC, for AdMob and the consent check: an independent controller, under the Google Ads Controller-Controller Data Protection Terms.
- Google LLC, for Google Ads, which receives the two Analytics events described under Usage statistics, with the app-instance ID and advertising ID, to measure our campaigns: we treat Google as an independent controller for this, under the same Controller-Controller Data Protection Terms.
- Google's advertising partners: independent controllers, listed in the consent form.
- Google LLC, for Google Play, which processes the Remove ads purchase and its payment under Google Play's own terms and privacy policy, as an independent controller. Each game receives only the purchase's state and token from Google Play, on your phone.
- Vercel Inc., which hosts moonletlabs.com: our processor.
- Google, for Google Fonts on the website: under Google's own privacy policy.
- Google LLC, for Google Workspace, which hosts our support mailbox: our processor.
- Authorities, courts or others where the law requires it, or to protect our rights.
International transfers
We are based in Minnesota, United States. Google and Vercel process data in the United States and other countries where they operate. When personal data from the EEA, the UK or Switzerland is transferred to the United States, we rely on the EU-US Data Privacy Framework, its UK Extension and the Swiss-US Data Privacy Framework where the recipient is certified (Google LLC is), and otherwise on the European Commission's Standard Contractual Clauses with the UK Addendum and the Swiss amendments. The providers that hold the data we collect directly, Google Workspace for support emails and Vercel for website logs, rely on the EU-US Data Privacy Framework and/or Standard Contractual Clauses.
How long data is kept
| Data | How long |
|---|---|
| Crash reports and their identifiers (Crashlytics) | 90 days |
| Usage statistics at event and identifier level (Analytics) | 14 months. Aggregated reports that are not linked to an identifier are kept longer. |
| Firebase installation ID | The identifier on your phone is removed when you uninstall the app or clear its storage. Google deletes the data associated with it as the retention periods above expire. |
| Ad data held by Google | Under Google's retention policy |
| Your consent choices | On your phone, until you change them or uninstall the app (never backed up) |
| The games' puzzles, boards, moves, results and settings (Ennead, Dowse, Stellate) | On your phone, until you clear the app's storage or uninstall it (stats keep the last 1,000 results; a game's undo history goes when it is solved or left); if you use Android backup, also in your Google account backup until you delete it or Android lets it expire |
| Online features data on our server (nickname, daily solves, friends, notification token; Ennead, Dowse, Stellate) | Per-day solve-time counts 400 days; daily solves while your player exists; failed invite-code attempts about a day (at most 25 hours); players with no session for 18 months are deleted; deleted when you ask, in the game or at games/delete.html. See Online features |
| Today's count of hints from ads, and the "ads removed" flag | On your phone only, never in a backup; the count starts again each day, and the flag is checked with Google Play each time the game starts |
| Purchase records held by Google Play | Under Google Play's terms and Google's retention policy |
| Support emails | As long as needed to resolve your request, then up to 12 months after it is resolved, then deleted |
| Website request logs (Vercel) | The limited period Vercel keeps them under its privacy policy |
Your rights
Depending on where you live, you may have the right to access the personal data we hold about you, to have it corrected or deleted, to restrict or object to its use, to receive it in a portable format, and to withdraw consent at any time. You may object at any time to processing based on our legitimate interests.
How to use them without an account. With online features off, the games have no accounts, and the identifiers Firebase uses are not linked to your name or email, so we cannot find your data from your email address. (Online features add a player ID that we can find: see Online features for how to delete it.) These routes work:
- To stop collection: withdraw consent in Settings → Privacy → "Privacy options" (where shown), or switch off "Share usage statistics".
- To cut the link to past data: uninstall and reinstall the app, or clear its storage. The app then uses fresh identifiers (the identifiers are never included in Android backup or device transfer, so a restore does not bring the old ones back). Where ad measurement is allowed, also reset your advertising ID in your phone's settings, or Google Ads can still connect the old and new data through it. Data already linked to the old identifiers stays with Google until it ages out under the retention periods above; we cannot delete it early because we cannot tell which identifiers were yours.
- For ads: reset or delete your advertising ID in your phone's settings, and see Google's own controls at My Ad Center.
- For anything else, including your support emails: email support@moonletlabs.com. If we cannot identify data as yours, we will tell you so and explain what we can do.
We reply within one month (EEA, UK and Switzerland) or 45 days (US states), and may extend this where the law allows. You also have the right to complain to a data protection authority: in the EU or EEA, the authority where you live or work (list of authorities); in the UK, the Information Commissioner's Office; in Switzerland, the Federal Data Protection and Information Commissioner. If you live elsewhere, you may have similar rights under local law; contact us.
US state privacy rights
This section applies to residents of California and other US states with consumer privacy laws, and is our notice at collection. Whether or not these laws apply to Moonlet Labs, everyone in the United States can limit targeted advertising with the advertising ID controls in their phone's settings, and where Google's US state privacy message applies, the app also offers an in-app opt-out of the sale or sharing of personal data and of targeted advertising, as described below.
- Categories we collect: identifiers (advertising ID, Firebase app-instance and installation IDs, IP address); internet or other electronic network activity (app and ad interactions); approximate geolocation derived from IP address; device information. If you email us: your email address and message. We do not collect sensitive personal information.
- Sources: your device, through the apps; you, if you email us.
- Purposes: as described in What we collect and why.
- Disclosed to: our service providers (Google for Firebase, Vercel, our email provider) and, for advertising and for measuring our own ad campaigns, Google and its advertising partners.
- Sale, sharing and targeted advertising: we do not sell personal information for money. When personalised ads are shown, Google and its advertising partners receive identifiers, approximate location and ad-interaction data for cross-context behavioural advertising. California law may treat this as "sharing" (and in some cases "selling"), and other states as "targeted advertising". We also send Google Ads the two Analytics events used to measure our own ad campaigns (see Usage statistics); we treat this as sharing too, and your opt-out stops it.
- How to opt out: where Google's US state privacy message applies, open Settings → Privacy → "Privacy options" in the app and use that message; Google then restricts how it uses your data for ads (restricted data processing). Settings → Privacy shows whether you have opted out. Everyone in the US can also delete or reset their advertising ID in their phone's settings. Email support@moonletlabs.com for questions about your choice or to appeal; email itself cannot switch off ads processing in the app.
- Global Privacy Control and Do Not Track: these are signals sent by web browsers. The apps contain no browser, so they cannot receive them; use the in-app options above. Our website is static, sets no cookies of its own, runs no analytics or advertising, and does not track you over time or across sites, so it does not sell or share personal information and has nothing for these signals to switch off.
- Your rights: to know and access what we collect, to delete it, to correct it, to opt out of sale, sharing and targeted advertising, and to limit use of sensitive personal information (which we do not collect). See Your rights for how requests work without an account. We will not treat you differently for using these rights.
- Authorised agents may make a request by emailing us with proof of your authorisation.
- Appeals: if we decline your request, you can appeal by replying to our answer with "Appeal" in the subject. We respond within 60 days. If you are not satisfied, you may contact your state attorney general.
- Minors: we do not knowingly sell or share the personal information of anyone under 16.
- Retention: see How long data is kept.
Children
Each game is a puzzle game for a general audience. On Google Play it targets people aged 13 and over, and it is not directed at children under 13 (or under the minimum age for consenting to online services in your country). We do not knowingly collect personal data from children. Ads are limited to content rated G. If you believe a child has given us personal data, for example by emailing us, contact support@moonletlabs.com and we will delete it.
Our website
moonletlabs.com is a static website hosted by Vercel Inc. When you visit, Vercel processes your IP address, browser user agent, the pages you request and the time, to deliver the site and protect it from abuse, and keeps these request logs for the limited period set out in Vercel's privacy policy. The pages load fonts from Google Fonts, so Google receives your IP address and browser information when you visit; see the Google Privacy Policy. The site sets no cookies of its own and uses no analytics or advertising. Our legal basis is our legitimate interest in running a working, secure website.
One page, games/delete.html, also loads Google's sign-in script, which Google serves and sets its own cookies for: see Online features.
Security
Data sent from the games to Google is encrypted in transit. With online features off, we operate no servers that store your data; with them on, the server described under Online features stores it, and data sent to it is encrypted in transit. We limit access to the Firebase and AdMob consoles, and to that server and its database, to the people who run Moonlet Labs.
Online features: terms
The games have no separate terms of service, so the short rules for online features are here. By turning online features on you agree to them.
- Nicknames. Friends and anyone you send a challenge link to see your nickname. Choose one that is not offensive, does not impersonate someone, does not contain personal information (a full name, email address or phone number) and does not advertise anything. Nicknames pass a filter before they are saved; the filter can be wrong, and you can choose another.
- Reports. You can report a friend's nickname in the game. We review reports, and a nickname reported by several different players is held: others then see a fallback name such as "Player 4F2A" until you choose another. The person you report is not told who reported them.
- Our right to act. We may hold or replace a nickname, remove a time that is not plausible for the puzzle, rate-limit or block a device or player that abuses the service, and delete a player's online data for abuse. We will not do this to a player who has simply stopped playing, except under the retention periods above.
- Friends. You add friends with an invite code or link that you share yourself, and either of you can remove the other. Blocking removes the friendship and stops that player adding you again. Share your codes only with people you want as friends.
- The service. Online features are provided as they are and may change, pause or stop; the games themselves, including the daily puzzle, keep working on your phone without them. Times in a challenge link or on a friend's row come from other players' phones and are not verified.
- Deleting. You can delete your online data at any time, in the game or at games/delete.html.
Changes to this policy
If we change what the games or the website do with data, we will update this page and the dates above. For material changes we will also tell you in the game before the change takes effect, and ask for consent again where the law requires it. This policy is versioned separately from the policy for Moonlet Labs' tools, so a change to one does not change the other. Previous versions are available on request.
Contact
Moonlet Labs LLC · 445 Karen Dr Unit 316, Woodbury, MN 55129, USA · support@moonletlabs.com
Google Play Data safety summary
This summarises each game's Google Play Data safety answers, using Play's definitions: "collected" means sent off your phone, including by the Google SDKs in the game; "shared" means transferred to a third party, and data processed by our service provider on our behalf is not "shared".
| Play data type | Collected | Shared | Purposes | Optional |
|---|---|---|---|---|
| Device or other IDs | Yes: Firebase installation ID, app-instance ID and Crashlytics installation ID (Firebase); advertising ID (AdMob, and Analytics for ad measurement) | Yes: advertising ID with Google for advertising; app-instance ID and advertising ID with Google Ads to measure our ad campaigns. Other Firebase IDs: no (service provider) | App functionality, analytics, advertising or marketing, fraud prevention | Required |
| App activity: app interactions | Yes: screens, features, sessions and each game's own events above (Analytics); ad interactions (AdMob) | Yes: the app's first open and solved puzzles (first_open, task_completed) with Google Ads to measure our ad campaigns; ad interactions with Google for advertising (AdMob). Other Analytics events: no | Analytics, advertising or marketing | Required (the Analytics part, including what goes to Google Ads, can be switched off) |
| App info and performance: crash logs | Yes (Crashlytics; AdMob for SDK crashes) | Crashlytics: no. AdMob: yes, with Google | App functionality, analytics | Required |
| App info and performance: diagnostics | Yes: device state with crash reports (Crashlytics); performance data (AdMob); Google Play Billing's own diagnostic logs (Ennead), and the same in Dowse and Stellate | Crashlytics: no. AdMob and Google Play Billing: yes, with Google | App functionality, analytics, advertising, fraud prevention | Required |
| Location: approximate location | Yes: derived from IP address by AdMob; city-level by Analytics | Analytics: no. AdMob: yes, with Google | Advertising, analytics, fraud prevention | Required |
| Puzzles, progress and stats (Ennead) | No: stored on the phone and, if you use it, in your own Android backup | No | Puzzles, the daily puzzle, stats and the daily reminder | — |
| The Remove ads purchase (Ennead) | No: Google Play processes the purchase and its payment under Google's terms; the game keeps only an "ads removed" flag on the phone and sends it nowhere | No | Turning ads off | — |
| Boards, progress and stats (Dowse) | No: stored on the phone and, if you use it, in your own Android backup | No | Boards, the daily board, stats and the daily reminder | — |
| The Remove ads purchase (Dowse) | No: Google Play processes the purchase and its payment under Google's terms; the game keeps only an "ads removed" flag on the phone and sends it nowhere | No | Turning ads off | — |
| Puzzles, progress and stats (Stellate) | No: stored on the phone and, if you use it, in your own Android backup | No | Puzzles, the daily puzzle, stats and the daily reminder | — |
| The Remove ads purchase (Stellate) | No: Google Play processes the purchase and its payment under Google's terms; the game keeps only an "ads removed" flag on the phone and sends it nowhere | No | Turning ads off | — |
| Online features (Ennead, Dowse, Stellate; optional) | Yes, only if you turn them on: a player ID and a hash of a random install ID, nickname, optional Google account ID, daily puzzle times and flags, friends, blocks and reports, games played and connection times, notification token and time zone offset (our server on Cloudflare; Google for notifications and sign-in) | No: processed for us by Cloudflare and Google Firebase Cloud Messaging; Google Sign-In verifies your account | App functionality, account management, fraud prevention and security | Optional; deletable in the game or at games/delete.html |
| Settings | No: stored on the phone and, if you use it, in your own Android backup | No | App functionality | — |
| Email address and Google profile name (online features with Google sign-in only) | Yes, processed ephemerally: only inside the Google sign-in token your phone sends us: our server reads just the account ID from it, keeps nothing else and processes the rest ephemerally, in memory | No | Account management | Optional |
| Name (other than the nickname you choose for online features, and other than as above), email (other than as above), contacts, photos, files, precise location, health or financial data | No | No | — | — |
All data is encrypted in transit. "Required" means collection cannot be switched off for every user in every region: in the EEA, the UK and Switzerland, Analytics and Crashlytics run only with consent, and nothing goes to Google Ads without consent.