ARA LABS

Brainery

Privacy policy.

Brainery is a puzzle game you play solo, with no Brainery account and no login. It is free to download and offers one permanent optional upgrade. A few things can send data off your device: the purchase system, which checks with the store and RevenueCat while the app is starting; analytics, which you can turn off at any time — on by default after a short welcome notice, except in the European Economic Area, the United Kingdom and Switzerland, where it stays off unless you choose Allow; the Live Friend Race online mode, which connects only while you use it; and, on Android and iOS, ads from Google AdMob for players who do not own the upgrade, with Google's own advertising-privacy message where one is required.

Last updated · October 11, 2026

If your app has no Privacy choices row. The current Google Play release of Brainery includes the ads, the Privacy choices panel and the Support ID described in this policy. Some older Google Play test installations may lack them and should be updated through Google Play. If Profile → Settings has no Privacy choices row, your installed version is one of those: the advertising described in this policy does not apply to it until you update, and your analytics choice is in Profile → Settings. You can still email hello@aralabs.dev about deletion, but without a Support ID we may be unable to locate the RevenueCat record for your installation.

If your app still shows “Help improve Brainery”. This policy describes Brainery 1.4.0, which has a welcome card at first launch. Until you update to Brainery 1.4.0, the app shows a screen headed Help improve Brainery with Allow and No thanks instead, and analytics stays off unless you choose Allow. Stars, and the optional ad that doubles a puzzle's Stars, arrive with Brainery 1.4.0. Whichever you see, you can change your analytics choice at any time in Profile → Settings → Privacy choices.

Overview

There is no Brainery account and no login, and your puzzle progress is stored on your device. These can send data off your device:

These are separate flows that go to different places for different reasons. Purchase and ownership data goes to the store and to RevenueCat; analytics goes to Google; on Android and iOS, advertising data goes to Google through its Mobile Ads SDK; Live race data goes to Brainery's game server. Brainery defines no analytics event of its own for a race or for a purchase, and race data is never sent to Google. What Google's own SDK records is a separate question: automatic app/session measurement may continue during a race while analytics is on, and the SDK can also measure Play Store purchases by itself — both are covered under optional analytics below. RevenueCat's purchase verification is separate again, and runs whatever you choose about analytics.

On-device data

Game progress, scores, streaks, medals, trophies, profile name, avatar colour, settings, and local challenge or daily records are stored locally on your device. This data never leaves the device unless your device's own backup or transfer service copies it. Brainery disables Android auto-backup for its app data, so this payload is not uploaded to Google Drive.

On Android and iOS, Brainery also keeps a small advertising record on your device — when full-screen ads were shown and how many, and a journal of the rewarded ads you have finished — so ads stay within the limits described under Advertising and each rewarded ad gives exactly one reward — one hint, or one puzzle's Stars doubled — even if the app closes straight after the ad. Each journal entry holds only a random reference Brainery generates, the time and the kind of reward (a hint or a Stars doubling); it contains no account, user or advertising identifier. When you choose to watch an ad to double a puzzle's Stars, the record also notes which puzzle result it is for, how many Stars it adds and when you chose; that note is removed when the Stars are added, replaced by your next doubling, or removed once it is more than a day old and no reward for it is waiting. It is not sent to Brainery.

Reminders are local. If you turn on the daily reminder, Brainery schedules it with your device's own local notifications. The reminder and its time are kept on your device; nothing about it is sent to Brainery or to any other service, and no push-notification service is used.

Rating prompt (Android). After a happy moment such as a gold medal, a perfect Trio day or a streak milestone, Brainery may ask Google Play to show its own rating card. Google Play shows and runs that card; Brainery does not see or receive your rating or review. Any rating or review you choose to submit is handled by Google under Google's terms and privacy policy. Brainery records only on your device that it has asked, so it does not ask too often.

The permanent upgrade

Brainery is free to download. There is one optional, permanent, non-consumable upgrade — Ad-Free + Unlimited Hints (product identifier com.brainery.app.ad_free_unlimited_hints). It is bought once and is not a subscription; there is nothing to renew and nothing to cancel. On Android and iOS alike it is called Ad-Free + Unlimited Hints and does the same thing: an owner is shown no ads, Brainery makes no ad requests for them, and they have unlimited hints.

The unlimited hints it grants apply to Campaign and Daily only. Competitive play — Live Friend Race, BrainBot and challenge codes — keeps its normal hint limit whether or not you own the upgrade. Any future paid collections are not included in it.

