Privacy Policy — Tprice
Last updated: 2026-11-12 Effective date: 2026-11-12
This Privacy Policy explains how Tprice ("Tprice", "we", "us", "our") collects, uses, stores, and protects personal data of users ("you", "user") of the Tprice mobile application for iOS and Android. It is written to satisfy the European Union General Data Protection Regulation (GDPR), the United Kingdom GDPR, the California Consumer Privacy Act as amended by the California Privacy Rights Act (CCPA/CPRA), the Serbian Law on Personal Data Protection (Zakon o zaštiti podataka o ličnosti, the controller's home-jurisdiction law), and the Apple App Store and Google Play store-listing requirements (App Privacy form / Data Safety form).
The English text of this policy is the authoritative version. Translations into Russian, Croatian, and Serbian are provided for convenience.
1. Identity of the controller
The data controller is NIKITA IARUNIN PR BEOGRAD, a sole proprietor (preduzetnik) registered in the Republic of Serbia (Belgrade), company registration number (matični broj) 67768850, tax identification number (PIB) 114678100, registered office Jurija Gagarina 231, 11073 Belgrade, Serbia, trading as Tprice.
- Privacy and data-protection contact: [email protected]
- General support: [email protected]
- Governing law: the law of the Republic of Serbia, without prejudice to mandatory consumer-protection provisions of the country of residence of the user.
1a. Data Protection Officer (GDPR Art. 13(1)(b))
Tprice has not appointed a Data Protection Officer because it does not meet any of the three criteria under GDPR Art. 37(1):
- Tprice is not a public authority or body (Art. 37(1)(a));
- Tprice's core activities do not consist of processing operations that, by their nature, scope, or purposes, require regular and systematic monitoring of data subjects on a large scale (Art. 37(1)(b));
- Tprice's core activities do not consist of processing on a large scale of special categories of personal data under Art. 9 or personal data relating to criminal convictions and offences under Art. 10 (Art. 37(1)(c)).
Privacy questions are handled by the developer directly via [email protected].
1b. Territorial scope
Tprice is offered to users in the European Economic Area, the United Kingdom, Switzerland, the United States, Croatia, Serbia, and other markets where the app is listed on the Apple App Store and Google Play. Tprice is not offered in the Russian Federation. Personal data of Russian-resident users is not knowingly collected; if such a user is identified, the account will be deleted and the user notified at the email on file.
1c. Application of the GDPR and the UK GDPR (Art. 3(2))
Because the controller is established in the Republic of Serbia and offers the application to data subjects in the European Economic Area and the United Kingdom, the GDPR and the UK GDPR apply to the relevant processing by virtue of their Art. 3(2). You may exercise the rights described in §9, and lodge a complaint with a supervisory authority as described in §17. For any matter relating to the processing of your personal data you may contact us at [email protected].
2. What we collect
The table below is the single source of truth for what personal data Tprice collects. Every item is mapped both to Apple's App Store privacy taxonomy (declared in the App Privacy form) and to Google's Play Store Data Safety taxonomy (declared in the Data Safety form). The two forms differ slightly in how they classify the same underlying data; differences are explained in §4.
| Item we collect | Apple App Store taxonomy | Google Play taxonomy |
|---|---|---|
Email address from Google or Apple SSO sign-in, and from the in-app "Report a product error" / "Contact us" forms. When you use Sign in with Apple with the "Hide My Email" option, the value we store is Apple's private-relay address ([email protected]); we do not receive your real Apple ID email. |
Contact Info → Email Address | Personal info → Email address |
| Free-text content of messages you submit via the in-app "Report a product error" / "Contact us" forms. These messages are routed exclusively to Tprice support staff and are not used for any other purpose. They fall under Google's support-communications exception and are therefore not declared as a Messages item on Play. | User Content → Customer Support | (not declared — covered by Google's support-communications exception) |
| Your list of favorite products, your price alerts, and your discount alerts: the products you asked to be notified about, the city of each alert, and either the stores you chose or, for an alert in all stores, the stores you have turned off in the application's store list. With discount alerts we keep a log of your discount notifications (§8): the ones we have queued, shown in the application and sent to you as push notifications. The application shows your discount notifications in its Notifications section, and the log records whether you have seen each of them (by opening the notification or the Notifications section) and whether you have hidden it from that section. Stored on our backend as account data; on Play they are part of the Email + User IDs declaration rather than a separate App-interactions item, except the markers of whether you have seen or hidden a notification, which are declared as an app interaction for app functionality. | User Content → Other User Content; the seen and hidden markers: Usage Data → Product Interaction (App Functionality) | (covered by the Email + User IDs items; not separately declared); the seen and hidden markers: App activity → App interactions (App functionality) |
| Your shopping baskets ("baskets"): lists of products you plan to buy. A basket has a short name you type yourself and the products in it. Stored on our backend as account data. | User Content → Other User Content | App activity → Other user-generated content (declared for the basket name, which is free text you type); the products in a basket, like your favorites, are covered by the Email + User IDs items |
| Firebase Authentication user identifier (Firebase UID) — primary key linking your account on our backend. | Identifiers → User ID | Personal info → User IDs |
| Firebase App Instance ID — pseudonymous, app-installation-scoped identifier generated by the Firebase SDK. | Identifiers → Device ID | Device or other IDs |
| Firebase Cloud Messaging (FCM) registration token — a device-installation-scoped push identifier generated by the Firebase SDK after you submit a request through the in-app "Contact us" form or turn on discount notifications for a product, and grant the operating-system notification permission. It is transmitted to our backend together with your selected app language so that we can notify you when we have replied to your support request and when a product you follow goes on discount, as described in §5 and §9c. It is never used for advertising. | Identifiers → Device ID | Device or other IDs |
| In-app product search queries (the text you type into the search box). | Search History | App activity → In-app search history |
| In-app interaction events: screen views, login, sign-up, barcode scans, product views, adding to favorites, sharing, price-alert creation, turning discount notifications on, changing and turning them off, language change, and basket actions (creating, renaming, and deleting a basket, adding and removing products, opening and comparing a basket, and importing a basket from a link). | Usage Data → Product Interaction | App activity → App interactions |
Auto-collected diagnostic events generated by the Firebase SDK: app_exception, first_open, session_start, app_clear_data, os_update, app_remove. No stack traces are collected (Firebase Crashlytics and Sentry are not integrated). |
Diagnostics → Performance Data | App info and performance → Crash logs |
| Usage statistics without an account (§5b): once a day, the number of days since the previous check-in (1 to 30, or more than 30), whether this is a new installation and, during the first 52 weeks and only if no one has signed in on the device, the week the app was installed. No account, device or advertising identifier, country, city, search or product is sent. Each request only adds one to a daily total; the request itself is not stored. | Usage Data → Product Interaction | App activity → App interactions |
| Activity days of your account (§5b): the calendar dates on which the app made at least one signed-in request to our backend on your behalf, stored with your internal account number and the catalog country of that request. At the start of each visit the application sends one such request. No time of day, IP address, device data, screen or feature is recorded. | Usage Data → Product Interaction | App activity → App interactions |
The asymmetric handling of IP-derived approximate location (declared on Apple, not on Google) is explained in §4. Separately, your IP address is processed server-side at our service edge for security and abuse prevention; this is not a store-declared collection item (it is not collected from your device for this purpose) and is described in §4, §5a, and §8.
3. What we DO NOT collect
To prevent ambiguity, the following data are explicitly not collected by Tprice:
- Display name. Tprice does not extract or store the
displayNamefield returned by Google or Apple sign-in. - Precise (GPS) location. The application contains no GPS code, does not request location permissions, and does not depend on
expo-locationor any equivalent library. - The Apple Advertising Identifier (IDFA). Tprice does not display the App Tracking Transparency prompt and does not call
requestTrackingAuthorization. - The Android Advertising ID (AD_ID). The permission
com.google.android.gms.permission.AD_IDis explicitly blocked in the application manifest. - Camera frames. The camera is accessed only while the in-app barcode scanner is open. Video frames are decoded on-device by the barcode library and are never stored, uploaded, or transmitted off the device. Only the decoded numeric barcode string is sent to our backend to look up the product.
- Photographs, videos, audio recordings, or files from your device storage.
- Contact list, calendar, call log, SMS, or browser history.
- Health, fitness, or biometric data.
- Crash stack traces. Firebase Crashlytics, Sentry, and any equivalent crash-reporting library are not integrated.
- An identifier for usage statistics. The usage statistics described in §5b are sent without any account, device, installation or advertising identifier.
- Telephone number, postal address, full date of birth, or social-security / national-ID numbers.
- Credit-card numbers, bank account numbers, or any payment-card data. The application is provided free of charge and offers no in-app purchases or paid subscriptions; Tprice does not collect or process any payment, financial, or purchase data.
4. City and country selection — taxonomic disclaimer
When you choose a country and a city from the in-app list, Tprice stores this choice as a preference and uses it to filter the product catalog and price data. The catalog country of your signed-in requests is also recorded with your activity days for the usage statistics described in §5b. On your device, the country you choose and the region set in your phone's settings are also used to decide whether usage statistics need your permission (§5b); neither is sent with the statistics. This preference is not derived from GPS, Wi-Fi, Bluetooth, or any device sensor, and it is not treated as physical location data under either the Apple or the Google store taxonomies. The Android application does not request any location permission.
Separately, Firebase Analytics, when receiving an analytics event from your device, performs a server-side coarse geo-enrichment of the event based on the source IP address (country and city level only). For this analytics enrichment Tprice does not receive your raw IP address from the device; the enrichment is performed by Google entirely server-side, and Tprice's analytics console sees only the resulting country and city dimensions of the event. This processing is identical on iOS and Android. Separately from analytics, the Tprice service edge does process your IP address when you make requests to our backend, for the purpose of security and abuse prevention; that processing, its legal basis, and its retention are described in §5, §5a, and §8.
We declare this IP-based enrichment as "Coarse Location" in the Apple App Privacy form because Apple's taxonomy treats it as a Location item. We do not declare it as a separate Location item in the Play Data Safety form because the Android application does not hold or request any location permission and Google's taxonomy treats this kind of inherent SDK-side IP enrichment as part of the Analytics SDK's processing. The declarations are intentionally cautious on Apple's side; the underlying data flow is the same on both platforms.
The separate processing of your IP address at the Tprice service edge for security and abuse prevention (described in §5, §5a, and §8) is not a store-declared collection item on either platform: the IP address is observed at the network edge incident to each request rather than collected from your device by the application, it is used solely for security and abuse prevention, and it is retained only in access logs for the limited period stated in §8. It is therefore not an Apple "Location" item — the only Apple Location declaration is the Firebase analytics enrichment described above — and it is not a declared data type on the Google Play Data Safety form.
5. Purposes of processing
Tprice processes personal data only for the purposes listed below. The application is provided free of charge and offers no in-app purchases or paid subscriptions. We do not display advertising in the application, do not send marketing emails, do not send push notifications on our own initiative to promote products, retailers or the application, do not sell, share, or rent personal data to data brokers, and do not profile users for advertising or for the benefit of third parties. We operate a remote push-notification channel for two kinds of notifications only, and you ask for each of them yourself: a confirmation that we have replied to a support request you submitted through the in-app "Contact us" form, and a notification that a product you chose has gone on discount ("discount notifications"). We send no other push notifications. Retailers do not pay us for discount notifications and cannot send them or choose who receives them. This channel is described in the "Service notifications" purpose below, in §5a, and in §9c.
- Account management. Creating your account, signing you in, linking your favorites, price alerts and discount alerts to your account, and processing your account-deletion request. From version 1.0.9 of the application you can browse the catalog, search and compare prices without an account ("guest mode"). Favorites, baskets, price alerts, discount notifications and the support forms require signing in with Google or Apple, which provides your email and creates a Firebase UID. Because the application can be used without signing in, Email and User IDs are declared as "Optional" in the Play Data Safety form; earlier versions of the application cannot be used without signing in.
- App functionality. Providing the core features of the application: product catalog, price history, search, favorites, price alerts, discount notifications for the products you choose, in-app customer support, barcode scanning, and shopping baskets (creating baskets, adding products, comparing what a basket costs at different retailers, sharing a basket, and importing a basket from a link you received).
- Service notifications. Both notifications below are sent as push notifications using the FCM registration token described in §2, and their text is localised on our server to your selected app language. Discount notifications also appear in the application's Notifications section, whether or not you allow push notifications. We do not use the push channel for advertising or any other purpose.
- Support reply. When you submit a request through the in-app "Contact us" form, we send you a transactional push notification to let you know that we have replied to you (typically by email).
- Discount notifications. When you turn on discount notifications on a product's page, in all stores of your city or only in the stores you choose, we compare the product with our price data several times a day and notify you when a new promotion for it starts in that city, with the store and the promotional and regular price. The notification always appears in the application's Notifications section, and the bell on the home screen shows a red dot until you see it; if you allow push notifications, we also send it to your device as a push notification. Discount notifications work without push notifications. We notify you at most once per product in seven days and at most three times a day, only between 9:00 and 20:00 local time. A notification that does not fit waits for the next morning and is dropped if the promotion has ended by then. Notifications may arrive later than a promotion starts, or not at all (see the Terms of Service). Your discount notifications from the last 90 days are listed in the application's Notifications section (the bell on the home screen), and under Notification settings you can see the products you follow, change their stores or turn notifications off. You can hide a notification from the Notifications section with the ✕ button next to it; we keep a hidden notification in the log until its 90 days end (§8), because the limits above still count it.
- Analytics (Firebase). Measuring feature usage, search performance, screen flow, and conversion funnels in an aggregated and pseudonymous form via Firebase Analytics (Google Analytics 4), including the IP-derived coarse (country / city) location enrichment described in §4. Analytics processing is governed by the in-app analytics toggle described in §9c and by the in-app consent dialog described in §5a.
- Usage statistics. Counting on our own servers how many people use the application per day, week and month, how often it is opened, how many new installations there are and whether people return, and what share of active accounts use baskets and favorites. We look only at totals, no third-party analytics service is involved, and the results are never used to make decisions about you or to contact you. This processing is not governed by the analytics toggle but by its own switch. It is described in full in §5b.
- Security of the service. Detecting and preventing automated scraping, brute-force attacks, and other abuse of the service through per-IP rate-limiting applied at the gateway in front of our backend (keyed on your IP address) and through inspection of access logs.
When you share a basket, you send a message that you can review and edit before sending. It contains the basket name, the products in the basket with the prices you are seeing, the date those prices are from, the retailer that is cheapest for the whole basket, in some countries your selected city, and a link. The link carries the list of products and your selected country in the part of the web address after the # symbol, which browsers do not send to web servers, so it does not appear in our web-server logs, our CDN logs, or our web analytics. The message travels through whichever app you choose to send it with and is handled by that app under its own privacy policy (see §7). When someone opens the link in the Tprice app, the product identifiers are sent to us so that we can look the products up and show a preview; a basket is created in their account only if they then confirm the import. Anyone who has the link can import the basket, so share basket links only with people you trust.
5a. Legal basis under GDPR Art. 6
| Processing activity | Categories of data | Legal basis (GDPR Art. 6) |
|---|---|---|
| Creating and maintaining your account; linking your favorites, price alerts and discount alerts to your account | Email, Firebase UID | Art. 6(1)(b) — performance of a contract to which you are a party |
| Storing your favorites, price alerts, discount alerts, baskets (including the name you give each basket and the products it contains), search queries, and your selected country / city / language preference | Favorites, price alerts, discount alerts, baskets, search history, preferences | Art. 6(1)(b) — performance of contract |
| Handling messages you submit through the in-app customer-support forms | Email, free-text message | Art. 6(1)(b) — performance of contract |
| Firebase Analytics events, including the IP-based coarse geo enrichment, and on-device storage of Firebase SDK identifiers ("similar technologies" under the ePrivacy Directive Art. 5(3)) | In-app interactions, search queries, screen flow, diagnostics, App Instance ID, coarse location | Art. 6(1)(a) — your explicit, opt-in consent. Consent is requested via a dedicated in-app dialog that defaults to "no analytics" and is shown once the application has had enough engagement signal to make an informed prompt meaningful (whichever first: two completed sessions, three product views, or seven days since first launch). Until you tap "Allow analytics" on that dialog, the Firebase Analytics SDK is not initialised on your device, no App Instance ID is written to on-device storage, and no analytics events are delivered to Google. You may withdraw consent at any time via the in-app analytics toggle (§9c). |
| Sending you the notifications you asked for (a push notification that we have replied to a support request you submitted through the in-app "Contact us" form, and a notification that a product you chose has gone on discount, shown in the application's Notifications section and, if you allow push notifications, also sent as a push notification); checking your discount alerts against our price data; storing the FCM registration token, your app-language preference and the log of discount notifications for that purpose; showing you your discount notifications, and which of them you have seen, in the application's Notifications section, except the ones you have hidden | FCM registration token, app language, discount alerts, log of discount notifications | Art. 6(1)(b) — performance of a contract: each notification forms part of a service you requested in the application (the support service, or discount notifications you turned on for a specific product). Retailers do not pay for discount notifications, and we send them only for the products you chose. Holding the device-scoped token so we can deliver these notifications additionally relies on Art. 6(1)(f) — our legitimate interest in being able to reach you about your own request, for which we have carried out a balancing assessment. The token is generated and transmitted only after you submit a "Contact us" request or turn on discount notifications, and grant the operating-system notification permission; it is never used for advertising or analytics, is transmitted only with your app-language preference for localisation, and is cleared when neither purpose needs it any longer (§8), on uninstall, or on account deletion. The operating-system notification permission controls push notifications only, and you may revoke it at any time (§9c); discount notifications in the Notifications section stop when you turn off the discount alert for the product. Advertising notifications would require your separate opt-in consent under Art. 6(1)(a) |
| Detection of abuse and security incidents; per-IP rate-limiting of requests at the gateway in front of our backend; inspection of access logs | Client IP address (used as the rate-limiting key at the gateway, and recorded in access logs), request path, timestamp, and the Firebase UID where the request is authenticated (recorded in logs; for basket imports it is also used to apply a per-account limit on how often baskets can be imported) | Art. 6(1)(f) — legitimate interest in the security and availability of the service. We have carried out a legitimate-interests balancing assessment and limit this processing to the IP address and request metadata strictly necessary for security |
| Usage statistics without an account (§5b), and storing and reading the information on your device that they need | Days since the previous check-in, whether this is a new installation, installation week; the statistics record on your device; the installation time read from the operating system | Art. 6(1)(f): our legitimate interest in knowing how many people use the free application and whether they return. We have carried out a balancing assessment: only coarse values are sent, with no identifier; no IP address is stored for these requests; small totals are hidden; the statistics are not linked with any other data; and you can switch them off at any time. Storing and reading this information on your device is governed by national rules implementing Art. 5(3) of the ePrivacy Directive, including Croatian and Serbian electronic-communications law. We inform you in the application before the first count, and you can refuse at any time. Where the country you chose or your phone's region is on our list of countries where statistics need your permission, they run only after you allow them (§5b) |
| Activity days of signed-in accounts and the statistics computed from them (§5b) | Internal account number, date, catalog country | Art. 6(1)(f): our legitimate interest in measuring the use and retention of the service. We have carried out a balancing assessment: only the date and the country are recorded, from requests the application already makes (for these, also a compatibility assessment under Art. 6(4)) and from one request at the start of each visit; the record is pseudonymous and is deleted with your account; only totals are viewed. You can object at any time (§9) |
You may withdraw your consent for analytics processing at any time without affecting the lawfulness of processing carried out before the withdrawal. See §9c.
5b. Usage statistics
This section describes the usage statistics that the application sends while you use it without an account, and the activity days that we record while you are signed in. One switch controls both: Usage statistics in Profile → Account settings. It is separate from the Usage analytics switch, which controls Firebase Analytics (§9c). Guest mode, and with it the statistics without an account, is available from version 1.0.9 of the application.
Without an account
- Who processes it. The controller named in §1, reachable at [email protected]. Requests reach our servers through Cloudflare, and the totals are stored on our servers at Hetzner in Germany (§6).
- What is stored on your phone. The date of the last check-in, when this record was created and when it expires (13 months after it was created, never extended), your choice for usage statistics, and a few markers needed for counting (for example, whether a new installation has already been counted, whether anyone has signed in on this phone, and whether you have seen the in-app notice). The application also keeps the list of countries where statistics need your permission, which it downloads from
updates.tprice.app. - What is read from your phone. The application's installation time, provided by the operating system. It is used only on your phone: to tell whether this is a new installation, to work out the installation week, and to discard a record copied from another phone. It is read only during the first 52 weeks after installation and only if no one has signed in on the phone. The region set in your phone's settings is also checked on the phone, to decide whether statistics need your permission; the region is not sent.
- What is sent. Once a day while you use the application without an account: the number of days since the last check-in (1 to 30, or "more than 30"), whether this is a new installation, and the installation week (only during the first 52 weeks and never after anyone has signed in on this phone).
- What is not sent. Your account, device or advertising identifiers, country, city, searches and products.
- IP address. Your IP address reaches Cloudflare and our servers, as with any request, and our gateway uses it briefly to limit how many requests one address can send (§5a). We do not record it for these requests. Our servers keep no log entry for a successful statistics request; for a failed one, the gateway logs only the time, the endpoint and the response status, without your IP address. Cloudflare, Inc. (USA) delivers the requests on our behalf under the EU Standard Contractual Clauses and the EU-US Data Privacy Framework (§6a).
- What we keep. Only totals. Each request adds one to a daily count for its installation week and its number of days since the last check-in; the request itself is not stored. The exact number of days is kept for 40 days and is then grouped into wider ranges. Detailed daily totals are kept for 25 months. After that they are combined into monthly totals in which small numbers are merged, and those are kept without a time limit. In the reports we look at, small numbers are hidden.
- Why. Our legitimate interest in knowing how many people use the application and whether they return (GDPR Art. 6(1)(f), see §5a).
- When we ask for your permission. If the country you chose in the application or the region set in your phone's settings is on our list of countries where statistics need permission, the application asks you before the first count, with "Allow" and "Don't allow" buttons, and statistics run only after you allow them. Otherwise the application tells you about the statistics before the first count, and you can switch them off at any time.
- How to turn it off. Switch off Usage statistics in Profile → Account settings at any time: the record on your phone is deleted and nothing more is sent. Signing in to an account also deletes the record, and so does uninstalling the application. We cannot tell which totals came from your phone, so we cannot show them to you or delete them (GDPR Art. 11(2), see §9).
- Complaints. You can lodge a complaint with a data protection authority: in Croatia with AZOP (azop.hr), in Serbia with the Commissioner (poverenik.rs), or with the authority of the country where you live or work (§17).
With an account
While you are signed in, we record the days on which the application made a request to our backend on your behalf, together with your internal account number and the catalog country of that request. At the start of each visit the application sends one such request. No time of day, IP address or device data is recorded, and nothing is stored on or read from your device for this beyond the sign-in token the application already sends and your Usage statistics choice. Recorded days are kept for 13 months and are deleted together with your account.
From these days and visits we compute totals: active accounts per day, week and month, how many accounts return after registering, the number of visits per day, and what share of active accounts use baskets and favorites. The totals contain no identifier, small numbers in them are hidden, and they are kept without a time limit. Our own administrator accounts and accounts that have opted out are excluded.
If you switch off Usage statistics while signed in, we delete all activity days recorded for your account and exclude the account from future statistics, and the application stops sending the visit request. You can also opt out by writing to [email protected]. If you opted out on another phone or by email, the switch shows as off after you sign in. The legal basis is our legitimate interest (Art. 6(1)(f), see §5a).
6. Third-party processors
Tprice uses the following third-party processors. Each processes personal data on our behalf under a written data processing agreement (Art. 28 GDPR) and only on documented instructions. Each processor is contractually required to provide a level of protection of personal data at least equivalent to the level described in this policy.
| Processor | Function | Data processed | Privacy policy |
|---|---|---|---|
| Google LLC and Google Ireland Ltd. | Firebase Authentication (sign-in with Google), Firebase Analytics (Google Analytics 4), Firebase Cloud Messaging (transport for the support-reply and discount notifications) | Email, Firebase UID, Firebase App Instance ID, analytics events, FCM registration token, IP address (for coarse geo enrichment, server-side) | https://policies.google.com/privacy |
| Apple Inc. | Sign in with Apple, Apple Push Notification service (APNs — relays the support-reply and discount notifications to iOS devices via Firebase Cloud Messaging). When you choose "Hide My Email", Apple operates a private-relay forwarding address; Tprice stores and uses only the relay address. | Apple ID-derived email (real or private-relay), APNs device token | https://www.apple.com/legal/privacy/ |
| Cloudflare, Inc. | Edge reverse proxy in front of the Tprice backend for the hosts api-hr.tprice.app, users.tprice.app and updates.tprice.app (TLS termination, CDN, and DDoS protection). updates.tprice.app serves application configuration, including the list of countries where usage statistics need your permission (§5b). Every request to the backend transits Cloudflare's edge. |
Client IP address, request metadata (path, headers, timestamps), and request payloads in transit — including the Authorization header bearing the Firebase ID token (with its sub and email claims), which is decrypted at Cloudflare's TLS-termination edge |
https://www.cloudflare.com/privacypolicy/ |
| Hetzner Online GmbH | Hosting of the Tprice backend server (data centres in Germany) | Data stored in the backend database: Firebase UID, email, favorites, price alerts, discount alerts and the log of discount notifications, baskets, FCM push token, account activity days, usage statistics totals; server access logs | https://www.hetzner.com/legal/privacy-policy/ |
| Expo, Inc. | Build and over-the-air update infrastructure (EAS). Does not process personal user data of the application's end users; processes only build artifacts and OTA bundles. | None (no end-user data) | https://expo.dev/privacy |
6a. Transfers outside the European Economic Area
- Google and Apple process personal data in the United States and in other countries where they operate. Transfers are governed by the European Commission's Standard Contractual Clauses (SCCs) and, where applicable, by the EU-US Data Privacy Framework (Google LLC and Apple Inc. are certified participants).
- Hetzner processes the backend database within Germany (EEA), so no third-country transfer takes place for backend storage.
- Cloudflare operates a global edge network and is established in the United States. All traffic to
api-hr.tprice.app,users.tprice.appandupdates.tprice.apptransits Cloudflare's edge (where TLS is terminated) before reaching the backend in Germany. Transfers are governed by the Standard Contractual Clauses and, where applicable, by the EU-US Data Privacy Framework (Cloudflare, Inc. is a certified participant). - Expo / EAS processes build artifacts in the United States under Standard Contractual Clauses; no end-user personal data is transferred.
- The controller is established in the Republic of Serbia, which is outside the EEA and is not the subject of a European Commission adequacy decision. Access by the controller from Serbia to personal data stored in the EEA (Hetzner, Germany) is a transfer for which we maintain appropriate safeguards under Chapter V of the GDPR (Standard Contractual Clauses). This processing is additionally subject to the cross-border-transfer provisions of the Serbian Law on Personal Data Protection (Zakon o zaštiti podataka o ličnosti).
We do not transfer personal data outside the EEA without an adequate-protection mechanism under Chapter V of the GDPR.
7. Data sharing
Tprice does not sell personal data and does not share personal data with third parties for their own purposes. Personal data is processed only by Tprice and by the processors listed in §6, acting on Tprice's documented instructions under a written data processing agreement. For the purposes of the Google Play Data Safety form, these processors are service providers and these transfers do not constitute "sharing".
Content that you choose to share yourself, for example a basket link you send to someone, is disclosed by you, not by us. The message travels through whichever app you send it with, and that app is not one of our processors.
Tprice does not participate in any advertising network, does not integrate any third-party analytics service other than Firebase Analytics, and does not integrate any social-media tracking pixel.
8. Retention
| Category | Retention period |
|---|---|
| Account data (email, Firebase UID, favorites, price alerts, discount alerts, baskets, preferences, FCM push token) | For as long as your account remains active. Deleted immediately when you delete your account in-app, or within 14 business days of an email deletion request. The FCM push token is additionally cleared as soon as the push service reports that the token is no longer valid (for example after you uninstall the application), the next time you open the application after revoking the operating-system notification permission, and when you turn off your last discount alert without having submitted a "Contact us" request. A discount alert is deleted when you turn it off on the product's page or in Notifications → Notification settings. |
| Log of discount notifications (the product, store, city, promotion start and price of each notification we queued, showed in the application or sent as a push notification, the store and product names shown in it, when you were notified, whether a push notification was sent for it, when you saw it in the application, and when you hid it there) | 90 days from the entry, so that we do not notify you twice about the same promotion, can look into a complaint about a notification, and can show you your recent notifications in the application. Deleted earlier when you delete your account. |
| Discount notifications not yet sent (for example, waiting for the next morning) | Up to 36 hours; dropped earlier if the promotion has ended. |
| Firebase Analytics events | Fourteen months from the date of the event (the standard Google Analytics 4 retention window). |
| Firebase Analytics user-level identifiers (App Instance ID) | Up to fourteen months from your last activity in the app; erased immediately when you withdraw analytics consent. |
| Backend server access logs | Up to 30 days, for security and abuse prevention. |
| Record of a deleted account (a one-way hash of its Firebase UID) | 48 hours after the deletion, so that a sign-in token issued before the deletion cannot recreate the account. |
| Usage statistics record on your phone (§5b) | 13 months from its creation, never extended. Deleted earlier when you switch usage statistics off or sign in, and when you uninstall the application. |
| Usage statistics totals without an account (§5b) | Detailed daily totals: 25 months; the exact number of days since the previous check-in is grouped into wider ranges after 40 days. Monthly totals in which small numbers are merged: without a time limit. |
| Activity days of your account (§5b) | 13 months from the recorded date. Deleted immediately when you delete your account or switch usage statistics off. |
| Daily count of visits per country (§5b), without your account number | 40 days; after that only the statistics totals below remain. |
| Statistics totals computed from activity days and visits (§5b), which contain no identifier | Without a time limit. |
| Customer-support correspondence | Up to 12 months from the last message, to allow follow-up and to detect recurring abuse. |
9. Your rights under the GDPR
If you are located in the European Economic Area or in the United Kingdom, you have the following rights with respect to personal data that Tprice processes about you:
- Right of access (Art. 15) — to obtain confirmation of whether we process your data and, if so, a copy of that data.
- Right to rectification (Art. 16) — to have inaccurate data corrected.
- Right to erasure (Art. 17) — to have your data deleted; see §9b for mechanics and statutory carve-outs.
- Right to restriction of processing (Art. 18).
- Right to data portability (Art. 20) — to receive your data in a structured, commonly used, machine-readable format.
- Right to object (Art. 21) — to object to processing based on legitimate interest (Art. 6(1)(f)). For processing carried out for the security and rate-limiting of the service, we may continue the processing where we can demonstrate compelling legitimate grounds (Art. 21(1)). You can revoke the operating-system notification permission at any time; the next time you open the application, it removes the stored push token from our backend (see §9c and §8), and discount notifications keep appearing in the application's Notifications section. To stop them, turn off discount notifications for a product on its page or in Notifications → Notification settings. For usage statistics (§5b), you object by switching off Usage statistics in Profile → Account settings; while you are signed in, the same switch also deletes the activity days recorded for your account. You can also object by writing to [email protected].
- Right to withdraw consent (Art. 7(3)) — see §9c.
- Right to lodge a complaint with a supervisory authority — see §17.
To exercise any of these rights, write to [email protected] from the email address tied to your account. We respond within one month, extendable by a further two months for complex requests with prior notice, in accordance with Art. 12(3) GDPR. We do not charge a fee unless the request is manifestly unfounded or excessive.
We cannot identify you in the usage statistics totals collected without an account (§5b), so the rights under Art. 15 to 20 do not apply to them (Art. 11(2)). Questions about usage statistics can be sent to [email protected] from any email address.
9a. California (CCPA / CPRA)
If you are a California resident, you have additional rights under the CCPA as amended by the CPRA:
- Right to know what categories of personal information we have collected, the sources, the purposes, and the categories of recipients.
- Right to delete personal information we have collected from you, subject to statutory exceptions.
- Right to correct inaccurate personal information.
- Right to opt out of sale or sharing of personal information.
- Right to limit use and disclosure of sensitive personal information.
- Right to non-discrimination for exercising any of the above.
Tprice does not sell and does not share personal information as those terms are defined under the CCPA / CPRA, and has not done so during the preceding twelve months. Tprice does not engage in cross-context behavioural advertising.
Categories of personal information collected in the preceding twelve months (Cal. Civ. Code §1798.140(v))
| Category | Sources | Business / commercial purpose |
|---|---|---|
| Identifiers — Firebase UID, email, FCM device push token | Firebase UID and email directly from you via Google or Apple SSO at sign-in; the FCM push token generated on your device after you grant the notification permission | Account creation and management; authentication; security; analytics (under consent); sending you the support-reply and discount notifications you asked for |
| Internet or other electronic network activity information — in-app interactions, search queries, screen flow; your IP address processed at our service edge; the days on which your account made a request to our backend, with your internal account number and the catalog country | Firebase Analytics SDK on your device (only if consent has been given); requests to our backend (IP address, activity days) | Product analytics and improvement; security and rate-limiting; usage statistics (§5b) |
| Geolocation data — coarse (country / city) only, derived server-side from your IP address by Firebase Analytics | Google Analytics 4 infrastructure (server-side) | Aggregate market analytics |
| Customer records — email and free-text message content | Directly from you when you submit a "Report a product error" or "Contact us" form | Handling your support request |
| Commercial information: your favorites, your price alerts, your discount alerts and the log of discount notifications, and your baskets (the name you give a basket and the products it contains) | Directly from you when you use these features in the app | Providing the features you requested |
Retention periods for each category are set out in §8.
Usage statistics collected without an account (§5b) are deidentified: we maintain and use them only in that form and do not attempt to re-identify them.
Sensitive personal information
Tprice does not collect "sensitive personal information" within the meaning of Cal. Civ. Code §1798.140(ae), other than account-authentication credentials (the Firebase Authentication ID token) processed solely to provide the service you have requested under the §1798.121(a) carve-out. Accordingly, the right to limit the use and disclosure of sensitive personal information does not give rise to additional controls beyond the account-deletion mechanism in §9b.
Exercising CCPA rights
Write to [email protected] from the email address tied to your account. We verify identity by matching the requester's email to the email on file. Authorised agents must provide (i) written permission signed by you authorising the agent to make the request, (ii) proof of identity verified directly with us by the consumer, and (iii) confirmation from the consumer that the agent is authorised to act on the consumer's behalf (Cal. Code Regs. tit. 11 §7063).
9b. How account deletion works
You can delete your account in two ways:
- In-app — open the app, go to Profile → Account settings → Delete account, and confirm. Your account is deleted immediately.
- By email — write to [email protected] from the email address tied to your account, with the subject line "Account deletion request". We complete the deletion and send a confirmation within 14 business days. This SLA is shorter than the one-month maximum permitted by GDPR Art. 12(3) and is our binding commitment.
When we delete your account, we permanently remove:
- Your email address and Firebase UID.
- Your favorites, price alerts and discount alerts, and the log of discount notifications.
- Your baskets, including the names you gave them and the products they contain.
- Your selected country, city, and language preferences linked to the account.
- Your FCM push notification token.
- The activity days recorded for your account (§5b).
- Your email address and Firebase UID from the product-error reports and customer-support messages you submitted from your account.
Some records are retained after account deletion, as described in §8:
- The text of your product-error reports and customer-support messages and the product they refer to, without your email address and Firebase UID, so that they are no longer linked to your account.
- Firebase Analytics events recorded while you had usage analytics switched on. Google keeps them under the pseudonymous identifiers they were recorded with (§2) and deletes them automatically fourteen months after each event. No new events are linked to your account after the deletion.
- Server access logs, up to 30 days, which do not identify a deleted user.
- A record of the deletion: a one-way hash of your Firebase UID, kept for 48 hours so that a sign-in token issued before the deletion cannot recreate your account.
- Statistics totals (§5b), which contain no identifier.
- Your Usage statistics choice on your phone, because it is a setting of the device, not of the account.
This account-deletion process is also described on a standalone publicly accessible page at https://www.tprice.app/en/account-deletion.
9c. Right to withdraw consent in practice
- Analytics. The analytics toggle in Profile → Account settings → Usage analytics is the in-app point of control for analytics consent: it defaults to OFF and is the only way to enable analytics before the engagement-threshold dialog (§5a) is shown. After consent has been given — whether at the dialog or via the toggle — switching the toggle off withdraws consent. Firebase Analytics is then disabled at the SDK level (
setAnalyticsCollectionEnabled(false)), andresetAnalyticsData()is called to wipe the App Instance ID on your device; no analytics events — including auto-collected events such asscreen_view,session_start,app_exception, and nosetUserIdassociation — are collected from your device until you turn the toggle back on. Withdrawing analytics consent stops collection of the analytics items declared as "Optional" in the Play Data Safety form (App interactions, In-app search history, Crash logs, and the analytics part of Device IDs — the Firebase App Instance ID). One further item is declared "Optional" for a different reason: the baskets stored in your account (their names and the products they contain) are collected only if you use the baskets feature, and they are not governed by this toggle. Analytics events about how you use baskets are governed by it, because they are part of App interactions. You remove a stored basket by deleting it in the app, or by deleting your account (§9b). The App interactions item also covers the usage statistics described in §5b; they are not governed by this analytics toggle but by the separate Usage statistics switch described below. The "Device or other IDs" item also covers the FCM push token; collection of that token is not governed by this analytics toggle but by the operating-system notification permission described below. Email and User IDs are unaffected by this toggle: they are collected only if you sign in and are necessary for the account to function; to stop their collection, delete your account (§9b). - Usage statistics. The Usage statistics switch in Profile → Account settings is separate from Usage analytics and controls the statistics described in §5b. Without an account, switching it off deletes the statistics record on your phone and stops the daily check-in. While you are signed in, switching it off deletes the activity days recorded for your account and excludes the account from future statistics. Where the application has asked for your permission (§5b), switching it off withdraws that permission. You can switch it back on at any time.
- Notifications. The application requests the operating-system notification permission only when you submit a request through the in-app "Contact us" form, tap "Discount" on a product's page or the settings icon of a discount alert in Notifications → Notification settings, or choose to allow push notifications in the "Discount" sheet or in the Notifications section, so that we can send you the notification you asked for as a push notification (you may refuse: discount notifications work without the permission and appear in the application's Notifications section):
- Support-reply notification (remote push). When you submit a "Contact us" request and grant the permission, the Firebase SDK generates a push (FCM) registration token, which the application transmits to our backend together with your selected app language. We use it to notify you that we have replied to your support request.
- Discount notifications (in the application and by remote push). Discount notifications always appear in the application's Notifications section (§5). If you grant the permission, when you turn them on or later, the application also transmits the same token to our backend, and we use it to send you a push notification as well when a new promotion for that product starts in your city. Discount notifications are off by default and only you turn them on, one product at a time. You turn them off on the product's page or in Notifications → Notification settings ("Turn off notifications"); on Android you can also switch off the "Product discounts" notification category in the system settings, which stops the push notifications but not the notifications in the Notifications section. When you turn off your last discount alert and have not submitted a "Contact us" request, we delete the token from our backend. Your account holds one push token: if you sign in on another device on which notifications are allowed, its token replaces the previous one, and push notifications go to the device on which you last signed in with notifications allowed.
- Both notifications are localised on our server to your app language and on iOS are delivered through Apple's Push Notification service (APNs), which relays them to your device (see §6). Their legal basis is Art. 6(1)(b) — each notification forms part of a service you requested — and, for holding the token, Art. 6(1)(f); not consent. Accordingly the operating-system permission is your point of control for push notifications: you may deny or revoke it at any time in your operating-system settings, after which your device no longer shows our push notifications, and the next time you open the application the token is cleared as described in §8. Denying or revoking it does not turn off discount notifications in the application; you turn those off for each product (§5). We do not send advertising push notifications. If we introduce an advertising push channel in a future release it will be strictly opt-in, off by default, and we will obtain your separate consent under Art. 6(1)(a) before any such message is sent.
- Your account as a whole. See §9b.
10. Children
Tprice is intended for users 18 years of age and older. The application is not directed to children, does not contain features designed for children, and does not knowingly collect personal data from children under 18. The 18-year threshold is set uniformly across all markets, which is higher than the minimum digital-consent age required by GDPR Art. 8 in any EEA member state and higher than COPPA's threshold of 13 in the United States.
If we learn that we have collected personal data from a user under the age of 18, we delete the account and the associated data as soon as practicable. If you believe that a child under 18 has provided personal data to Tprice, please contact [email protected].
The application is not enrolled in the Google Play Families Policy because it is not directed to children.
11. Changes to this policy
We may update this policy from time to time. The "Last updated" date at the top of the document is always current. For material changes — changes that affect the categories of data collected, the purposes of processing, the legal bases, or the categories of recipients — we will publish the updated policy before the change takes effect. Where the law requires us to notify you in advance, we will do so in the application. We will also keep the previous version of this policy accessible on request through [email protected].
Continued use of the application after a non-material change to this policy constitutes acknowledgement of the updated text. For changes that require renewed consent under GDPR Art. 7, we will request fresh consent in-app.
12. Contact
- Privacy and data-protection: [email protected]
- General support: [email protected]
- Postal: Jurija Gagarina 231, 11073 Belgrade, Serbia
13. Automated decision-making (GDPR Art. 22)
Tprice does not engage in automated decision-making, including profiling, that produces legal effects concerning you or that similarly significantly affects you.
14. Special categories of personal data (GDPR Art. 9)
Tprice does not collect or process special categories of personal data, namely data revealing racial or ethnic origin, political opinions, religious or philosophical beliefs, trade-union membership, genetic data, biometric data for the purpose of uniquely identifying a natural person, data concerning health, or data concerning a natural person's sex life or sexual orientation.
15. Personal data breach notification
In the event of a personal data breach that is likely to result in a risk to the rights and freedoms of natural persons, Tprice will notify the competent supervisory authority without undue delay and, where feasible, not later than 72 hours after becoming aware of the breach, in accordance with GDPR Art. 33. Where the breach is likely to result in a high risk to the rights and freedoms of natural persons, Tprice will also communicate the breach to the affected users without undue delay, in accordance with GDPR Art. 34.
16. Cookies and similar technologies
Tprice is a native mobile application and does not use HTTP cookies. The application stores the following locally on your device:
- Application settings (selected country, city, language, the analytics opt-in preference) in the operating-system-provided local key-value store (
AsyncStorageon React Native), which is private to the application. - Identifiers used by the Firebase SDKs (notably the Firebase App Instance ID and the Firebase Authentication ID token), treated as "similar technologies" under Art. 5(3) of the ePrivacy Directive. The Firebase Authentication ID token is necessary to provide the account service you have requested. The Firebase App Instance ID is generated and stored only after you have granted affirmative consent via the in-app analytics dialog described in §5a (shown once the engagement-threshold conditions are met) or by enabling the analytics toggle in Profile → Account settings → Usage analytics (§9c). Prior to consent, no analytics identifier exists on your device; the Firebase Analytics SDK is configured with auto-collection disabled at build time. Local session-counter values used to decide when to show the consent dialog (session count, product-view count, install date) are stored under the strictly-necessary exception of ePrivacy Directive Art. 5(3) — they never leave the device and are not associated with any identifier. This install date is separate from the installation time used for usage statistics (next item).
- The usage statistics record and markers described in §5b: the date of the last check-in, when the record was created and when it expires, whether a new installation has already been counted, whether the installation week is no longer sent, whether anyone has signed in on this phone, whether you have seen the in-app notice, your Usage statistics choice, and the list of countries where statistics need your permission. Without an account, the application also reads the installation time from the operating system, during the first 52 weeks and only if no one has signed in on the phone, and uses it only on the phone. The legal basis and your choices are described in §5a, §5b and §9c.
- The Firebase Cloud Messaging (FCM) registration token, generated and stored on your device only after you submit a "Contact us" request or turn on discount notifications for a product, and grant the operating-system notification permission. Because it is generated solely as a result of your explicit request to receive notifications, storing it falls under the ePrivacy Directive Art. 5(3) exemption for storage that is necessary to provide a service explicitly requested by the user. It is used only to deliver the support-reply and discount notifications described in §5a and §9c, and is not used for analytics or advertising. If you do not grant the notification permission, no FCM token is generated.
The Tprice website at www.tprice.app uses only strictly necessary cookies (or no cookies) and does not load third-party tracking pixels.
17. Supervisory authorities
If you believe that our processing of your personal data infringes data-protection law, you have the right to lodge a complaint with a supervisory authority. The controller is established in the Republic of Serbia, where the competent national authority is the Poverenik za informacije od javnog značaja i zaštitu podataka o ličnosti. Because the controller has no establishment in the European Union, the GDPR "one-stop-shop" mechanism does not apply: if you are in the EEA you may lodge your complaint with the supervisory authority of your Member State of residence, place of work, or place of the alleged infringement. The supervisory authorities in our principal markets are:
- Croatia — Agencija za zaštitu osobnih podataka (AZOP) — https://azop.hr
- Serbia — Poverenik za informacije od javnog značaja i zaštitu podataka o ličnosti (Poverenik) — https://www.poverenik.rs
- European Union (other member states) — the supervisory authority of the member state of your habitual residence, place of work, or place of the alleged infringement. The full list is maintained by the European Data Protection Board at https://edpb.europa.eu/about-edpb/about-edpb/members_en
- United Kingdom — the Information Commissioner's Office (ICO) — https://ico.org.uk
You may also contact [email protected] before lodging a formal complaint; we will do our best to address your concern.
End of policy.