This policy explains what the Tap Counter Pro Android app (com.kaitoo.tapcounterpro) does with data. It describes the app as it is actually built, not a generic template.
The short version. Your counters are stored on your phone. Creating an account and backing up to the cloud are optional — the app is fully usable without either, and if you never sign in, none of your counter data ever leaves your device. The free version shows ads from Google AdMob and asks for your advertising-consent choice first where the law requires it. Release builds send anonymous, aggregated usage events and crash reports to Google's Firebase; these never include your counter names, your e-mail address, or any identifier that points back to your account.
Tap Counter Pro is developed and published by an independent solo developer. For anything in this policy — questions, access requests, deletion requests — write to tapcounterpro@gmail.com. That address is monitored by the developer personally.
By default, everything the app knows about you stays on your phone, in the app's private storage. Nothing here is uploaded unless you deliberately turn on cloud backup (section 5) or export a file yourself (section 9).
counter_first_tap analytics event fires once per counter instead of on every tap. These IDs are never sent anywhere — the event itself carries no parameters.A local flag mirrors what Google Play reports about your purchases. It is refreshed from Google Play, not from any server of ours.
The free version shows ads supplied by Google AdMob: a banner on the counter list and, at most once every three minutes, a full-screen ad when you open the Statistics tab. Buying Pro removes all ads, and Pro users are never asked for advertising consent because there is nothing to consent to.
Before the app requests a single ad, it runs Google's User Messaging Platform (UMP) consent flow. Until that flow returns an answer, the banner renders nothing and the full-screen ad refuses to load — the app will not request an ad while your choice is still unknown. Three outcomes are handled:
Where Google tells the app that a privacy-options entry point is required, Settings → About → Ad privacy settings reopens the UMP form so you can change your choice at any time. Outside regulated regions that row is hidden, because there is no stored choice to change.
Ad serving is Google's processing, not ours. To serve and measure ads, the Google Mobile Ads SDK may process your device's advertising ID, IP address, coarse location derived from it, device and app information, and ad interaction data, in line with your consent choice. We never see, store or receive this data ourselves, and we do not run our own ad server. You can reset or delete your advertising ID at any time in Android Settings → Privacy → Ads.
See how Google uses information from apps that use its services and the AdMob privacy information.
Release builds of the app send usage events to Google Analytics for Firebase and crash reports to Firebase Crashlytics, so that bugs can be found and the app improved. Debug and development builds send nothing at all — collection is switched off explicitly.
The analytics layer is written so that identifying information cannot leak into it:
setUserId anywhere. Analytics data is not linked to your account, even if you have one.| Event | Information attached |
|---|---|
paywall_viewed | which feature gate opened the upgrade screen |
purchase_started, purchase_completed | the Google Play product ID (e.g. monthly / yearly / lifetime) |
purchase_failed | whether it was cancelled or errored |
restore_purchases | restored / none / error |
onboarding_complete | completed or skipped |
counter_created | whether it has a goal, whether it has a cycle, and whether it was created from the button or the tour — never the counter's name |
goal_reached | the configured goal behaviour |
cycle_completed | nothing |
reminder_set | nothing — not the time, not the counter |
full_screen_entered | nothing |
theme_changed | the chosen theme |
language_changed | the chosen language code |
backup_created, backup_restored | nothing — not the contents, not the size |
counter_first_tap | nothing |
screen_view | the navigation route name only |
| Property | Values |
|---|---|
is_pro | true / false |
counter_count_bucket | 0, 1-2, 3-5, 6+ — a bucket, never the exact number |
app_language | the app's language code |
Beyond the events above, the Firebase SDKs collect a standard baseline that we do not control in detail: a randomly generated app-instance identifier, automatically collected events such as first open and session start, and — with each crash or non-fatal error report — a stack trace plus diagnostic context such as device model, operating-system version, app version and the state of the app at the time. Unhandled JavaScript errors are reported to Crashlytics as non-fatal errors. Crash reports are not written by us and can, in rare cases, contain fragments of technical state; they are not designed to and are not intended to carry your counter contents.
See the Firebase privacy and security information and Google's Privacy Policy.
Being straightforward about a limitation: the app does not currently offer an in-app switch to turn analytics and crash reporting off. If you want them stopped for your device, e-mail tapcounterpro@gmail.com and we will tell you what we can do; uninstalling the app also ends all collection.
Everything in this section only happens if you choose it. There is no requirement to create an account. Every counting feature, statistics, reminders, the widget, local backup files and the Pro upgrade all work while signed out.
The app uses Supabase for authentication and backup storage. You can sign in in two ways:
Inside the app, the only account details held are your user ID and e-mail address, plus session tokens stored locally on the device. Your password is never stored by the app.
If you turn on cloud backup, the app uploads a single snapshot of your counter data — counters (including their names and emoji), tap history, daily summaries, groups and reminder times — to your own row in a Supabase database. It is stored as one row per user containing your user ID, the snapshot, and the time it was last written. Each new backup replaces the previous one; there is no version history.
The backups table has PostgreSQL Row Level Security enabled, with policies for select, insert, update and delete that all require the requesting user's ID to equal the row's owner. The app ships only Supabase's public "anon" key, which by design grants nothing beyond what those policies allow. Deleting the account cascades to the backup row.
Supabase acts as our processor for this data. See the Supabase Privacy Policy. Google sign-in is covered by Google's Privacy Policy.
To remove your account and cloud backup, see Delete your account and data.
The Pro upgrade is sold through Google Play Billing as a monthly subscription, a yearly subscription or a one-time lifetime purchase. The entire payment flow happens inside Google Play.
Purchases, refunds and subscription management are governed by Google Play's Terms of Service and Google's Privacy Policy.
Daily reminders are local notifications only. They are scheduled on your device by the Android system; nothing is sent to a server, and no push-notification service is used. The reminder text contains the counter's name and is displayed only on your device. On Android 13 and later the app asks for notification permission the first time you enable a reminder — never at startup. Reminders re-register themselves after a reboot. You can turn them off per counter or revoke the permission in Android settings.
The widget reads the selected counter from the local database and renders on your home screen. It performs no network activity.
Settings offers an export that hands your backup data to Android's share sheet, and an import that reads a file you pick with the system document picker. Where an exported file goes — another app, a cloud drive, a message — is entirely your choice, and once it leaves the app it is outside our control. We do not upload these files anywhere.
| Permission | Why |
|---|---|
INTERNET | Ads, analytics and crash reporting, and — only if you use them — sign-in and cloud backup. |
VIBRATE | Haptic feedback when you tap a counter. |
POST_NOTIFICATIONS | Daily reminders, requested only when you enable one. |
RECEIVE_BOOT_COMPLETED | Re-registering your daily reminders after the phone restarts. |
The app requests no location, camera, microphone, contacts or file-system permissions. It deliberately does not request the exact-alarm permission; reminders use inexact scheduling instead.
Google (AdMob, Firebase, Google Play) and Supabase operate global infrastructure and may process data outside your country, including in the United States. They provide their own transfer safeguards, described in their privacy policies linked throughout this page. We do not operate any servers of our own.
If you are in the EEA, the UK, or another region with comparable law, you have the right to access, correct, delete, restrict and object to the processing of your personal data, and to data portability. In practice:
Our legal bases are: performing the service you asked for (your account and cloud backup), your consent (personalised advertising, and notifications), and legitimate interests in keeping the app working and funded (non-personalised advertising, aggregate analytics and crash diagnostics).
Tap Counter Pro is a general-purpose utility. It is not directed at children, and it does not ask for anyone's age. The app implements no age gate or age screening, so we make no claim to operate a service designed for children under 13, and we do not knowingly collect personal data from them. If you believe a child has created an account, e-mail tapcounterpro@gmail.com and we will delete it.
Data on your device is stored in the app's private storage, protected by Android's app sandbox. Traffic to Supabase, Google and Firebase uses HTTPS. Cloud rows are isolated per user by database-level Row Level Security. No method of storage or transmission is perfectly secure, and this policy does not claim any certification, audit or formal security guarantee — none has been performed.
If this policy changes, the updated version is published at this address with a new "Last updated" date. Material changes will also be noted in the app's release notes.
E-mail tapcounterpro@gmail.com for any privacy question or request. We aim to reply within 30 days.