LEGAL

Privacy policy

How SlipSave handles your account, receipts, and billing data.

Account & authentication

Signing up creates an account on our backend (Supabase, EU region). We store your email address and an account ID. We don't store your password — Supabase hashes it before writing. If you sign in with Google we also receive your Google account email; we never see your Google password.

Receipt processing

When you tap Process on a scan, the receipt images you selected are sent to our backend, which forwards them to the AI service with a fixed extraction prompt. We do not store your raw photos on our servers — they pass through to the AI service and are discarded after extraction. The parsed JSON (store name, items, prices) is returned to your phone and saved in the local SQLite database.

Per-call audit log

Each AI call is logged on our server: which user triggered it, the model identifier, token counts (no text), latency, and outcome (success / cap-hit / error). We use this to enforce free / Pro caps and to detect abuse. Token counts are aggregate numbers — the receipt content itself is not stored on the server.

Device fingerprinting

To stop a single device from creating dozens of free accounts to skip the cap, every Process tap mints a Play Integrity token and sends a hash of your Android SSAID (SHA-256 with a server-side salt). The hash can't be reversed to your SSAID and is only used to count how many free scans came from this device.

Subscription billing

Pro is a Google Play subscription. Google handles the payment; our server only sees the resulting purchase token, subscription ID, and renewal/cancel events from Real-time Developer Notifications. We use those to mark your account as Pro. Card details never reach us.

Geolocation

Off by default. If you turn it on in Settings → Privacy & data, a one-time location fix is attached when you finish a scan; the coordinates live alongside that single shop event row in the local database — they never leave the device.

Card numbers in receipts

Anything that looks like a 16- or 19-digit card number in the AI's parsed text is replaced with [redacted] before it lands in the database — same on the local side.

Sign-out vs. delete account

Sign-out wipes the receipts on this device but keeps your account on our server. The next sign-in starts with a clean local database (cloud sync is on the roadmap, not yet shipped, so locally-cached receipts are removed to prevent another sign-in from another account seeing them).

Delete account permanently removes your account on our server, which cascade-drops the per-call audit log and every subscription notification we've ever received for you, then wipes the local database and image folder. Your billing history at Google is unaffected — manage it from the Play Store.

This summary is the binding policy for the app — if it ever disagrees with what the code does, the code is the bug.