Last updated: October 22, 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 Mahj Trainer 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, the tile names you ask it to read, or the answer you give to a practice question. It sends back lessons, questions, a checked answer or a rack read. It has no account and no database, and nothing is linked to your ChatGPT identity.
The server keeps nothing after it answers. It writes no logs, and Cloudflare's Workers Logs, Logpush and tail workers are all turned off for it, so no copy of your tiles, questions or answers is stored. Cloudflare carries each request as our host and, like any web host, processes your IP address and request details to deliver it and protect its network, and keeps that data only as long as Cloudflare's privacy policy allows. OpenAI handles your conversation under OpenAI's privacy policy. You can remove the plugin any time in ChatGPT's settings.
The Mahj Trainer connector for Claude runs on the same Cloudflare Workers server. When Claude calls it, the server receives only what the tool needs: a lesson or practice topic, a mah jongg term, the tile names you ask it to read, or the answer you give to a practice question. It sends back lessons, questions, a checked answer or a rack read. It has no account and no database, and nothing is linked to your Claude identity. It never reads your conversation history, memory or files.
The server keeps nothing after it answers, exactly as described under Mahj in ChatGPT: no logs, no stored tiles, questions or answers, and Cloudflare carries each request only as our host. Its interactive cards load no outside content beyond the font Claude itself supplies. Anthropic handles your conversation under Anthropic's privacy policy. You can disconnect or remove the connector any time in Claude under Customize › Connectors. Questions about this section go to jackwallner+m@gmail.com.
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. The ChatGPT plugin and the Claude connector keep nothing past each request, as described under Mahj in ChatGPT and Mahj in Claude.
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.