App Privacy Policy

Last updated · covers the Cashout mobile app. The trycashout.com website is a different system with its own policy.

The short version

Who is responsible for your data

The data controller is Bastien Youssfi, trading as YOUSSFI BASTIEN (entrepreneur individuel), registered in France:

Cashout is a one-person project. The person who reads that inbox is the same person who wrote the code this page describes.

What stays on your phone

The app keeps its state in a key-value store inside its own private sandbox on the device, and that copy is the one the app actually reads. We don't add a second layer of encryption on top; it is protected by iOS's own file protection and the device passcode, the same as the rest of the app's storage. Every screen in the core loop — the streak, the money counter, the panic button, the check-in, the lessons — works with the network switched off, because none of them wait on a server.

Two things in particular never leave your device, on any plan, signed in or not:

Using Cashout without an account

You can install the app and use it without signing in. In that state there is no account, nothing syncs, and the only thing that leaves the phone is the analytics listed below, attached to a random identifier the analytics SDK generates rather than to you.

The free crisis tools go further. The helplines and the self-exclusion directory are shipped inside the app as a plain data file, so they open with no network at all. The app picks which country's helpline to show from your device's time zone — that time zone is read on your phone and is not sent anywhere to make the choice. Tapping the number hands it to the phone dialler; the call is between you and the helpline, and there is no analytics event on that tap.

What syncs to our server

When you have an account, the app pushes the following to our Supabase database. This is a mirror of your local data, not a second collection — if you can see it in the app, it's here; if you can't, it isn't.

What The exact fields
Your profile The first name you typed, your quit date, the monthly figure from the quiz, your goals, what you bet on, your triggers, your quiz answers, and your best streak.
Check-ins The date, your mood 1–5, and your urge level. The note field is always empty.
Slips The time, the trigger chip, and an amount if you entered one.
Urge sessions The time and the outcome. Nothing about what set it off.
Program progress Which day numbers you have finished.
Streak When it started, your best run, and your total clean days.

Unlike analytics, the server copy holds your exact figures — it has to, because it is the backup of the numbers the app shows you. It is protected by row-level rules in the database itself: a signed-in client can read and write its own rows and is refused at the database on anyone else's, whatever the app asks for.

The server also generates an anonymous handle like QuietHarbor_402 when your account is created. That handle is the only identity other people ever see, and it is generated server-side precisely so it can't be set to your real name.

Analytics: the complete list

We use PostHog's EU service to understand which parts of the app help. After you sign in, these events are tied to your account id — so this is identified analytics, and saying otherwise would be untrue. What keeps that honest is how narrow the events are.

The rules the code enforces, not just the intent:

Getting started

app_first_opened The first launch, with a fixed install source.
onboarding_screen_viewed Which onboarding screen, and its position.
quiz_answered The question id, the option id you tapped, and how long the screen was up. Option ids only — the quiz has no free-text answers.
quiz_completed Your score, its band, and your monthly-loss band.
results_viewed Your score band.
money_projection_viewed The band of the five-year figure shown.
auth_completed Whether you used Apple, Google, or skipped.
commitment_held The quit date you committed to.
notifications_prompt_answered Whether you allowed notifications.
rating_prompt_shown Where the App Store rating prompt appeared.
onboarding_completed How many milliseconds onboarding took.

Subscription

paywall_viewed Which offering, and what led you there.
paywall_plan_selected The product id you selected.
purchase_started The product id.
purchase_completed The product id.
purchase_failed A short error code — cancelled, unavailable, store_error.
paywall_dismissed Seconds on screen.
winback_offer_viewed Nothing at all.
winback_offer_accepted The product id.
restore_attempted Whether the restore found a purchase.

The core loop

checkin_completed Your mood 1–5, your urge band, and your check-in streak.
panic_opened Whether you reached it from the tab, a notification, or the feed.
panic_step_completed Which step of the panic flow.
panic_resolved The outcome — held, relapsed, abandoned — and how long it took.
relapse_logged How many days the streak had run, and which trigger chip you tapped. Never an amount.
streak_milestone_reached The milestone day.
money_detail_viewed Nothing at all.
goal_added Which goal, from the fixed list of five.

The 90-day program

lesson_started The day number and phase.
lesson_completed The day number, phase, and how long it took.
phase_completed The phase number.

Community

feed_viewed Which tab — latest, milestones, SOS.
post_created The post type. Never the text.
comment_created Nothing at all. Never the text.
reaction_added Which reaction.
post_reported A fixed reason code.
sos_posted Nothing at all.

Shield

shield_setup_started Which ring — device, money, legal.
shield_apps_blocked A banded count of blocked apps, never their names.
selfexclusion_link_opened Which self-exclusion scheme you opened.
bank_guide_opened Which bank's guide you opened.

Lifecycle

notification_opened Which kind of notification.
app_opened Which day of use this is.
account_deleted Nothing at all.

What's attached to your account profile

Alongside those events, five summary properties are stored against your analytics profile at sign-in: your dependence band, your monthly loss band, what you bet on, your goals, and where you said it mostly happens — all as fixed option codes from the quiz. No name, no email, no exact figure.

What the analytics SDK adds on its own

Every analytics tool attaches technical context, and pretending otherwise would make the rest of this page worth less. PostHog's SDK adds: your app version and build, device manufacturer, model and type, OS name and version, screen size, locale, time zone, whether it's a simulator, and a random device identifier it generates on first launch. It also records app-lifecycle events — installed, updated, opened, backgrounded.

