Glotlens helps you read, translate and convert price tags while travelling. We collect as little as possible. This policy explains what leaves your phone and why.
Camera and selected photos
The app reads price-tag text and barcodes on your device. You can also choose a photo from your gallery. On Android, the app asks for permission to access photos and their location so it can read where the selected photo was taken (used to find nearby shops for price sharing, see Location below); the app reads only the photo you select and does not browse or upload your library. If you decline, the app uses the system photo picker instead, and the photo's location cannot be read. Images are uploaded for recognition only when AI recognition is enabled or when you import a receipt into the ledger, as described below.
Translation
Translation may run on your device or use our server. Cloud translation sends the product name and relevant price-tag text, the target language and, where applicable, the shop's country code and local currency to our server. We forward the content needed for translation to Google Gemini, OpenAI or Google Cloud Translation and return the result. Text and translation results may be cached temporarily to reuse identical requests.
AI recognition (optional)
AI recognition is off by default. If you enable it, the app uploads a compressed image of the camera's viewfinder area or the whole photo you selected, together with the target language and available country and currency hints. The setting also applies to photos selected while AI recognition remains enabled. Our server temporarily processes the image and forwards it to the selected provider, Google Gemini or OpenAI; we do not retain the uploaded image after processing or cache the recognition result. Your phone may retain a thumbnail in scan history. To save daily recognitions, your phone keeps AI results from the last 7 days: when you scan the same price tag again (same barcode or product name and the same price read on the phone) or select the same photo again, the app uses the stored result instead of uploading; these results are not uploaded or synced. Avoid selecting images that include private information unrelated to the price tag.
AI recognition has a daily limit, counted per account when you are signed in and per installation ID (described below) when you are not. Free use of AI recognition requires price sharing: turning price sharing off also turns AI recognition off, except for paid accounts.
Receipt import
When you choose Import receipt in the ledger, the app uploads a compressed copy of the receipt photo you take or select, together with the target language and available country and currency hints. Our server temporarily processes the image and forwards it to the selected provider, Google Gemini or OpenAI, to read the shop name, receipt number, time, item lines and amounts and to translate the item names. We do not retain the uploaded image after processing or store the recognition result. The result goes only to your phone, where you confirm it before it is recorded in your ledger (see below for how the ledger is stored and synced); it is not used for price sharing. Once recorded, the app keeps the compressed receipt photo on your phone so you can view it later in the ledger; the photo is not uploaded or synced with the ledger and is deleted when all entries of that receipt are deleted. To save daily recognitions, your phone keeps receipt recognition results from the last 30 days; selecting the same photo again uses the stored result instead of uploading, and these results are not uploaded or synced. Receipts can show other details, such as a cashier's name or membership or payment information, so import only receipts you are willing to have processed.
Receipt import has its own daily limit, counted per account when you are signed in and per installation ID (described below) when you are not. It does not require price sharing.
Installation ID
When the app first starts, it generates a random installation ID, stores it on your phone and sends it with requests to our server. It is not a hardware device identifier and is regenerated when you reinstall the app or clear its data. We use it only to count daily AI recognitions and receipt imports for users who are not signed in: our server stores the installation ID with the date and that day's counts. It is not stored with price records, shops or location coordinates, and no IP address is stored with it. When you are signed in, these are counted per account instead.
Price sharing (optional)
If you enable price sharing, the app contributes information about products with a global barcode: barcode, product name, price, currency, price type, quantity or unit, package size, observation time and shop. We store these contributions and use them to show price comparisons to other users. Price records do not include an account ID, device ID, IP address or your original location coordinates. Products identified by in-store barcodes, such as many weighed products, are excluded from price contributions. Price sharing is off by default. Turning it off stops new contributions; it does not delete previously submitted records.
Location
To choose a language and currency by country, the app may use your phone's location and system geocoding service with your permission; this sends our server a country code, not your coordinates. To identify a shop for price sharing, the app instead sends our server latitude and longitude, which we process temporarily to find nearby shops. This can be your phone's location (with its reported accuracy, precise or approximate), a point you pick on a map, or, in photo mode, the location stored in the selected photo's EXIF data. For the OpenStreetMap Overpass query, we replace the position with the centre of a grid cell: approximately 100 m for precise positions, map points and photo locations, and approximately 330 m or 550 m, depending on accuracy, for approximate positions. That coarsened query location is sent to the map service from our server. We do not persist or log these original coordinates; shop locations and nearby-shop results may be stored or cached. When you choose a shop on the map, the app loads map images for the area you are viewing directly from the OpenStreetMap tile servers, which receive your IP address and the area shown, under the OpenStreetMap Foundation's own privacy policy. You can manage location permission in your device settings.
Data stored on your device
Your scan history, including thumbnails, and travel ledger are stored locally; the app does not automatically sync the complete history to our server. Without signing in, the ledger stays only on your device; when you sign in, it syncs to your account (see “Optional Google sign-in and account deletion” below). Price sharing submits selected product information as described above. If you choose to share a result through another app, that app receives the content you share and handles it under its own policies. You can clear scan history in Settings and delete trips or entries in the ledger. Deleting local data or uninstalling does not remove previously contributed prices or copies you have shared elsewhere.
This website stores your language preference in your browser so it can restore your choice on later visits. You can change it in the top menu or remove it by clearing this site's browser data.
Exchange rates
Reference exchange rates come from Frankfurter. Our server downloads them daily; your phone fetches the latest rates from our server and does the conversion locally.
Optional Google sign-in and account deletion
Scanning and translation remain available without an account. You may choose Google sign-in on this website; availability in the mobile app depends on your version. Google supplies a verified account identifier (sub) and, when available, your name, email and email-verification status. We store these details with account creation, update and last-sign-in times, your account plan (free or paid) and daily AI recognition and receipt import counts to identify and manage your account. When you sign in, the app syncs your ledger (entries and monthly budget) to your account so you can use it on several devices. We do not receive your Google password, Gmail or Drive content, or store Google ID tokens.
The website uses essential session cookies, with a default idle expiry of 120 minutes. Mobile sign-in tokens last up to 30 days; the server stores only their hashes and usage and expiry times. Signing out ends the current login. Sign-in and account-deletion pages connect to Google Identity Services, which processes that interaction under Google's privacy policy.
Account details remain until you delete your account. On the account-deletion page, verify the same Google identity again and confirm deletion. We delete your live account details, your per-account AI recognition and receipt import counts, the ledger synced to your account and all of your mobile sign-in tokens, and other website logins become invalid. Deletion does not clear scans or the ledger on your phone or copies already shared, and cannot automatically identify or remove anonymous price contributions that are not linked to an account. Database backups may retain earlier copies, including the synced ledger, for up to 14 days after deletion. Deleting your account and revoking Google authorization are separate actions; revocation alone does not delete our account records.
If you contact us by email, we receive the contact details and information you choose to send so we can respond.
Data retention
Technical logs can include your IP address, request time, requested address and browser or app information, for security and troubleshooting. Server logs rotate daily and normally retain about 14 days of records; removal follows log rotation rather than an exact deadline for each request. Translation caches expire automatically and expired database entries are removed by scheduled cleanup. We also temporarily process request identifiers derived from IP addresses for rate limiting. Daily AI recognition and receipt import counts kept per installation ID currently have no automatic expiry.
Shared price records are kept for one year from the observation time and then deleted automatically; until then they may remain available for comparisons after you disable sharing. Product and shop records have no automatic expiry. Contact us with the barcode, shop and approximate observation time to ask us to review a correction or removal. Because contributions are not linked to accounts, we cannot reliably identify every record you submitted. Database backups are kept for up to 14 days, so removed records can remain in a backup for up to 14 days. Emails may be retained to handle your request and related follow-up.
Third-party services
- Google Identity Services — authenticates optional sign-in; loaded only on relevant account pages. Google Privacy Policy.
- Google ML Kit — on-device recognition and translation. Input images, text and results from this local processing are not sent to Google; the SDK can connect to Google for model downloads, updates and performance or usage metrics. Terms and privacy.
- Firebase Crashlytics — receives crash and error reports from release versions of the app: the error and stack trace, app version, device model, operating system version, a random Crashlytics installation identifier and the time of the error. Reports do not include price-tag images, scanned text, product names, ledger amounts, location or account details. Google keeps crash reports for 90 days. Firebase privacy and security.
- Google Gemini — receives text or selected images through our server for product-name translation, AI recognition and receipt import. Provider retention and data use depend on the applicable API service terms, including safety and abuse monitoring. Our image-retention statement does not describe Google's retention. API terms.
- OpenAI — receives text or selected images through our server for product-name translation, AI recognition and receipt import when Luna is selected. Provider data processing and retention follow the applicable API data controls. Our image-retention statement does not describe OpenAI's retention. API data controls.
- Google Cloud Translation — receives price-tag text through our server. Data usage details.
- OpenStreetMap (Overpass API) — receives the coarsened query location from our server to find nearby shops, not your original coordinates or an account identifier.
- Frankfurter — supplies daily reference exchange rates, downloaded by our server without forwarding your scan content or location.
Our cloud translation, AI recognition, receipt import and price-sharing requests go through our server. ML Kit, Firebase Crashlytics and system services, such as geocoding, may contact their providers directly. Data may be processed outside your country by our server and service providers.
Data security
The app uses HTTPS to communicate with our production server, and cloud-provider requests use encrypted connections. Administrative access is restricted. No transmission or storage system can be guaranteed completely secure.
Your rights
Depending on applicable law, you may have rights to access, correct or delete your personal data, restrict or object to processing, or complain to a data protection authority. Contact us to exercise these rights. We may need information to verify and locate the relevant data, and will explain if we cannot identify it or must retain it under applicable law. You can also disable optional features, revoke device permissions and delete local data as described above.
Children's privacy
Glotlens is not directed at children under 13 and we do not knowingly collect personal data from them.
Changes
We may update this policy. The date at the top shows the latest version; significant changes will be announced on this website.
Contact
Questions or requests: privacy@glotlens.com