What buying and ownership involve

The store takes the payment, not Brainery. Google Play or the App Store shows the purchase screen, charges your payment method and keeps the record of the transaction. Brainery never sees and never receives your card details, billing address or store account credentials, and it does no payment processing of its own.

RevenueCat is the layer in between. Brainery uses RevenueCat to verify with the store that a purchase is genuine, to answer the question "does this installation own the upgrade?", to restore a purchase you already made, to drop ownership again if the store reports a refund, and to give us purchase reporting in RevenueCat's dashboard. Verification and the ownership check are the reason the app talks to RevenueCat when it starts — this is not something that only happens after you press Buy.

What that flow involves:

Ownership is read at the moment a hint is requested and is not written into your saved game, so it is not part of the on-device data described above.

Availability. The purchase system is included in the version of Brainery currently distributed through Google Play: that version contains the upgrade, the purchase and Restore Purchases controls, and the RevenueCat component described above. This section describes what that version contains and what it sends; it is not a claim that any particular purchase will go through, which depends on the store.

Local challenge systems

BrainBot is a local pace benchmark, not an online opponent. It is separate from Live Friend Race, the optional real-time online mode described below.

Optional analytics (Firebase Analytics)

Brainery includes Google's Firebase Analytics so we can see which puzzles people actually play. Collection is gated by a consent marker Brainery keeps on your device: the marker starts out unset, and while it is not switched on, no analytics data is sent. It is switched on only by the welcome card's Let's play or Allow button, or by Turn on in Settings, and switched off by No thanks or Turn off.

The welcome card. Whenever Brainery has no stored analytics decision — normally the first time you open the app — you see a card headed Welcome to Brainery! with links to this policy and to our Terms. It says that we collect basic gameplay stats, such as which puzzles you play, to help make the game better.

Neither card is closed by the Back button or by tapping outside it, and neither of those counts as an answer. If you close the app while the card is open, nothing is recorded and the card appears again next time. Once you have answered, you are not shown it again — and a decision you made before this version, either Allow or No thanks, is kept exactly as it was: an earlier No thanks stays off and is never asked again.

How Brainery decides which card you see. It looks only at two settings on your device: its time zone and the regions of its preferred languages. If either points to the EEA, the United Kingdom or Switzerland — or if the time zone cannot be read or names no place — you see the card with Allow and No thanks. Nothing is sent anywhere to make this decision, and no location permission is used.

What “basic gameplay stats” means: the stats carry no name, email, account or advertising ID. They are not entirely without an identifier: Firebase assigns a pseudonymous app-instance ID to your installation, described below.

Turning analytics off or on. Profile → Settings → Privacy choices shows Gameplay stats: On or Off. Turn off stops Brainery's own analytics recording at once and switches the marker off; Turn on switches it back on. You can change it as often as you like.

This choice is Brainery's own. Google's User Messaging Platform, which handles the advertising-privacy message described under Advertising below, does not grant, deny, suppress or replace it. An advertising-privacy form is not a way of answering this question, and answering this question is not a way of answering that one.

What analytics collects while it is on

If — and only if — analytics is on, Firebase Analytics collects the following. This choice covers Firebase Analytics only: Google's handling of advertising data on Android and iOS is separate, and is described under Advertising.

Those three parameters above are the ones Brainery defines. The information in this list is collected by Google's SDK itself, separately from Brainery's custom event.

Brainery calls no screen-tracking API of its own. Google's SDK reports native screens automatically, and Brainery draws every puzzle inside a single native screen — so that reporting does not identify which tab you opened or which puzzle you were on. Brainery's own code sends no advertising events to Analytics.

Purchases are a separate case. Brainery defines no purchase event of its own. Google's SDK can measure Play Store purchases without any code in the app, logging an in_app_purchase event — but only once the app has been linked to Google Play from the Firebase console. That link had not been set up when we last checked, on September 23, 2026: the Firebase project still offered linking to Google Play as a step that had not been started, so this automatic measurement of Play purchases was not running.

Two limits on that. It describes a console setting, which can be switched on later — if it is, this policy will be updated before a version ships with it. And it is about the Google Play link only: it is not a claim that Google records nothing about purchases anywhere, and it is not a statement about iOS, where purchase measurement does not depend on this setting. What holds either way is that Firebase Analytics is governed by the consent described in this section — while analytics collection is off, Firebase Analytics collects nothing at all — and that all of this is separate from the purchase verification described earlier, which RevenueCat performs whatever you choose about analytics, and from the advertising data Google's Mobile Ads SDK handles on Android and iOS, described under Advertising.

