Cookie Policy
What we store on your device, why, and how to control it.
This page satisfies the transparency requirements of the UK Privacy and Electronic Communications Regulations (PECR) and supplements the main privacy policy. It lists every cookie, localStorage entry, and similar storage technology that ChooseOut uses on the website, what it’s for, how long it lives, and which consent category it falls under.
1. How to control your cookies
The cookie banner appears on your first visit (or after we ship a material change). It offers three buttons of equal prominence:
- Reject all — only strictly necessary cookies are set.
- Manage — opens granular toggles per category.
- Accept all — turns on Strictly necessary + Functional + Analytics + Advertising.
You can change your choice at any time via the Cookie settings link in the app’s settings menu, or by clearing your browser’s site data for chooseout.ai (which will re-open the banner on next visit).
We log each banner action (which categories you accepted, when, and from which hashed IP) for accountability under UK GDPR Art. 7(1). That audit row contains no raw IP and no identifiers beyond the consent record itself.
2. Categories
Strictly necessary — always on
Required to deliver the service you have asked for. PECR’s “strictly necessary” exemption covers these even without consent.
| Name | Purpose | Lifetime | Where |
|---|---|---|---|
session | Keeps you signed in across pages | Session | HTTP cookie, ChooseOut domain |
userPostcode | Remembers the postcode you entered so we don’t ask every page | Persistent | localStorage |
chooseout-basket-{id} | Your in-progress basket items per restaurant, so refreshing the page doesn’t lose them | Persistent | localStorage |
theme | Light/dark theme preference; reads pre-paint to avoid flashing the wrong colour scheme | Persistent | localStorage |
chooseout_consent_v2 | Your cookie-banner decision so we don’t re-prompt on every visit | Persistent | localStorage |
chooseout_anon_id | Random UUID linking your consent record across page loads when you are not signed in | Persistent | localStorage |
Functional — consent required
Small UI preferences that survive across visits. Useful but not essential — the site works fine with these off.
| Name | Purpose | Lifetime | Where |
|---|---|---|---|
FilterPanel-collapsed-* | Remembers whether you collapsed a particular filter section | Persistent | localStorage |
chooseout_onboarding_gate_seen | Skips the welcome screen after you have seen it once | Per browser session | sessionStorage |
chooseout.postcodePresets | Your saved postcode shortcuts (“home”, “office”) | Persistent | localStorage |
flappy-highscore | Easter-egg game high score | Persistent | localStorage |
Analytics — consent required
First-party product analytics so we can see which features are useful. PostHog is hosted on its EU cloud (Frankfurt); requests are proxied through chooseout.ai/ingest so ad-blockers don’t accidentally degrade the service for users who have consented.
| Name | Purpose | Lifetime | Where |
|---|---|---|---|
ph_* | PostHog distinct ID + session identifiers | Up to 12 months | localStorage + cookies (PostHog SDK) |
Server-side analytics_events rows | Mobile + web event firehose (event name, properties JSON, platform, device model) | 90 days identifiable; longer as anonymised aggregates | ChooseOut database |
Before forwarding any event to PostHog we strip raw search queries (sent only as length + token count), full postcodes (sent only as outcode), and email addresses (dropped entirely). PostHog never sees these in raw form.
Advertising — consent required
Advertising is what keeps ChooseOut free to use. Nothing below is set, and no request reaches Google’s ad servers, until you accept the Advertising category. If you decline, the website shows no ads at all. ChooseOut Gold subscribers never see ads.
| Name | Purpose | Lifetime | Where |
|---|---|---|---|
__gads | Google AdSense ad selection and frequency capping | 13 months | HTTP cookie, ChooseOut domain |
__gpi | Google identifier used for ad personalisation | 13 months | HTTP cookie, ChooseOut domain |
__eoi | Google identifier used for ad fraud detection and reporting | About 6 months | HTTP cookie, ChooseOut domain |
Google ad-domain cookies (NID, IDE and similar) | Set by Google on its own domains when an ad is requested | Up to 13 months, on Google’s schedule | Third-party cookies, google.com and doubleclick.net |
This category was previously listed as “Marketing — not in use”. The underlying consent key is unchanged, so any choice you made before still applies; because the categories in use have changed, the banner version has been bumped and you will be asked again.
3. Third-party scripts that are NOT cookies but still touch your device
For complete transparency: a few third-party scripts run in your browser on chooseout.ai. They are not cookies in the strict sense, but PECR covers them as “similar technology”.
- Apple Sign In SDK (loaded from
appleid.cdn-apple.com) — only used if you click “Sign in with Apple”. Apple may set its own cookies on its domain; we have no control over those. This script is loaded on page load because Apple requires it to be ready when the user clicks the button. - Google AdSense (
adsbygoogle.js, loaded frompagead2.googlesyndication.com) — the script that requests and renders ads on chooseout.ai. Unlike the Apple script above, it loads only after you have accepted the Advertising category. Before that, no request reaches Google’s ad servers. - Web fonts — we self-host Inter and JetBrains Mono under
/fonts/. We do NOT load fonts fromfonts.googleapis.comany more — that change in May 2026 closed a leak where Google was receiving your IP on every page load before any consent.
4. Mobile apps
The iOS and Android native apps don’t use HTTP cookies in the website sense. They use:
- iOS Keychain for authentication tokens and the install token described in §2 of the privacy policy — a random identifier that counts your free monthly fee-check allowance and merges a guest session into your account. It is not an advertising identifier. (Earlier versions of this page also mentioned “encrypted delivery-platform sessions” / “Connected accounts”. That feature does not exist and no such data is captured.)
- App-local storage for postcode, onboarding state, dietary preferences, notification preferences and your recent searches.
- PostHog mobile SDK for the same first-party product analytics described above (subject to the same consent gate — see the mobile app’s privacy settings).
- No advertising SDKs. Google AdMob, Meta Audience Network and AppLovin MAX were listed here in earlier versions of this page. Neither app contains any of them — they were removed from the iOS app and were never present in the Android app — so nothing reads the device advertising identifier (IDFA on iOS, GAID on Android), nothing shows Apple’s App Tracking Transparency prompt, and no advertising frequency-capping or session state is stored on your device. See §7 of the privacy policy.
5. Changes to this policy
If we add a new category or a new third-party script, we will update this page and re-prompt you via the banner. The banner’s version field bumps whenever we change the available categories so you can review the new options before continuing.
6. Questions
Email [email protected] — we will respond within 30 days.