Last updated: October 21, 2026
Mahj Trainer works without an account. Practice progress, streaks, review history, onboarding choices, and preferences are stored locally on your device.
Apple (on iPhone and iPad) and Google Play (on Android) process Mahj+ purchases. RevenueCat verifies entitlement status and may process an anonymous app user ID, transaction and entitlement information, and limited technical app or device context. To learn which screens lead to a membership, the app also sends RevenueCat counts of where and how often the Mahj+ offer was shown, the dates of the first offer and of a purchase, how many times the app was opened before the first offer, and which screen a purchase started from. It does not receive your practice content, name, or email. See RevenueCat's privacy policy.
On iPhone and iPad, Send Feedback and the one question asked when a membership is ending send what you write straight to the developer. Supabase stores it. Each message also carries the app version, iOS version, device model, language and region setting, and whether you are a Mahj+ member. No name, email or account is attached. Messages are read to fix problems and improve the app, and are kept only as long as that takes. Because nothing ties a message to you, email us what you sent and roughly when if you want it removed.
On iPhone and iPad, after you play a round of the monthly challenge, the app sends your month score (points and days played) to our Supabase database with a random code that is made on your device and changes every month. No name, email, account or device identifier goes with it. The server answers with how many players have scores that month and how many are below yours, so the app can show where you stand. Nobody, including other players, can read the scores. Scores are used only for that percentage. Because nothing ties a score to you, it cannot be found to remove later.
If you install Mahj Trainer from an Apple Ads search ad, Apple's AdServices framework tells RevenueCat which campaign and keyword led to the install. This uses no advertising identifier and does not track you across other apps. We use it only to measure whether our ads pay for themselves.
To measure whether our Facebook and Instagram ads work, the iPhone and iPad app includes Meta's SDK. It tells Meta when the app is installed and opened. When a free trial is still on 15 minutes after it started, or a membership is bought or renewed, RevenueCat or our own server tells Meta that it happened, without your practice content, name or email. Our server keeps a record of each trial it checks (RevenueCat's anonymous app user ID, the transaction and product IDs and the start time), with no name, email or practice content.
The app asks once, after setup, whether to allow tracking. If you allow it, Meta's SDK can read your device's advertising identifier, and with each trial or purchase event we send Meta that identifier, Meta's anonymous app ID, your IP address and basic device details (model, iOS version, language, time zone and screen size), so Meta can match it to the ad you saw. If you do not, the advertising identifier is never shared and no trial or purchase events about you are sent; the SDK still reports installs and opens with Meta's anonymous app ID, and Apple's anonymous ad reports (SKAdNetwork) still count ad installs. You can change your answer any time in Settings › Privacy & Security › Tracking. See Meta's privacy policy.
The free Mahj plugin for ChatGPT runs on a Cloudflare Workers server we operate. When ChatGPT calls it, the server receives only what the tool needs: a lesson or practice topic, a mah jongg term, or the tile names you ask it to read. It sends back lessons, questions or a rack read. It keeps nothing: there is no account, no database and no log of your tiles or questions, and nothing is linked to your ChatGPT identity. Cloudflare carries the request as our host and, like any web host, processes your IP address and request details to deliver it under Cloudflare's privacy policy. OpenAI handles your conversation under OpenAI's privacy policy. You can remove the plugin any time in ChatGPT's settings.
No account, tracking pixel, analytics beyond the Meta SDK described above, precise location, contacts, photos, microphone, or health data. The advertising identifier is used only as described above, and only if you allow tracking. We do not sell personal information.
Local practice data remains until you delete it or remove the app. Apple, Google Play and RevenueCat retain transaction records as needed to process and restore purchases. Support emails and in-app feedback contain whatever you choose to send and are used to answer or act on it.
Mahj Trainer is not directed at children under 13 and does not knowingly collect personal information from children. We may update this policy when the app or its services change.
Questions? Email jackwallner+m@gmail.com.