What analytics never sends

Brainery's own module_start event uses a closed format with no free-text field, so Brainery never sends the following in it. This describes Brainery's custom event, not the automatic information Google collects, which is described above.

Analytics retention, and what stopping does

Event-level and user-level analytics data are set to a two-month retention period, and "reset user data on new activity" is off, so continued play does not extend it. Google deletes expired data in a monthly process, so records may persist until that cycle runs rather than disappearing at exactly two months. Google's standard aggregated reports — counts and totals that do not identify an installation — are not governed by that retention setting and may persist longer.

Stopping is forward-looking. Turning analytics off prevents future analytics collection only. It does not delete data already collected, and it is not a retroactive erasure request. It also only governs analytics: it does not switch off purchase verification and the ownership check, which are how the app knows what you own, and it does not affect Live Friend Race, which connects when you choose to play a race. We are not able to single out and immediately erase the historical analytics records belonging to a particular install, but you can send any privacy or deletion question to hello@aralabs.dev.

How Analytics is configured. Analytics does not use Google Signals, is not linked to any Google Ads account, has the optional Analytics data-sharing settings switched off, and keeps Firebase's advertising-personalization signals disabled. On iOS, Brainery never asks for App Tracking Transparency permission and shows no tracking prompt, so neither Analytics nor Google's Mobile Ads SDK can read Apple's advertising identifier (IDFA).

Advertising

The Android and iOS apps both show ads. Brainery shows ads from Google AdMob, and only in Campaign and Daily puzzles — never during a Live Friend Race, a BrainBot game or a challenge-code game. The same rules apply on both platforms.

Who sees ads. Ads are shown only when Brainery has confirmed that you do not own Ad-Free + Unlimited Hints. If ownership cannot be confirmed — for example while the purchase system is unreachable — no ad is requested or shown. If you own it, Brainery never sends an ad request for you, never shows you an ad and does not show you Google's consent form. It may still ask Google's consent tool, the User Messaging Platform, about an advertising choice you made earlier, so that choice stays reviewable. Both apps still contain Google's Mobile Ads SDK whether or not you own the upgrade, and on Android the SDK's startup component may run when the app launches.

What Google collects. On Android and iOS, ads are requested and shown by Google's Mobile Ads SDK, and advertising-privacy messages by Google's User Messaging Platform. The SDK is included in both apps for every player, whether or not they own the upgrade. Google states that the SDK automatically collects and shares your device's IP address (which may be used to estimate general location), interactions such as app launches, taps and ad video views, diagnostic information such as app launch time, hang rate and energy usage, and device identifiers such as the app set ID on Android, for advertising, analytics and fraud prevention, and that this data is encrypted in transit. On iOS, the SDK lists the data it collects in its own privacy manifest. Google describes its use of this data in the Google Privacy Policy and in How Google uses information from sites or apps that use our services.

What Brainery requests. Brainery asks Google for non-personalized ads, with the maximum ad content rating set to general audiences. Brainery removes the Android advertising-identifier and ad-services permissions from the app, so the Android Advertising ID is not available to it. On iOS, Brainery never asks for App Tracking Transparency permission, so Apple's advertising identifier (IDFA) is not available to it. Brainery's ad requests name only the ad slot and those settings; Brainery adds no name, email, Support ID, game progress or race data to them.

On iOS, Brainery always asks Google for limited ads. Before any ad is requested, Brainery sends Google the signal for its limited ads mode, for every player, and there is no setting that turns it off. According to Google, limited ads switch off personalization and the features that need an identifier stored on your device, which Google says means no identifier-based ad personalization, no identifier-based or in-app conversion tracking, no unique-reach measurement and no frequency capping. Brainery also switches off Google's publisher first-party ID and sets Google's publisher privacy treatment to non-personalized, in addition to asking for non-personalized ads on every request.

