Privacy Policy

Last updated: 2026-10-13

1. Plain-English summary

This is the short version. The legal-grade detail is in the sections below.

What we store

  • Your child's progress and accuracy
  • A display name (the first profile starts as "Player 1")
  • An optional account email (for sync across devices)
  • An optional friend list (off by default)
  • Game-usage events, such as “level finished”, with no names attached (see § 6)

What we don't

  • No GPS or precise location
  • No photos or contacts
  • No advertising identifiers (no IDFA / AAID)
  • No ads, and no tracking across other apps

Friends

  • Friends are off by default
  • No chat, no voice, no messages
  • Only display names and progress are visible to friends you add

2. Who we are

MathQuest is built and operated by Daniel Han, an independent developer. For the purposes of GDPR and similar laws, Daniel Han is the data controller for any personal information processed through MathQuest.

The legal name, business form, and country of operation that appear on App Store filings are the controlling versions of these details. To reach the data controller, write to mathquest@danielhan.dev.

3. What we collect

MathQuest collects only the information needed to save your child's progress, offer the optional features below, and find and fix problems in the game (see § 5 and § 6).

  • Progress and accuracy. Which levels have been completed, how many stars each level earned, recent answers, and per-level accuracy. Used to render the world map and adapt difficulty.
  • Display name. A name for your child’s profile. The first profile starts as “Player 1”; a parent can rename it, or name a new profile, in Settings → Parents. (Earlier versions of the app asked your child for a name during onboarding.) Used to label their save and (if friends are enabled) appear on a friend's screen.
  • Account email (optional). If you create an account so progress syncs across devices, your email is stored to identify the account.
  • Friend list (optional, off by default). If you turn on friends, the display names and progress of users you have added.
  • Anonymous device identifier. A randomly-generated Firebase user ID, used to scope a save file to its device when no account is created.
  • Purchase receipts. Apple App Store or Google Play receipts for any in-app purchases, used to verify entitlements.
  • Game-usage events. Short records of what happens in the app, for example “a level was started”, “a gate was answered correctly” or “the world map was opened”. § 6 lists every one.

4. How we use it

The information above is used only for the following purposes:

  • To render and persist your child's progress so the next session continues where they left off.
  • To sync that progress across devices when you create an account.
  • To verify and restore in-app purchases.
  • To populate the friends list, only if you turn on the friends feature.
  • To find and fix problems in the game, using the usage events and crash reports described in § 5 and § 6.

We do not use any of this information to build advertising profiles, sell data to third parties, or train machine-learning models. We do not track your child across other apps or websites, and we do not run ad networks or marketing-attribution SDKs.

5. Crash diagnostics

