BiteOrNot helps you compare food-product information with restrictions you choose. It works without a mandatory user account: there is no Firebase Authentication, email login, or anonymous account system, and registration is not required for the core scanning feature.
Information kept on your device
The app stores data locally as needed for its features, including selected health conditions, diets, allergens, custom ingredients or items to avoid, app preferences, local scan history, product cache, and other local app data. The exact names of your conditions, diets, and allergens are used locally to produce a PASS, CHECK, or AVOID decision. This does not mean that no health-related information ever leaves the device: Firebase Analytics receives only aggregate profile indicators (whether a condition, diet, or allergy exists, category types such as condition/diet/allergy, and buckets for the number of active restrictions), not the specific names or values.
Camera and barcode scanning
BiteOrNot uses the camera to scan barcodes and photograph product labels. Google ML Kit Barcode Scanning detects barcodes on the device. A barcode may be sent to Open Food Facts to find product information and to the BiteOrNot Firebase backend for product caching and normalization.
Label photographs, OCR, and AI
When barcode data is not enough, the app can send up to four label photographs. When possible, it sends a crop matching the scan frame; if cropping fails, it may send the full photograph. Images are sent over HTTPS to a BiteOrNot Firebase Cloud Function in europe-west1. The active backend receives each image in process memory, sends it to Google Cloud Vision documentTextDetection, and does not write the photograph to Firestore, Firebase Storage, or local disk. The image is no longer available in the process after processing.
Vision extracts text from the image. The backend then sends the OCR text, not the photograph, to Google Gemini using the Gemini 2.5 Flash Lite model to structure and normalize the label. Google Vision and Google Gemini are independent providers; their provider-side processing and retention are governed by their applicable rules and terms and are not fully controlled by BiteOrNot.
Backend OCR records
BiteOrNot Firestore temporarily keeps raw OCR text, OCR lines and words, confidence/status data, the structured label result, and a hash of the payload or photograph for idempotency, reliability, and avoiding unnecessary repeated OCR/AI processing. These records are retained for up to 7 days and are deleted by Firestore TTL. Raw OCR can therefore be stored on the BiteOrNot backend during that period.
Product cache
The backend may keep shared product information such as barcode, product name, brand, quantity, nutrition, ingredients, allergens or traces, normalized product data, Open Food Facts image metadata, and generated product thumbnails. Firebase Storage is used for generated Open Food Facts product thumbnails, not for user label photographs. This shared cache describes products and is not a private history of a particular user.
Local scan history
Scan history is local to the device and may contain a barcode, product name, brand, nutrition, ingredients, allergens or traces, and a structured scan result. It does not contain the original label photograph or raw OCR text, and the current client does not synchronize it to Firebase. Individual history entries can be deleted in the app; all local data can also be removed with Android Clear app data or by uninstalling the app.
Analytics
BiteOrNot uses Firebase Analytics / Google Analytics for limited usage events such as app opened, scan started, product found or not found, label fallback used, result shown, paywall shown, and purchase started or completed. Custom events do not include raw label photographs, raw OCR text, barcodes, product names, email addresses, or the specific name of a health condition, allergen, or diet. They do include the aggregate profile indicators described above. The release build does not request Android Advertising ID permission. Analytics retention is controlled by Firebase/Google Analytics configuration and Google service settings; Google Signals status is not stated here because it has not been independently confirmed.
Pseudonymous installation identifier
The app generates a random, pseudonymous install_id. It may be sent to the backend for OCR/AI rate limiting and idempotency, subscription verification, and entitlement or usage controls. The backend does not persist the raw value as a permanent identifier; it uses a hash instead. That hash may be stored in Firestore and linked to usage, entitlement, and billing records. BiteOrNot is therefore not a completely anonymous or identifier-free service.
Subscriptions and billing
Subscriptions use Google Play Billing. During verification, the backend temporarily receives a purchase token, product or base-plan information, package name, and the pseudonymous installation identifier. The raw purchase token is used with the Google Play Android Publisher API and is not persistently stored in BiteOrNot Firestore. BiteOrNot stores a hash of the purchase token, subscription status, expiry, product or base plan, acknowledgement/entitlement metadata, and, when available, a hash of the order ID, linked to the pseudonymous installation hash. BiteOrNot does not receive or store payment-card details; Google Play handles payment details.
Security controls
The app uses Firebase App Check, Google Play Integrity, and HTTPS/TLS communication. The Android client does not directly access the Firebase database; the backend accesses it through server functions. This policy does not make additional claims about encryption at rest.
Cloud logs
Google Cloud or Cloud Run access logs may contain an IP address, User-Agent, request URL, request and response size, HTTP status, protocol, and latency. Standard Cloud Logging retention is currently 30 days. BiteOrNot application logs do not record raw photographs, raw OCR text, raw install_id, raw purchase tokens, or the raw health profile.
Website-specific data
The public BiteOrNot website is currently a static frontend. Its source does not implement Google Analytics or other analytics, advertising pixels, cookies, localStorage/sessionStorage, a contact form, login, or a website backend. The Contact link opens an email client; the website itself does not receive a form submission. Hosting provider logs, if any, are controlled by the hosting provider and are not defined by this frontend source.
Third-party services
- Open Food Facts: barcode lookups and product information.
- Firebase Cloud Functions and Firestore: BiteOrNot backend processing and structured/cache records.
- Firebase Storage: generated Open Food Facts product thumbnails.
- Firebase Analytics / Google Analytics: limited usage and aggregate profile indicators.
- Firebase App Check and Google Play Integrity: app and request integrity controls.
- Google Cloud Vision: OCR through
documentTextDetection. - Google Gemini / Google AI: structuring OCR text with Gemini 2.5 Flash Lite.
- Google Play Billing and the Google Play Android Publisher API: subscription purchase and verification.
- Google Cloud Logging: service access and application logs.
- Google ML Kit Barcode Scanning: on-device barcode detection.
Independent providers apply their own processing and retention rules; BiteOrNot does not control those rules.
Data retention
- Local profile and history remain on the device until the user deletes them or Android removes app data.
- Ordinary local product cache may have an automatic TTL or size limit.
- Backend OCR/idempotency records: up to 7 days, with Firestore TTL deletion.
- Cloud Logging: currently 30 days.
- Analytics: controlled by Firebase/Google Analytics and Google service settings.
- Final backend product cache and thumbnails: no defined automatic expiry is currently confirmed.
- Hashed billing/entitlement records: no defined automatic expiry is currently confirmed.
- Some usage quota or aggregate backend records: no defined automatic expiry is currently confirmed.
Data deletion
You can delete local data by deleting individual history entries, or by opening Android Settings → Apps → BiteOrNot → Storage → Clear data. Uninstalling the app also removes its local data.
Deleting the app does not automatically delete previously collected Firebase Analytics data, an OCR/idempotency record before its 7-day TTL expires, hashed billing or entitlement records, or shared product cache data.
If you contact BiteOrNot by email and want support/contact information deleted, email [email protected] with the subject "Data deletion request". Because there is no user account and backend identifiers are pseudonymous or hashed, BiteOrNot may not be able to reliably identify a particular backend record from an email request alone. We will consider privacy or deletion requests using the identifiers and technical information available to us, subject to technical limitations and legal obligations.
Important limitations
Product data and OCR can be incomplete, outdated, or incorrect. BiteOrNot is not a substitute for checking the original product label or for professional medical advice. When data is missing or unclear, the app is designed to show CHECK.