What this does not mean. It does not mean Google receives nothing. To show an ad at all, Google still receives your device's IP address, and it may still record that an ad was delivered and shown, how you interacted with it, and diagnostic information, and may still use data to detect and prevent fraud and abuse. Google may also still measure how ads perform, and limited ads can be filled through programmatic advertising, which can involve ad buyers other than Google. Limited ads served programmatically may also use storage on your device for fraud detection only. It also does not mean that no app-install attribution happens: Brainery includes Apple's SKAdNetwork, which lets Apple tell an advertiser that an install came from their ad without giving anyone an identifier for you or your device. That is Apple's privacy-preserving alternative to tracking, and it is unaffected by limited ads. Google also publishes a privacy manifest with its advertising SDK. It is the same for every app that uses the SDK, whatever settings that app chooses, and it says the SDK may use a device identifier for tracking; Brainery cannot change that file. What Brainery controls is the set of requests described here. How Google, and any other ad buyer involved, then handles data is governed by Google's own policies, linked above.

Your advertising choices. Google's User Messaging Platform — not Brainery — decides whether an advertising-privacy message is required where you are; Brainery does no country detection of its own. (The device-settings check described under analytics only chooses which welcome card you see; it is never used for ads.) When the User Messaging Platform reports that a message is due, Brainery shows Google's message before requesting ads, after the welcome card described above has been answered; the two choices are independent. Brainery requests ads only when the User Messaging Platform reports that ads may be requested; otherwise no ad is requested, and hints keep working with the normal wait. Where the User Messaging Platform reports that advertising privacy options are required, Profile → Settings → Privacy choices → Advertising privacy options lets you review or change your choice.

Children's privacy

Brainery does not knowingly collect personal information from children under 13. There is no Brainery account, no login, and no chat, and the data the app can send is described section by section above.

One thing is worth a parent's attention. If a child plays Live Friend Race, the display name chosen in the app is sent to the game server so the other player can see who they are racing, as described in the Live Friend Race section below. Brainery never asks for a real name and does not need one — but that field accepts whatever is typed into it, so a child who enters their real name will send it. The name can be changed in the app at any time, and it is only sent when someone chooses to host or join a race.

On Android and iOS, ads are shown as described under Advertising to players who do not own the upgrade. Brainery requests them non-personalized, with the maximum ad content rating set to general audiences. Where an advertising-privacy message appears, it is Google's message rather than a Brainery screen, and it does not change the analytics answer described above.

Brainery also offers a paid upgrade, which is bought through the store account on the device; purchases and any parental controls over them are handled by Google Play or the App Store, not by Brainery. If you are a parent and believe your child has provided personal information, please contact us at hello@aralabs.dev and we will assist.

Live Friend Race (optional online mode)

Live Friend Race is a separate flow from analytics. Race data goes to Brainery's own game server so two players can race; it is never sent to Google Analytics. Brainery sends no custom race events or race-specific analytics payloads. Automatic app/session measurement may continue during a race while analytics is on.

Live Friend Race is an optional real-time 1-v-1 mode you start by hosting or joining with a short room code shared privately with a friend. There are no public rooms, no matchmaking with strangers, no chat, and no friend lists or contacts access. It uses the network only while you are setting up or playing a race.

While you are in a race, Brainery sends the following to the game server so the two players can race in real time:

As with any internet connection, your device's network/IP information is visible to our infrastructure provider (Cloudflare) as part of carrying the connection.

Live Friend Race does not send or store: the puzzle's solution or answer cells, your full board contents, any device identifier or advertising ID, your contacts, your location, or any analytics events.

Storage and retention. A live match is held as short-lived retained room state on the server (a Cloudflare Durable Object) — it is stored and reused across reconnects and rematches while the room lives, not discarded after each message. Cleanup is normally scheduled for about 60 seconds after a result. Requesting the next round or a rematch cancels that cleanup timer so the match can continue. Room expiry remains scheduled for 30 minutes after the room was created. These are normal operating times, not guaranteed deletion deadlines during service or storage failures. A brief disconnect holds your place for about 30 seconds. The recent puzzle IDs above are retained as part of the room state and use the same cleanup process. There is no account, no permanent profile, no leaderboard, and no saved match history on the server.

Security. The connection uses a secure WebSocket over TLS, so all Live data is encrypted in transit. Your reconnect token is kept on the server only as a one-way hash, never in plain text.

Operational logs. Separately from the room state above, our hosting provider, Cloudflare, records an operational log entry for each request the game server handles, including the address requested. The address a Live connection opens contains the room / join code, so the code can appear in those logs. Those logs are currently retained for three days, so that a dropped match or a service fault can be investigated. Your display name, your avatar colour and your reconnect token are sent inside the encrypted connection, not as part of that address.

