DUPX PRIVACY POLICY
Last Updated: October 24, 2026
1. WHO WE ARE
This Privacy Policy applies to the Android app DupX: Storage & Photo Cleaner ("DupX", "the app"; package com.billionx.phone.storage.cleaner), published by BILLIONX LABS LIMITED (BillionX, "we", "us"). BILLIONX LABS LIMITED is the controller of the personal data described here. Contact: support@billionx.co or billionx.co.
2. YOUR PHOTOS, VIDEOS AND CONTACTS STAY ON YOUR PHONE
We have no user accounts. Your photos, videos and contacts are processed on your phone and are not uploaded to us or to anyone else by the app. We do run a small server of our own for one purpose only: to confirm subscription purchases with Google Play and to measure our advertising (section 3B). It never receives photos, videos, contacts, file names or folder paths.
Photos and videos. With your permission the app reads your photo and video library (file names, sizes, dates, dimensions and small thumbnails) to find duplicate and similar photos, screenshots and large videos. It keeps a small index in a database on your phone: the media ID, file name, type, folder and path, size, dimensions, video length, dates, a 64-bit fingerprint and a checksum of each photo, a quality score, and the list of photos you put in the in-app archive. Thumbnails are kept in memory only. You can allow access to selected photos only (Android 14 and later).
If you do not allow photo access, you can tap "Pick photos to check". Android's own photo picker opens, you choose photos, and the app compares only those. The app does not get access to your other photos and does not save anything about the photos you picked; leaving the screen forgets them.
Video compression. If you compress a video, the app reads it and writes a new, smaller video file to Movies/DupX on your phone. The original stays until you choose to delete it. While compressing, the app keeps the phone awake. Nothing is uploaded.
Contacts. With your permission the app reads your contacts to find duplicates and incomplete entries. They are read when you use the Contacts feature and held in memory only. While a backup is being made, the app uses a short-lived temporary file in its private storage, which it deletes when the backup finishes. The app does not store contacts in its own database. If you confirm a merge or delete, the app first saves a backup file (.vcf) of every affected contact to Download/DupX on your phone. That file contains the contact details (for example names, numbers and emails) and is not encrypted; keep it safe or delete it yourself. A merge copies missing details into one contact and deletes the copies. If a contact is stored in a synced account (for example Google), Android's normal contact sync updates that account too: that is your account provider's service, not an upload by the app. The backup stays on your phone unless you use the Share button, which sends it only where you choose.
Notifications. If you allow them, the app shows reminders (at most one a day, never between 22:00 and 08:00 on your phone). They are scheduled and created on your phone; we use no push server. The app restarts its reminder schedule after you reboot the phone. You can turn reminders off in the app's Settings or in Android settings.
Sharing and support. The Share buttons (a photo, a contact backup file, or a link to the app) open Android's share sheet, and the app sends the item only to the app you choose. "Contact us" in Settings opens your email app with a draft that includes your phone's make, model and Android version and the app version; nothing is sent until you send the email.
Deleting. The app deletes a photo or video only after you select it and confirm in the Android system dialog. It merges or deletes contacts only after you confirm in the app.
3. INFORMATION SENT TO GOOGLE SERVICES (FIREBASE)
The app uses Firebase from Google LLC (Google Analytics for Firebase, Crashlytics, Remote Config and Firebase Installations) for usage statistics, remote settings and crash reports. Google acts as our processor. This data never includes your photos, videos, contact details, file names or folder paths.
- App interactions: which steps and screens you reach (onboarding page, permission prompts and whether you allowed them, scan started or finished with item counts and duration, home screen with the amount you could clean, category opened, delete requested or finished with count and size, free limit reached, swipe session totals and the calendar month reviewed, video compression level and bytes saved, contact merge or delete with a count only, subscription screen shown or closed, restore result, reminder shown or opened, "Delete my data" used), plus your plan (free, trial or Pro) and the week you installed. Why: to understand how the app is used and improve it.
- Purchase events: product, price, currency and transaction ID when you buy or start a trial. Why: to measure revenue and the results of our own ads.
- Crash logs and diagnostics: stack traces, device model, OS version and app state at the time of a crash (Crashlytics, release builds). Why: to find and fix crashes.
- Device and app identifiers: Firebase installation ID (shown in Settings as "User ID"), app instance ID, app version, device model, OS version, Crashlytics installation ID, language, time zone, country, and an approximate location derived by Google from your IP address (the IP address itself is masked). Why: to count users, deliver remote settings and tests, and support you.
- Advertising ID: a resettable ID from Google Play services (the app declares the AD_ID permission). Why: to measure whether our ads led to a purchase, and for usage statistics.
- Install source: the Firebase measurement library may read the install referrer from Google Play (which campaign led to the install). Why: to measure our ad campaigns.
The Firebase library also adds the Android permissions ACCESS_ADSERVICES_ATTRIBUTION and ACCESS_ADSERVICES_AD_ID (Android ad-measurement services); we do not use them for anything beyond that measurement.
No ads in the app. The app shows no ads. We may run ads for the app elsewhere (for example Google Ads), and the data above is used to measure those campaigns. We do not use it to build advertising profiles of you inside the app, and we do not sell your data. You can reset or delete your Advertising ID in Android settings (Settings → Privacy → Ads); if you delete it, apps receive zeros.
Remote settings. The app downloads settings from Firebase Remote Config (for example how often a screen appears). Google receives the identifiers above to do this. New settings apply the next time the app starts.
Firebase's own description of what these libraries collect: firebase.google.com/docs/android/play-data-disclosure and support.google.com/analytics/answer/11582702.
3A. AD MEASUREMENT BY META (FACEBOOK)
The app includes the Meta App Events SDK from Meta Platforms Ireland Limited (users in the European Economic Area, the United Kingdom and Switzerland) or Meta Platforms, Inc. (everywhere else) ("Meta"). We use it to learn whether an ad for the app on Facebook or Instagram led to an install or a purchase, and to improve our own ad campaigns. Meta receives and uses this data under its Business Tools Terms and its own privacy policy (https://www.facebook.com/privacy/policy/), including to measure and improve ads.
What Meta receives:
- Install and app-open events (for example "app installed" and "app opened") with the time they happened and, from Google Play, the install referrer (which campaign led to the install).
- Purchase events: our server (not the Meta SDK in the app) reports to Meta when you start a free trial, make your first payment or your subscription renews, with the product, price, currency and order ID (section 3B). The Meta SDK itself only reports that the app was installed and opened. Google Play remains the seller; Meta never receives your card details.
- Device and app identifiers: your Advertising ID (resettable, from Google Play services), device model, operating system version, app version, language, time zone and your IP address.
What Meta does not receive from the app: your photos, videos, contacts, file names, or the number or size of items on your phone.
When it starts. The Meta SDK is started only after the consent step described in section 5. In the European Economic Area, the United Kingdom and Switzerland it is started only if you agree to all of these: storing or accessing information on your device, creating and using advertising profiles, and measuring ad performance; otherwise the app sends nothing to Meta, not even an install event. Everywhere else it starts when the app opens. You can reset or delete your Advertising ID in your phone's settings (Settings → Privacy → Ads), and you can manage how Meta uses ad data in your Facebook or Instagram settings.
Withdrawing. In the European Economic Area, the United Kingdom and Switzerland you can withdraw your consent at any time in Settings → Privacy choices; the app then switches Meta's data collection off straight away. Data Meta already received is kept by Meta under its own policy; see its privacy policy for how to exercise your rights.
3B. OUR SERVER AND ADVERTISING MEASUREMENT
What we send to our server. If advertising measurement is on for you (outside the EEA, the UK and Switzerland it is on by default; inside those regions only after you choose to consent in the privacy form), the app sends to our server, hosted on Cloudflare, a random installation ID created by the app, your Advertising ID (and whether you limited ad tracking), the Meta SDK's anonymous installation ID, the Airbridge device ID, the Firebase app-instance ID, your IP address, app version, Android version, device model, language, time zone and screen size. The app does this shortly after it first starts and then at most once a day. When you start a free trial or subscribe, the app also sends the Google Play purchase token. Our server then asks Google Play for the status of that subscription (plan, price, trial, renewal, cancellation, refund) and keeps that status. The app does not send the plan or the price itself.
What our server does with it. It reports subscription events to Meta Platforms (through Meta's Conversions API) and to Airbridge (AB180 Inc., a mobile measurement partner, section 3C), which can pass them on to the ad networks we use (for example Meta and Google Ads). The events are: trial started (sent only after a waiting period, and only if the trial has not been cancelled), first payment, renewals, cancellation and refund. Renewals are sent to Meta too; cancellations and refunds are not sent to Meta. Our server also sends subscription events (such as renewal, cancellation, refund and expiry) to Google Analytics for Firebase. Purpose: to learn which ad led to an install and a subscription, and to stop paying for ads that do not work. Meta may receive the same event from both our server and Airbridge; both carry the same event identifier so Meta can count it once.
Legal basis and withdrawal. In the EEA, the UK and Switzerland: your consent in the privacy form (Settings → Privacy choices to change it). Elsewhere: our legitimate interest in measuring our advertising. When you withdraw consent in Privacy choices, the app tells our server, which erases the Advertising ID, the limit-ad-tracking flag, the Meta, Airbridge and Firebase app-instance IDs it holds for your installation; subscription events after that are no longer reported. The installation ID, the IP address and device details (app version, Android version, model, language, time zone, screen size) stay in the installation record until the retention period below ends, and subscription records stay with them. Outside those regions the app has no switch for this: you can reset or delete your Advertising ID in Android settings, which stops that ID only. "Delete my data" does not switch the measurement off, because the app starts again as a fresh install (see section 7).
Retention. A daily cleanup on our server deletes: event records (the log of subscription events we reported) 90 days after they were created; subscription records 400 days after the subscription's expiry date; installation records that have not been updated for 400 days and are not linked to a subscription record. Airbridge's and Meta's own retention applies to what they received (links below).
Recipients. Cloudflare, Inc. (hosting of our server); Google (Play Developer API, Firebase); Meta Platforms Ireland Limited / Meta Platforms, Inc.; AB180 Inc. (Airbridge; privacy policy; data processing addendum). Data may be processed outside your country, including in the United States and in Korea (where AB180 Inc. is based).
3C. AD MEASUREMENT BY AIRBRIDGE (AB180)
The app includes the Airbridge SDK from AB180 Inc. ("Airbridge"). It measures installs and app opens and attributes installs to our ads. It receives your Advertising ID, the Google app-set ID, a device ID that Airbridge generates, device and app information, your IP address and the install referrer from Google Play. It checks whether the Facebook or Instagram app is installed on your phone, for attribution. It starts only after the consent step described in section 5 (in the EEA, the UK and Switzerland, only if you agree to the same three purposes as for Meta). Airbridge also receives the subscription events sent by our server (section 3B). Airbridge acts on our behalf under a data processing addendum.
4. PURCHASES
Subscriptions (weekly, with a 3-day free trial for eligible users, or yearly) are sold and paid through Google Play. Google handles your payment details; we never see your card number. The app asks Google Play whether you are subscribed (status, plan, renewal) and keeps a cached copy on your phone so Pro features unlock. We also receive from Google Play, on our server, the status of your subscription (section 3B). Manage or cancel in Google Play (see our Terms of Use). The in-app rating box, if shown, is Google Play's: we do not receive your rating or text from it.
5. YOUR CONSENT IN THE EEA, UK AND SWITZERLAND
Consent form. If you are in the European Economic Area, the United Kingdom or Switzerland, the app asks for your consent the first time you open it, using Google's User Messaging Platform (the consent form provided through Google AdMob; the app shows no ads). Google determines whether the form applies to you, mainly from your approximate location based on your IP address, and stores your choice on your phone in the standard IAB TCF format.
What your choice controls. We pass your choice to Google Analytics for Firebase as follows: consent to "store and/or access information on a device" allows usage statistics; together with consent to "measure advertising performance" it allows ad-measurement data; consent to "create and use a personalised ads profile" allows ad personalisation. If you do not consent, close the form without choosing, or the form cannot be loaded, these signals stay off for you. Crash reports stay on, because we need them to keep the app working and secure.
Meta. Your choice also decides whether Meta's SDK (section 3A) starts: it starts only if you consent to storing or accessing information on your device, to creating and using advertising profiles, and to measuring ad performance. If you do not, close the form without choosing, or the form cannot be loaded, nothing is sent to Meta.
Our server and Airbridge. In these regions the attribution services of sections 3B and 3C (our server, Airbridge, Meta's Conversions API) do not run unless you consent in the privacy form. Your choice is checked again whenever it changes.
Changing your choice. You can change or withdraw your consent at any time in the app: Settings → Privacy choices. Using "Delete my data" also deletes your stored choice, and the app asks again.
Everywhere else, the consent form is not shown, and usage statistics, ad measurement, the Meta SDK, Airbridge and our server's measurement (section 3B) are on.
Legal bases (GDPR / UK GDPR): your consent (Art. 6(1)(a)) for usage statistics, ad measurement, the Meta SDK, Airbridge and our server's measurement in the regions above; our legitimate interest (Art. 6(1)(f)) for crash reports needed to run and secure the app; performance of a contract (Art. 6(1)(b)) for purchase handling. Outside those regions our legitimate interest (Art. 6(1)(f)) in measuring our advertising covers section 3B.
6. HOW LONG DATA IS KEPT
- On your phone: until you use "Delete my data", clear the app's storage or uninstall. Backup files in Download/DupX and compressed videos in Movies/DupX stay until you delete them.
- Google Analytics for Firebase: event-level data is deleted automatically after the retention period set in our project, which is never longer than 14 months (Google's retention options).
- Crashlytics: 90 days for crash traces and the associated IDs, then removal from Google's live and backup systems (firebase.google.com/support/privacy).
- Firebase installation ID (also used by Remote Config): kept until deletion is requested; Firebase then removes the data within 180 days (same page).
- Purchase records: kept by Google Play under Google's terms.
- Our server (section 3B): event records 90 days; subscription records until 400 days after the subscription's expiry date; installation records until 400 days without an update, and not while a subscription record is linked to them. Advertising identifiers are erased earlier if you withdraw consent in Privacy choices.
- Airbridge and Meta: what they received is kept under their own policies (section 3B).
7. DELETING YOUR DATA
In the app: Settings → Delete my data. This erases the app's database, settings, cached subscription state and daily limits on your phone, asks Firebase to reset analytics data and delete the Firebase installation ID, deletes your stored consent choice, makes the app forget its installation ID and cancels attribution jobs that are waiting to be sent, and restarts the app as if newly installed. Data already received by Google follows Section 6. If you still have an active subscription, the app learns about it again from Google Play after the restart; the subscription is not cancelled.
Our server: "Delete my data" does not contact our server. The records it holds (section 3B) are removed when you withdraw consent in Privacy choices (advertising identifiers only) and otherwise on the schedule in Section 6. Our server identifies your installation only by the random installation ID, which is not shown in the app and is erased from your phone by "Delete my data", so after that we can no longer match those records to your phone. The "User ID" shown in Settings is the Firebase installation ID, which our server does not store.
Not removed by "Delete my data": your photos, videos and contacts (the app never copied them), backup files in Download/DupX, compressed videos in Movies/DupX, and Google Play purchase records. Delete the files yourself in your phone's file manager or gallery.
Uninstall: removes everything the app stores in its own space on the phone.
By email: write to support@billionx.co if you have a question or need help. We have no account for you and cannot look up Analytics events, crash reports or our server's records by the User ID shown in Settings, so the in-app button and the consent withdrawal above are the ways to remove data tied to your phone; you can also email us a request and we will tell you what we are able to find and delete. Data Google, Meta and Airbridge already hold is removed on the schedule in Section 6 and in their own policies. See also our data deletion page.
Your rights: access, deletion, objection, withdrawal of consent and the right to complain to your data protection authority apply where your local law gives them.
8. CHILDREN
The app is for people 18 and over. We do not knowingly collect data from anyone under 18. If you believe a minor has used the app, contact support@billionx.co.
9. SECURITY AND INTERNATIONAL TRANSFERS
Data sent to Google is encrypted in transit (HTTPS/TLS). Google may process data in countries other than yours under its own transfer safeguards. Backup files and the local database are not encrypted by the app beyond what your phone's storage encryption provides.
10. CHANGES
We may update this policy. The new date appears at the top; for material changes we will show a notice in the app.
11. CONTACT
For privacy questions or requests, contact BILLIONX LABS LIMITED (BillionX) at support@billionx.co. See also our Terms of Use and data deletion page.