To find and fix bugs that would otherwise cause MathQuest to crash on your child's device, we use Firebase Crashlytics, a crash-reporting service operated by Google LLC. When the app crashes, or runs into an error such as failing to check a purchase, Crashlytics sends a diagnostic report to Google on our behalf. Each report contains:

  • A randomly-generated Crashlytics installation identifier (a UUID assigned by the SDK; not the IDFA or any advertising ID).
  • The Firebase user ID of the active session (anonymous by default; the same opaque ID we use to scope save data — never your child's name or email).
  • Device characteristics: model, operating system version, CPU architecture, RAM, free disk space, jailbreak / root status, screen orientation.
  • App metadata: bundle identifier, version number, locale.
  • The crash trace itself: stack trace, thread state, binary image references, exception class and message.
  • For some errors, a short reason label we attach naming the step that failed (for example, entitlement_cloud_read or sync_failed). These never contain answers, names, friends, or progress data.
  • The game-usage events described in § 6 that were logged earlier in the same session. Firebase attaches these to the crash report automatically, so we can see what led up to the crash.

Crashlytics does not collect IDFA, location, photos, microphone audio, contacts, or browsing history. Reports are retained by Google for 90 days and then removed from live and backup systems. The full list is published in Firebase's privacy reference.

We rely on Crashlytics solely to maintain and improve the app — specifically, to identify crashes, diagnose their cause, and ship a fix. We do not use Crashlytics data for advertising or profiling, and we do not combine Crashlytics reports with the display name, email, friends list, or progress we hold.

Legal basis. In the United States, this collection is covered by COPPA's “support for internal operations” exception, which permits operators to collect a persistent identifier without verifiable parental consent solely for purposes including maintaining or analyzing the function of the service and protecting its security or integrity. In the EU/EEA and the UK, our legal basis is legitimate interest in keeping MathQuest stable and free of crashes; the processing is balanced against children's privacy by collecting only diagnostic data, never combining it with personal information, and using a randomly-generated identifier rather than an advertising ID.

6. Game-usage analytics

To learn where children get stuck and whether the game works on every kind of device, MathQuest uses Google Analytics for Firebase, an analytics service operated by Google LLC. The app sends a short event to Google when certain things happen. Each event carries a few details about that moment. Events never contain your child’s name, display name, email, friend code, or anything typed into the app.

Events the app sends

  • Playing a level. A level was started, finished, failed, left from the pause menu, or interrupted because the app went into the background. Details: the world and level, stars, score, accuracy, time taken, how far through the level the player got, gates solved, hearts left, whether the screen was in portrait or landscape, and which controls were used.
  • Answering a gate. One event per answer: the kind of math (for example, addition), whether the answer was right, and which attempt it was. The number chosen is not sent.
  • Adventure Mode. A run was started, a challenge was finished, or a run ended, with its score and accuracy.
  • Screens. Each screen that opens, named by its place in the app (for example, the world map or a level). Pop-up dialogs are not included.
  • Purchases. A purchase screen was shown and what opened it (for example, a locked level or theme), the parental gate was shown or passed, and a purchase was started, completed, or restored, with the product, price, and store.
  • App and settings. The app was opened (whether it is the first launch, the app language, and whether an account is signed in), a world was chosen, and the hero, color theme, language, measurement units, or sound settings were changed. Also: an account was created or linked, a profile was created or switched (identified by a random internal code, not its name), progress sync finished or failed (counts and error type only), an update reminder was shown or tapped, and a store review prompt was requested.
  • Friends (only when a parent has turned Friends on). Friends were turned on or off, a friend was added or removed (the number of friends only), the friend code was shown or replaced, adding a friend failed (the reason only), or the ranking was viewed.

The full list of event names, for anyone who wants to check: level_started, level_completed, level_failed, level_quit, level_backgrounded, gate_answered, adventure_started, adventure_challenge_completed, adventure_run_ended, screen_view, screen_viewed, paywall_shown, parental_gate_shown, parental_gate_passed, purchase_started, purchase_completed, purchase_restored, app_opened, world_selected, species_changed, theme_changed, locale_changed, measurement_changed, audio_toggled, account_created, account_linked, profile_created, profile_switched, sync_completed, sync_failed, update_reminder_shown, update_reminder_later_tapped, update_reminder_update_tapped, in_app_review_requested, friends_enabled, friends_disabled, friend_code_shown, friend_code_regenerated, friend_added, friend_add_failed, friend_removed, leaderboard_viewed.

What Google Analytics adds on its own

  • Standard app events: first launch, start of a session, time spent in the app, app updated, operating system updated, and in-app purchase. On Android it also records when the app’s data is cleared or the app is removed. When the app crashes or reports an error (see § 5), it records that this happened.
  • Device details: device brand and model, operating system and version, device language, app version, and which store the app came from.
  • Approximate location: Google estimates the country, region, and city from the network (IP) address. The app never reads GPS or any precise location.

Identifiers

Events from one installation are grouped by an app instance ID, a random ID that Google Analytics creates when the app is installed. On iPhone and iPad, Google Analytics also reads Apple’s identifier for vendor (IDFV), an ID shared only by apps from the same developer on that device. We do not attach the Firebase user ID, account email, or display name to these events. Crash reports are the one exception: a crash report carries the Firebase user ID, and Firebase adds the events from that session to it (see § 5). Crash reports are deleted after 90 days.

No advertising identifier is used. On Android, collection of the advertising ID (AAID) is switched off in the app. On iPhone and iPad, the app never asks for Apple’s tracking permission, so the advertising identifier (IDFA) is not available to it.

How we use it

We read these events in Google Analytics reports, as totals and per installation, for these purposes only:

  • to find levels where children get stuck or give up, and make them better;
  • to check that the game works on each kind of device, screen orientation, and control scheme;
  • to check that purchases, restores, and progress sync work from start to finish;
  • to decide which problems to fix first.

We do not use these events for advertising, do not sell them, do not use them to contact your child, and do not combine them with the name, email, or progress stored in an account. Google deletes the details of each event after 14 months. The identifiers for an installation are deleted 14 months after the app was last used; each new use restarts that clock. Totals in Google’s standard reports, which are not tied to any installation, are not deleted on this schedule. There is no switch inside the app to turn these events off. Because the events carry no name, email, or account, we cannot pick out one child’s events to delete them; they are deleted on the schedule above. Questions are welcome at mathquest@danielhan.dev.

Legal basis. In the United States, we rely on COPPA’s “support for internal operations” exception: the app instance ID and IDFV are used only for the purposes listed above, which maintain and analyze how the game functions. In the EU/EEA and the UK, our legal basis is legitimate interest in keeping MathQuest working and improving it, balanced by sending no names or contact details, using no advertising identifiers, and never using the data for advertising.

7. What we do not collect

To make this concrete, MathQuest does not collect, request, or transmit any of the following:

  • GPS, precise location, or any geofencing data. (Google Analytics estimates country, region, and city from the network address; see § 6.)
  • Photos, camera frames, microphone audio, or contacts.
  • Apple's IDFA, Google's AAID, or any other advertising identifier.
  • Tap heatmaps, screen recordings, or session recordings.
  • Browsing history, installed apps, or device fingerprints beyond the identifiers described in § 3, § 5, and § 6.
  • Any biometric or health data.

8. Service providers (sub-processors)

To run MathQuest, we share some information with the following service providers. Each is bound by their own published privacy policy and by data-processing terms with us.

  • Google LLC (Firebase Authentication, Cloud Firestore). Stores the anonymous user ID, optional account email, save data, and friend list. Data is held in Google data centres in the United States and the European Union.
  • Google LLC (Firebase Crashlytics). Receives the crash-diagnostic reports described in § 5 above. Reports are retained for 90 days and used solely to fix crashes.
  • Google LLC (Google Analytics for Firebase). Receives the game-usage events, device details, and identifiers described in § 6, and uses the network address to estimate approximate location. Used only for the purposes listed in § 6; never for advertising, profiling, or behavioural targeting.
  • Apple Inc. (App Store). Processes purchase receipts via the iOS StoreKit framework. Apple receives the purchase metadata necessary to bill and refund.
  • Google LLC (Google Play). Processes purchase receipts on Android. Google receives the purchase metadata necessary to bill and refund.

MathQuest does not integrate any third-party advertising network, cross-app tracking SDK, push-notification provider, or marketing-attribution SDK. New sub-processors will be added to this list before they are integrated.

9. Children's privacy

MathQuest is designed for children. We treat every account as belonging to a child by default and apply the strictest applicable child-privacy rules — the United States Children's Online Privacy Protection Act (COPPA), the EU/EEA General Data Protection Regulation as it applies to children (sometimes called GDPR-K), the United Kingdom Age Appropriate Design Code, and equivalent rules elsewhere — to every user, regardless of declared age.

In practice that means:

  • No behavioural advertising. No advertising of any kind.
  • No session recording and no marketing-attribution SDKs.
  • The game-usage events described in § 6 and the Firebase Crashlytics diagnostics described in § 5 are used solely for the “internal operations” permitted by COPPA — running, fixing, and improving the game — and are never combined with personal information about your child or used to build an advertising or marketing profile.
  • Data minimisation. We collect only what the app needs to save your child's progress, to operate optional features you enable, and to find and fix problems as described in § 5 and § 6.
  • A parental gate (a small math puzzle) protects purchases, restoring purchases, and the Parents area, where account creation, profiles, Friends, and the deletion flows live.

If you are a parent or guardian and want to access, correct, or delete the personal information of a child using MathQuest, write to mathquest@danielhan.dev. We will respond within 30 days.

10. Your rights

You can exercise the following rights at any time, for free.

  • Access. Ask us for a copy of the personal data we hold about you or your child.
  • Correction. Ask us to correct anything that is wrong.
  • Deletion. Use the in-app delete flow at Settings → Parents → Privacy → Delete Account (the Parents area is protected by a parental math puzzle), or write to us. This removes your account, the data we hold about it on our servers, and all progress stored locally on the device — the app returns to a fresh start. Game-usage events and crash reports are not linked to your account email and are deleted on the schedules in § 5 and § 6. The factory-reset option on the same screen clears the same local data and can be used even if you never created an account.
  • Objection and restriction. Tell us to stop a particular processing activity. Where the processing is required for the app to function, we will instead help you delete the account.
  • Portability. Ask us to send your data in a structured, machine-readable format.
  • Complaints. If you are in the EU/EEA or the UK, you have the right to complain to your national data protection authority. If you are in California, you have rights under the CCPA/CPRA — including the right to know, delete, and opt out of the sale of personal information. (We do not sell personal information.)

To exercise any of these rights, write to mathquest@danielhan.dev from the email address associated with the account, or from the parent or guardian who created the account on a child's behalf.

11. Changes to this policy

We may update this policy as MathQuest changes — for example, when a new sub-processor is added, when we begin processing a new category of data, or when applicable law changes.

When we do, we update the "Last updated" date at the top of this page. If an app update will collect something new, or use data in a new way, we update this policy before that app version is released.

12. Contact

Privacy questions, deletion requests, and parental data requests all go to a single inbox:

mathquest@danielhan.dev

For non-privacy support, the same address is fine.