Data deletion requests

You can ask us to delete the customer record our purchase system, RevenueCat, holds for you — the one identified by your Support ID. Send the request to hello@aralabs.dev. It is a monitored address, and we will acknowledge your request and respond within the time required by applicable law. You can make this request without uninstalling Brainery. It is not free of consequences, though: if you bought the upgrade, deleting the record removes what tells this installation you own it, so the upgrade can stop working until you use Restore Purchases — which is the ordinary way to recover it, but which we cannot promise will succeed in every case. Other data described in this policy is covered differently, and the rest of this section explains how.

Include your Support ID. Brainery has no account and no login, so there is nothing for us to look you up by unless you tell us. The purchase system identifies you by a Support ID that the app can show you: open Profile → Settings → Privacy choices, find Support ID, and tap Copy, then paste the copied value into your email. If the panel says the Support ID is unavailable, wait for the app to finish loading and try again.

The shortened value on screen is not enough. To keep the identifier out of screenshots and screen shares, the panel never displays it in full. If the identifier begins with the fixed prefix $RCAnonymousID:, the panel removes that prefix, then displays only the first four and last four characters of the remaining value, with three dots between them. That shortened form cannot be used to find your record. Copy places the complete, unmasked identifier on your clipboard, and only that complete value works, so please paste it rather than typing what you can see.

What a deletion covers. On request we will delete the customer record the purchase system holds for your Support ID, which is the purchase and entitlement history associated with it. Game progress is stored locally on your device, and we never receive it. Clearing the app's data removes it, and uninstalling the app can remove it, but your device's backup or transfer features may restore app data. Live Friend Race data expires on its own, as described above. Analytics is different: if it was on, stopping analytics prevents future collection but is not a retroactive erasure, and we cannot single out and immediately erase historical analytics records for one installation. A deletion request made with your Support ID does not delete data Google handles for ads: on Android and iOS, that data is collected by Google's Mobile Ads SDK, as described under Advertising, and your Support ID is not part of it.

Deleting is not the same as stopping. A deletion removes the record that exists at the time we act on your request. It does not switch the purchase system off, and it cannot reach back into your device. Opening Brainery again can create a new record — and because the identifier is stored on your device rather than issued each time, that new record may carry the same Support ID as the one we deleted. We would rather tell you this than let you believe a single email ends the matter.

If you want no further records created. Stopping use of the app prevents further records from this installation. Using the app again may create records. Be aware that uninstalling Brainery can also remove your game progress, which is stored locally on your device. Your device's backup or transfer features may restore app data, but we cannot restore your progress for you because we never receive it.

What a deletion does not do. Deleting your purchase record does not cancel and does not refund anything you bought. Billing, cancellation and refunds are handled by Google Play or the App Store, not by Brainery, and you manage them through your store account. The deleted record is what linked your device to your purchase, so if you keep using Brainery you may need Restore Purchases in the app to regain the upgrade. That asks the store for your purchase again; it is the ordinary way to recover an upgrade, but we cannot promise it will succeed in every case, and it creates purchase records again for the identifier on your device.

What we will never ask you for. We will never ask for your password, your card or payment details, or a government identity document. If a message claiming to be from us asks for any of those, it is not from us.

Website

The ARA Labs website is static. It uses Google font files, but Next.js downloads them at build time and self-hosts them with the deployed website, so your browser does not contact Google to load them. The website itself uses no tracking, no analytics, no cookies, and no advertising. The website is separate from the game: the in-app analytics described above does not apply here.

Changes to this policy

If we update this policy, the changes will be reflected here with an updated date. If the optional analytics, the optional Live Friend Race mode, or any other networked feature changes what is sent, this policy will be updated before that version ships.

Contact

Questions about this privacy policy, or a request about data already collected, can be directed to hello@aralabs.dev.

Who processes data for us. Three companies handle data on Brainery's behalf and under our instructions, as service providers: Cloudflare carries and briefly stores Live Friend Race matches, Google Analytics processes the optional analytics you can turn off, and RevenueCat records purchases and what you own. On Android and iOS, Google also receives the advertising data described under Advertising through its Mobile Ads SDK, and uses it as Google describes there. We do not sell your data. Apart from that advertising data, we do not share your data for advertising. How Analytics is configured is described under Analytics retention above.