Tap Counter Pro

Privacy Policy

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.

Last updated: 2026-07-29

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.

1. Who is responsible

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.

2. Data stored on your device

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 data (local SQLite database)

App preferences (local key-value storage)

Whether your Pro upgrade is active

A local flag mirrors what Google Play reports about your purchases. It is refreshed from Google Play, not from any server of ours.

3. Advertising (free version only)

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.

The consent flow, exactly as implemented

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.

What Google receives

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.

4. Analytics and crash reporting

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.

Deliberate limits

The analytics layer is written so that identifying information cannot leak into it:

The complete list of events sent

EventInformation attached
paywall_viewedwhich feature gate opened the upgrade screen
purchase_started, purchase_completedthe Google Play product ID (e.g. monthly / yearly / lifetime)
purchase_failedwhether it was cancelled or errored
restore_purchasesrestored / none / error
onboarding_completecompleted or skipped
counter_createdwhether 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_reachedthe configured goal behaviour
cycle_completednothing
reminder_setnothing — not the time, not the counter
full_screen_enterednothing
theme_changedthe chosen theme
language_changedthe chosen language code
backup_created, backup_restorednothing — not the contents, not the size
counter_first_tapnothing
screen_viewthe navigation route name only

The complete list of user properties

PropertyValues
is_protrue / false
counter_count_bucket0, 1-2, 3-5, 6+ — a bucket, never the exact number
app_languagethe app's language code

What Firebase collects on its own

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.

5. Optional account and cloud backup

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.

Signing in

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.

Cloud backup

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.

Access control

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.

6. Purchases

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.

7. Reminders and notifications

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.

8. Home-screen widget

The widget reads the selected counter from the local database and renders on your home screen. It performs no network activity.

9. Backup files you export yourself

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.

10. Permissions the app requests

PermissionWhy
INTERNETAds, analytics and crash reporting, and — only if you use them — sign-in and cloud backup.
VIBRATEHaptic feedback when you tap a counter.
POST_NOTIFICATIONSDaily reminders, requested only when you enable one.
RECEIVE_BOOT_COMPLETEDRe-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.

11. Retention

12. Where data is processed

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.

13. Your rights

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).

14. Children

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.

15. Security

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.

16. Changes to this policy

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.

17. Contact

E-mail tapcounterpro@gmail.com for any privacy question or request. We aim to reply within 30 days.