Privacy Policy
Effective October 19, 2026
tidytab (“we,” “us”) is a free bill-splitting tool. We collect only what we need to make the product work, and we don’t sell your data to anyone. This policy explains what we collect, why, and who else touches it. If you’re in the EU, UK, or Switzerland, your rights under the GDPR are all gathered in a dedicated section near the end.
What We Collect
Information you provide
- •Your name (when creating a bill, contributing, or joining a group)
- •Email address (optional for bill creators and group members, required for an account)
- •Phone number (optional): used to sign in with an SMS code or added in your profile. Every account still has a confirmed email, which is where notifications go.
- •Email address, if you ask for a reminder while paying later (optional): used only for at most two reminders about that bill, then deleted when you pay, when the bill is settled, when you stop the reminders, or after 30 days at the latest.
- •Payment details you choose to share (Venmo, Zelle, CashApp, PayPal, Revolut, or Wise handles, and bank details such as an IBAN)
- •If you continue with Google or Apple, the name and email address they share with us. Apple can share a private relay address instead of your own.
- •Receipt photos you upload
- •Bill amounts and item details
Information collected automatically
- •Analytics (page views, performance, and anonymous feature usage events) via Vercel Analytics and PostHog - on by default in the US; cookieless and in-memory for EU, UK, and Swiss visitors until they opt in (see Cookies & Local Storage below)
- •A count of how many people opened each bill and the time of its last activity, shown only to the person who made it. To tell visitors apart without cookies or anything stored on your device, our server keeps a one-way code made from your IP address, your browser's user agent and the bill, under a key that changes every day. We also keep the time each open was counted. Your IP address and user agent are never stored, and the code cannot be linked across bills or days.
- •Authentication cookies when you sign in
- •A preferences cookie storing your name and preferred payment method (180 days)
Text invites open your phone’s own Messages app; on iPhone, you can choose a contact with the system contact picker. The chosen contact is read on your device only and nothing about it is sent to tidytab; tidytab sends no SMS for invites. Android requests no contacts permission.
How We Use Your Data
- •Split bills - calculate shares, track contributions, generate payment links
- •Send notifications - email a host when their bill is created, when it is fully paid, and a summary if it stalls; email group members about a new group bill and a weekly summary of their balance. If you ask while paying later, email you at most two reminders about that bill. Apart from the one-time bill-created message, these emails carry an unsubscribe link, and you can always email us to stop any of them.
- •Read receipts - your receipt photo is sent to an AI model to extract line items, totals, and tax
- •Improve the product - anonymous analytics help us understand which features get used
Third-Party Services
We use a small number of services to run tidytab. Each receives only the data it needs:
| Service | What it receives | Why |
|---|---|---|
| Google and Apple | A sign-in request when you choose Continue with Google or Continue with Apple | Signing in |
| Anthropic | Receipt images | AI receipt scanning (OCR) |
| OpenAI | Receipt images, when Anthropic cannot complete the scan | Backup AI receipt scanning (OCR) |
| Microsoft Azure OpenAI | The same receipt images, when OpenAI also cannot complete the scan | Backup receipt scanning, on the same AI models as OpenAI |
| Resend | Email addresses, notification content | Sending emails |
| Supabase | All stored data | Database and file storage |
| Twilio Verify | Phone numbers | Sending SMS codes |
| Upstash | Short-lived request counts, filed under a one-way code made from your network address or account ID | Rate limits that stop abuse |
| Vercel | Anonymous usage metrics | Hosting and analytics |
| PostHog | Page views, feature usage events, opaque user ID (authenticated hosts only), masked session recordings (layout and taps; no words, no typed values, no images) | Product analytics and session replay |
Supabase Auth sends SMS codes through Twilio Verify. Twilio keeps verification logs under its own privacy policy.
We do not sell, rent, or share your personal data with advertisers or data brokers.
Cookies & Local Storage
Authentication cookies
If you sign in, Supabase sets session cookies to keep you logged in. These are essential for authentication.
Preferences cookie
We save your name and preferred payment method in a cookie (180 days) so you don’t have to re-enter them each time.
Region cookie
Outside the EU, UK, and Switzerland we set a tidytab_region cookie (24 hours) so the site knows standard analytics may run. It holds no identifier - just that classification - and in consent-required regions it is never set at all.
Local storage
Your browser stores contribution history and payment preferences locally on your device to improve the experience. The same store holds a few small notes about what you’ve already been shown, so we don’t ask twice - among them tidytab_celebrated_payments, a count of the payments you’ve completed on this device. This count holds no identifier, never leaves your device, and is never sent to analytics. tidytab_paid_bills lists the short link codes of the bills you have paid on this device, and tidytab_repeat_host_invite_seen lists the bills where we have already invited you to host one of your own. tidytab_repeat_host_invite_dismissed remembers that you chose Not now on that invitation, and does not expire. These lists stay on your device. When we show the invitation, analytics receives the number of different bills you have paid on this device only where analytics storage is allowed (by default everywhere outside the EU, UK, and Switzerland; there, or when we cannot tell where you are, only after you opt in). Analytics receives the link code of the bill you are on in every region, as described under Analytics below, but never the lists themselves.
After you publish, tidytab.hostProfile.v1 remembers your name, email and payment details on this device to fill in your next bill, even when you are signed out; this convenience record is separate from analytics, and Clear on the bill form, signing out or deleting your account erases it.
Analytics
We use Vercel Analytics and PostHog to collect usage data, including page views, feature usage events (e.g., bill creation, payment method chosen), and AI model performance metrics. Where analytics storage is allowed, authenticated hosts are identified by their account user ID alone - never their email address - so their activity joins up across devices. While analytics are cookieless, your browser and the app send nothing that links your activity to your account; a few things you do while signed in - signing in, creating a bill, creating a group - are still recorded against your account ID by our server. Anonymous contributor activity is tracked at the bill or group level, not the individual level. No names, emails, or payment account details are sent to analytics services for anonymous users.
What happens by default depends on where you are. In the US - and everywhere else outside the EU, UK, and Switzerland - standard analytics are on from your first visit, and you can opt out any time with the control below. If you’re in the EU, UK, or Switzerland, or if we can’t tell where you are, analytics start cookieless instead: everything stays in memory, nothing is written to your device, and session replay is off unless you opt in via the consent banner. When analytics are on, PostHog may store an identifier in cookies/local storage and record sessions so we can watch back anonymized usage. Whichever way you decide, your choice is saved on your device - the tidytab_consent key in local storage plus a matching cookie our server refreshes, so a browser storage cleanup can’t silently flip your decision - and strictly functional storage (like the sign-in nudge dismissal) never leaves your device.
Everything sent to PostHog is masked in your browser first, recordings and ordinary events alike. Every word the page displays is replaced with asterisks, and so is everything you type. Accessible labels, tooltips and the page title are masked or dropped. Images, including receipt photos and avatars, are recorded as an empty box of the right size, with no link to the file. A link to another site keeps only the site, so a payment link reads https://venmo.com, without the handle or the amount. A web address keeps the page path and loses everything after the question mark, wherever it appears: in the page, in a link, in a recorded request, and in the address of the page itself.
What is left is the shape and position of what was on screen, which page you were on, and where you tapped, scrolled and typed. Events carry the page path, your browser and device type, and what you did in product terms: a bill created, a payment method chosen, the size of a share. A group is recorded by its ID. If you are signed in, both carry your account ID; your email address is not sent.
One more analytics key, and only when analytics are on: the first time you open a bill, or create one, we write tidytab_first_touch to local storage - the bill’s short link code, the date, and whether you were a guest or its host. It records only that first time: later bills never replace it, and the one thing that can change it is finding out that the bill it names was yours all along, which corrects “guest” to “host” and keeps the original date. It exists so that if you later create a bill of your own we can count how often someone who arrived as a guest went on to host. The link code never leaves your browser - the event carries only “arrived as a guest” and the number of days since. We neither write nor read it while analytics are off, so in a consent-required region nothing is stored before you opt in and nothing is sent afterwards if you opt out; opting out below deletes it outright.
The same key also holds a referral code, when a link or a printed card you arrived on carried one (for example tidytab.app/new?ref=haas-f26). It tells us which campus programme or group a new host came from, it is the first one only, and it is never anything but the short code itself. If analytics storage is off for you, the code is kept in memory for that browsing session alone and nothing is written to your device.
Links from this site to the App Store and Google Play name the part of the site they sit in, such as the footer, so we can see which ones lead to installs. The first time the Android app opens, and only where analytics storage is allowed, it asks Google Play for that same label and sends it with the install; nothing else Google Play returns leaves your phone. The iPhone app reads nothing like it.
Analytics preferences
You have not chosen yet: until you do, analytics stay anonymous and in-memory only.
Receipt Images
Receipt photos are stored in our cloud storage to display on the bill page. They are sent to Anthropic for AI-powered text extraction. When Anthropic cannot complete the scan because of an outage, a timeout or an unusable answer, the same image may then also be sent to OpenAI, and to Microsoft Azure OpenAI when OpenAI also cannot complete the scan. We do not use your receipt images to train AI models. We delete a bill’s receipt photos 12 months after the bill is settled, and photos that never became part of a bill after 7 days.
Guest Reminder Emails
If you plan to pay later, you can leave an email address to get at most two reminders about that bill: one the next morning, then one 3 days later. We keep your address, the name you gave on the bill, your share when we can calculate it, and your browser’s time zone to choose a morning send. If neither of our daily runs is morning in your time zone, we use the earlier run. Your address stays on the server and goes only to our email provider to send the reminders. The host never sees your address or whether you requested a reminder.
We delete the reminder when your payment is confirmed, when someone pays for you by name, when the bill is covered or settled, when the bill is deleted or stops collecting, when you stop reminders using the link in either email, or within 30 days either way. Deleting an account with that email address also deletes its reminders. The stop link applies to that bill; it does not create a list of addresses to block.
Data Retention
Your phone number is stored in Supabase Auth with your account and is erased when you delete your account, including during email setup. Removing the number from your profile unlinks it from your account. Your phone number is never sent to PostHog or included in analytics events.
Guest reminder addresses are deleted when you pay, when the bill is covered or settled, when you stop the reminders, or after 30 days at the latest. At most two emails are sent; your address is never used for marketing.
Open counts are kept with their bill and deleted with it. Bills, contributions, and group data are kept as long as they’re useful to you. Apart from receipt photos, we don’t auto-delete old data. If you want your data removed sooner, you can delete your account yourself at any time, or email us.
Your sign-in, own unpublished solo bills, profile, badges, and device notification registrations are erased. Bills you hosted or confirmed and your group balances stay with your name replaced by “Deleted user” and your payment details removed. Your email is removed from every bill. Bills made with your email that you never confirmed keep their creator’s name and payment details. You can confirm the bills you made on the account deletion page before deleting.
Your Rights
- •Unsubscribe - apart from the one-time bill-created message, every notification email has an unsubscribe link, and you can always email us to stop any of them
- •Delete your account - do it yourself at tidytab.app/account/delete, in seconds, or email hello@tidytab.app and we’ll remove your information for you
- •Ask questions - reach out anytime at hello@tidytab.app
If you’re in the EU, UK, or Switzerland, the GDPR gives you more rights on top - they’re all in the dedicated section below.
Children
tidytab is not intended for children under 16. We do not knowingly collect data from anyone under 16.
Changes to This Policy
If we make meaningful changes, we’ll update this page and the effective date above. For major changes, we’ll do our best to notify you via email.
Contact
Questions about this policy? Email hello@tidytab.app.
For visitors in the EU, UK & Switzerland
Everything above applies to you too. This section adds the disclosures and rights that are specific to your region.
Who’s Responsible (Data Controller)
The data controller for tidytab is Terry Tang. Full contact details, including a postal address, are on our Impressum. For anything privacy-related, email hello@tidytab.app.
Legal Bases Under the GDPR
Each of the purposes in “How We Use Your Data” rests on a legal basis under Art. 6 GDPR:
| Purpose | Legal basis |
|---|---|
| Running the service (bills, groups, payment links, receipt scanning) | Contract (Art. 6(1)(b)) - it’s what you asked us to do |
| Emails to hosts and group members (with an unsubscribe link, apart from the one-time bill-created message) | Contract (Art. 6(1)(b)) and legitimate interest (Art. 6(1)(f)) |
| Counting how many people opened a bill, for its host (a daily one-way code, nothing stored on your device) | Legitimate interest (Art. 6(1)(f)) - letting a host see whether their link reached everyone |
| Reminder emails you ask for | Consent (Art. 6(1)(a)), withdrawn with the link in any reminder |
| Operational analytics (anonymous, cookieless, in-memory) | Legitimate interest (Art. 6(1)(f)) - understanding and improving the product |
| Persisted analytics and masked session replay | Consent (Art. 6(1)(a)) - only if you opt in, withdrawable anytime with the control above |
| Security, rate limiting, and abuse prevention | Legitimate interest (Art. 6(1)(f)) - keeping tidytab safe |
International Transfers
tidytab is operated from the United States, and the providers listed under “Third-Party Services” process data there. Where data leaves the EU, transfers rely on the safeguards each provider commits to in its data-processing terms - the EU-US Data Privacy Framework where the provider is certified, and the European Commission’s Standard Contractual Clauses otherwise.
Analytics Storage & Consent
For you, cookieless analytics are the default: until you opt in via the consent banner, analytics state lives in memory only, nothing is written to your device, and session replay is off. If you decline (or never decide), the cookieless default stays. The only analytics-related storage before an opt-in is your consent choice itself - the tidytab_consent key and its matching cookie, kept so a storage cleanup can’t flip your decision. You can change your mind any time with the analytics preferences control above.
Your GDPR Rights
The GDPR gives you these rights on top of the ones above - all free, all via a simple email to us (erasure you can also do yourself, instantly, on the delete account page):
- •Access (Art. 15) - get a copy of the personal data we hold about you
- •Rectification (Art. 16) - correct inaccurate data
- •Erasure (Art. 17) - have your data deleted
- •Restriction (Art. 18) - limit how we process your data
- •Portability (Art. 20) - receive your data in a machine-readable format
- •Objection (Art. 21) - object to processing based on legitimate interest
- •Withdraw consent (Art. 7(3)) - e.g. flip the analytics preference above, anytime
You also have the right to lodge a complaint with a data protection supervisory authority - in Germany, for example, the authority of your federal state, or any EU supervisory authority of your choice. We’d appreciate the chance to sort it out directly first, but you don’t have to give us one.
See also our Terms of Service for the rules of using tidytab, and our Impressum for provider information.