Any request to any server necessarily arrives carrying an IP address. Ours is configured to throw it away: IP anonymisation is switched on at the PostHog project level, so the address is not stored on the event and no location is derived from it. The same project settings enforce the three rules above — autocapture, session replay and heatmaps are disabled on the server as well as in the app, so a change to the app alone could not turn them on.

Subscriptions and payment

Purchases run through Apple's In-App Purchase system and are managed by RevenueCat. We never see your card, and never receive it. Apple takes the payment; RevenueCat tells our server whether your subscription is active.

RevenueCat creates its own anonymous id for your device, and when you sign in the app tells it to link that id to your account id — so a purchase you made before signing in still follows you afterwards. We send it nothing else: no name, no email, no quiz answers. Our server keeps a mirror row with your subscription status, product and renewal date, which the app can only read, never write.

Cancelling is done in your Apple ID subscription settings and takes effect without asking us. We do not put a retention flow in front of it.

The community feed

Posts and comments are user-generated content that other people can read. Treat anything you post as public to everyone in the app. They are shown under your generated handle, never your name, but the text itself is exactly as you wrote it — if you put an identifying detail in a post, it is visible.

Post and comment text is stored on our server and is never sent to analytics — the events above record that a post was created and its type, and nothing more. You can delete your own posts, and deleting your account removes them.

Reports and blocks are stored too: a report keeps who reported what, and a block keeps who blocked whom. Both are readable only by you and by moderation.

Moderation

Every post and comment is checked by a rule-based filter on our server — pattern matching for contact details, lending, tipster promotion and abuse. That runs on our own infrastructure.

The app can additionally be configured to send the text of a post to OpenAI's moderation endpoint for a second opinion. When that is enabled, the post's text is sent and nothing else — no account id, no handle, no device information. If we have not enabled it, the rule-based filter runs alone. This page will say so either way; as of the date at the top, treat it as enabled.

One rule is not negotiable, and it is written into the moderation code: crisis language is never hidden. Someone posting that they want to die is the person this app exists for. That post surfaces a helpline and stays standing where other people can answer it.

Notifications

Reminders, milestone nudges and trigger-window check-ins are scheduled on your device by the app itself. They are not sent from a server, which means no server needs to know your schedule, your streak or your quiet hours to deliver them. The app does not currently register a push token, so there is no way for us to push you anything.

Turning notifications down in iOS Settings is enough; nothing about it needs to reach us.

Signing in with Apple or Google

Both are optional — the app creates an anonymous account for you at first launch and you can stay on it. If you do sign in, the provider returns an email address, which is stored by Supabase against your account and used for nothing except recognising you on your next device.

Apple's Hide My Email works normally here: we receive the relay address and never learn your real one. We do not send marketing email to app accounts at all.

Who else touches the data

Each of these processes data on our behalf under a data processing agreement, and none may use it for their own purposes.

Company What it does What it sees
Supabase, Inc. Hosts your account and the copy of your data that syncs between devices. Everything in the sync table above, plus the email address your sign-in provider returns.
PostHog (EU Cloud) Product analytics — which screens help and where people get stuck. The events listed above, tied to your account id. No text you typed.
RevenueCat, Inc. Runs the subscription: purchases, renewals, restores. Your account id and the App Store transaction. No name, no email from us.
Apple Takes the payment and, if you use it, signs you in. Apple's own record of the purchase. We never see your card.
OpenAI, L.L.C. Optional second opinion on community moderation. Only if enabled — see below. The text of a community post or comment, with no id attached to it.

Supabase, RevenueCat and OpenAI are US companies, so data may be processed outside the European Economic Area. Those transfers rely on the European Commission's Standard Contractual Clauses. PostHog is used on its EU Cloud.

Deleting your data

Delete account in the You tab does the whole thing in one step: it clears the synced rows, deletes the account itself — which cascades to every remaining row, including your posts and comments — breaks the link between your device and the analytics profile, and wipes the local copy on your phone. There is no confirmation funnel and no "are you sure you don't want 50% off".

Reset all data is the softer option: it clears your local data and the server copy but keeps the account.

Uninstalling the app removes the local copy with it. If you had an account, the server copy survives an uninstall — use Delete account first if you want it gone.

For a copy of your data, use Export my data in the You tab. It writes everything above to a JSON file and hands it to the iOS share sheet, so the file goes wherever you send it and nowhere else — we never receive a copy. It works offline from the data on your phone; run it with a connection and it includes your community posts and subscription details too, and the file says which version you got.

If you'd rather we did it, email [email protected] and we'll send it within 30 days.

How long we keep things

Why we're allowed to hold it

Quiz answers about gambling are sensitive in substance even where they are not special-category data in law, and we treat them that way: they sync to your own row, they are readable only by you, and only their bands ever reach analytics.

Your rights

You can ask us to show you the data we hold, correct it, delete it, hand it over in a portable form, restrict what we do with it, or object to the analytics. Email [email protected] and we'll act within 30 days. Deletion you can do yourself, immediately, in the app.

If you think we've handled your data badly, complain to the French data protection authority, the CNIL, or to the supervisory authority where you live.

Age

Cashout is rated 17+ and is not intended for anyone under 18. Gambling is age-restricted everywhere we operate. We don't knowingly collect data from minors — tell us and the account is gone that day.

What the app never does

Changes

When this policy changes, the date at the top changes with it. Anything that widens what we collect gets a notice in the app before it takes effect, not a quiet edit.

Contact

[email protected] — questions, data requests, or anything on this page that reads as untrue. The last one gets answered first.