Cookie Policy
Last updated: 26 September 2026
Your choice
We ask before we store anything on your device that is not strictly necessary. Until you press Accept on the cookie banner, none of the analytics or advertising items on this page load: the Google tag is not requested, PostHog is not started, Vercel Web Analytics does not load, our own page-view record is not sent, and no affiliate referral cookie is written.
You can change or withdraw that choice at any time — it takes one click, the same as giving it, and it is the same control either way:
Withdrawing consent deletes the identifiers we can reach from your browser and reloads the page so nothing non-essential is left running. Some third-party cookies (for example Google's test_cookie on doubleclick.net) can only be removed by your browser, because they are not readable by this site.
We rely on your consent under regulation 6 of the Privacy and Electronic Communications Regulations 2003 (PECR) and Article 6(1)(a) UK GDPR. Strictly necessary items are used under the PECR exemption, which does not require consent.
What Accept turns on
The cookie banner is short on purpose. This is the full version of what it asks. Pressing Accept allows the following, and pressing Reject allows none of it. Essential cookies, the ones that run the site and keep you signed in, are used either way.
- PostHog product analytics (EU region, reached through zen-mode.io/ingest): which pages you view, which features you use, and which marketing source you arrived from. Clicks and other interactions are counted without the text or attributes of the element involved.
- PostHog heatmaps: where people click, move the mouse and scroll to, on our public marketing pages only, never inside the dashboard, the admin area or the affiliate portal.
- PostHog session recording: a replay of the page, on our public marketing pages only, never inside the dashboard, the admin area or the affiliate portal, and never on the sign-in or sign-up pages. Everything you type into any field is masked before it leaves your browser: we see that a field was filled in, not what was in it. Console messages, network headers and request bodies are not recorded.
- Google Ads: the Google tag, so we can tell which ad brought a sign-up and build remarketing audiences. Until you accept, the Google tag is not even requested.
- Vercel Analytics: page-level traffic counts. It sets no cookie, but each page view sends one request to our own domain.
- Our own records: a page-view record on our servers, a cookie remembering which marketing source first brought you here, and an affiliate referral cookie if you arrived from a partner's link.
Every item is listed with its exact cookie or storage key, who sets it and how long it lasts in the analytics and advertising table below. Withdrawing consent stops all of it straight away, recording included. The Privacy Policy covers what happens to the data afterwards.
Google Consent Mode
Before any Google tag can run, the page sets Google Consent Mode v2 to denied for advertising storage, advertising user data, advertising personalisation and analytics storage. If you accept, we send an update granting those four. If you do not, the Google tag is never loaded at all, so the denial is the only state it would ever see.
Used without asking you
Most of this table is the strictly necessary set: signing in, keeping you signed in, remembering your theme, and recording the cookie choice itself. Turning those off would break the service, so PECR does not require consent for them.
Two rows are not cookies at all, and are listed because they store nothing on your device, which means regulation 6 does not reach them and there is no consent gate to put them behind. The first is Sentry error reporting, which runs on every page so that a broken page gets noticed. Sentry's own Session Replay, which would have recorded a reconstruction of your screen, is switched off entirely. The second is the Peacock chat assistant: opening it stores nothing in your browser, but sending it a message stores that message, the reply and your IP address on our servers, and sends the message to Anthropic to generate the reply. Its retention runs on two clocks, the IP address at 30 days and the conversation at 12 months, and section 9 of the Privacy Policy covers it in full.
The homepage website preview adds three strictly necessary items, and only once you enter your website and ask for a preview: the zm_home_preview cookie, which carries that request into sign-up so your setup opens with your website and suggested audience; the zm_hpv cookie, which limits how many previews one browser can run; and a Vercel BotID check that the request comes from a person. You asked for the preview, and we cannot provide it without them, so they are not behind the consent choice. We store neither cookie's value nor your IP address, only a scrambled (hashed) form, and both cookies expire after a day.
| Name / key | Stored as | Set by | Purpose | Duration |
|---|---|---|---|---|
| zm_consent | cookie | ZenMode (first-party) | Records whether you accepted or rejected non-essential cookies, so we do not ask again and every gate can read your choice. | 6 months |
| __client, __client_uat, __session | cookie | Clerk (third-party) | Keeps you signed in and protects the sign-in flow. Set on zen-mode.io by our authentication provider. | __client up to ~13 months; __session ~1 minute, refreshed |
| __clerk_environment | localStorage | Clerk (third-party) | Caches the sign-in configuration so the sign-in form renders without a round trip. | Until cleared |
| __cf_bm, _cfuvid | cookie | Cloudflare (third-party) | Bot filtering in front of our authentication provider. Set when the sign-in components load. | __cf_bm 30 minutes; _cfuvid until the browser closes |
| zen_affiliate | cookie | ZenMode (first-party) | Signed session for the affiliate partner portal. Only set after an affiliate signs in. | 30 days |
| sf_code_verifier | cookie | ZenMode (first-party) | One-time PKCE verifier for connecting a Salesforce account. Only set while an integration is being authorised. | 10 minutes |
| zm_recovery | cookie | ZenMode (first-party) | Identifies you when you follow a sign-up recovery link from one of our emails. | 30 days |
| zenmode_demo | cookie | ZenMode (first-party) | Marks a session that entered the read-only product demo, so the demo dashboard renders. | 2 hours |
| zm_home_preview | cookie | ZenMode (first-party) | Only set when you enter your website on the homepage. Carries that request into sign-up, so your setup opens with your website and suggested audience instead of asking again. Holds a random code; your website is kept on our server, not in the cookie. | 1 day |
| zm_hpv | cookie | ZenMode (first-party) | Only set when you enter your website on the homepage. A random code that limits how many website previews one browser can run, which protects the service from abuse. We store only a scrambled (hashed) form of it, and never your IP address. | 1 day |
| Vercel BotID bot check | Nothing stored on your device | Vercel (first-party) | Loaded only when you start typing your website on the homepage. Checks that the website preview is being requested by a person, not an automated script, so the service cannot be abused. It runs through zen-mode.io and we set no cookie for it. | No cookie set by ZenMode |
| theme | localStorage | ZenMode (first-party) | Remembers light or dark mode. | Until cleared |
| Sentry error reporting | Nothing stored on your device | Sentry (first-party) | Reports JavaScript faults so a broken page is noticed. Stores nothing on your device — no cookie, no local or session storage — and the report (page address, browser user agent, stack trace) is sent through zen-mode.io/monitoring. Sentry Session Replay, which would have recorded a reconstruction of your screen, is switched off entirely: we record no sessions. | No storage on your device |
| Peacock chat assistant | Nothing stored on your device | ZenMode (replies generated by Anthropic) (first-party) | The chat bubble on zen-mode.io. Opening it stores nothing on your device: no cookie, no local or session storage. Once you send a message we store on our servers the message as you typed it, the reply, and the IP address it came from, and we send the message plus the recent messages in that conversation to Anthropic (United States) to generate the reply. Your IP address is not sent to Anthropic. We read these conversations to correct the assistant when it answers badly. Retention is two separate clocks: the IP address is removed after 30 days and the whole conversation is deleted after 12 months, both by a daily job. | No storage on your device; on our servers, IP removed after 30 days, conversation deleted after 12 months |
| zm_chunk_reload_at | sessionStorage | ZenMode (first-party) | Stops a reload loop when a deploy invalidates the page's JavaScript while your tab is open. | Until the tab closes |
Analytics and advertising — only after you accept
None of these load until you press Accept. Durations are the maximum lifetime the provider sets; a cookie can be removed sooner by you or your browser.
| Name / key | Stored as | Set by | Purpose | Duration |
|---|---|---|---|---|
| _gcl_au, _gcl_aw, _gcl_gb | cookie | Google (Google Ads) (first-party) | Attributes a sign-up to the Google ad that brought you here, and builds remarketing audiences. Loading the Google tag also contacts google.com and google.co.uk. | 90 days |
| _gcl_ls | localStorage | Google (Google Ads) (first-party) | Google's first-party linker store, used for the same ad attribution. | Until cleared |
| test_cookie | cookie | Google (doubleclick.net) (third-party) | Checks whether your browser accepts cookies before Google sets advertising identifiers. | 15 minutes |
| zm_trial_conv_fired_*, zm_email_signup_conv_*, zm_ads_conv_* | localStorage | ZenMode (first-party) | Stops us counting the same Google Ads conversion twice for the same person. | Until cleared (zm_ads_conv_* until the tab closes) |
| ph_<project key>_posthog | cookie | PostHog (EU region) (first-party) | Product analytics: pages viewed, features used, and which marketing source you arrived from. Requests are proxied through zen-mode.io/ingest to eu.i.posthog.com. | 1 year |
| PostHog storage keys (ph_*) | localStorage | PostHog (EU region) (first-party) | Holds the same analytics identifier and the queue of events not yet sent. | Until cleared |
| PostHog session recording | Nothing stored on your device | PostHog (EU region) (first-party) | Records a replay of the page on our PUBLIC MARKETING PAGES ONLY — the home page, pricing, blog, comparison and policy pages — so we can see where the wording or layout confuses people. It never runs on the dashboard, the admin area or the affiliate portal, and never on the sign-in or sign-up pages. Everything you type into any field is masked before it leaves your browser: we record that a field was filled in, not what was in it. Passwords are never recorded. The recording is kept on PostHog's servers in the EU, not on your device, and it stops the moment you withdraw consent. | No storage on your device; the recording is kept on PostHog's servers in the EU |
| PostHog heatmaps | Nothing stored on your device | PostHog (EU region) (first-party) | Counts where people click, move the mouse and scroll to, on the same PUBLIC MARKETING PAGES ONLY. It records coordinates and the page address, not the content of the page and nothing you type. It never runs on the dashboard, the admin area or the affiliate portal. | No storage on your device |
| zm_first_touch_*, zm_signup_complete_* | localStorage | ZenMode (first-party) | Stops us re-sending your first-touch marketing source and sign-up event on every page load. | Until cleared |
| Vercel Web Analytics | Nothing stored on your device | Vercel (first-party) | Page-level traffic counts. Sets no cookie and no storage, but each page view sends a request to zen-mode.io/_vercel/insights/view. | No storage on your device |
| ZenMode page-view record | Nothing stored on your device | ZenMode (first-party) | Sets nothing on your device, but records on our servers: the page path, the referring URL, any utm_* parameters, your browser's user agent, your screen width, the country and city your IP resolves to, and, if you are signed in, your user id. | No storage on your device; the server record is deleted after 90 days |
| ZenMode download-click record | Nothing stored on your device | ZenMode (first-party) | Sets nothing on your device. When you press a desktop-app download button we record which button and platform, and whether you were signed in. Only if you accepted analytics cookies do we also record your user id, so we can see whether people who download go on to use the app. | No storage on your device; the server record is kept while we measure activation |
| zm_ft | cookie | ZenMode (first-party) | Remembers which marketing source first brought you to zen-mode.io (the utm_source / utm_medium / utm_campaign tags on that page, the referring website's name and the page you landed on), so that if you sign up we can tell which of our channels works. Written only after you accept. Before that, the landing page is held in the open tab's memory and nothing is stored. Copied to your account once you sign up, then deleted from your browser. Sent only over HTTPS (Secure). | 90 days, or until you sign up |
| zen_ref, zen_ref_at | cookie | ZenMode (first-party) | Credits an affiliate partner if you arrived from their referral link. Sent only over HTTPS (Secure). Recording the click also stores your IP address, your user agent, the referring URL and the landing page on our servers. A daily job deletes that server record after 24 months, which is how long an affiliate commission can still be queried. Email hello@zen-mode.io to have yours removed sooner. | Cookie 90 days; the server-side click record 24 months, deleted by a daily job |
Where this data goes
Google LLC (United States), Sentry (United States), Vercel (United States), Cloudflare (United States) and Anthropic (United States) process data outside the UK. PostHog is on its EU region (Germany) and our requests reach it through a proxy on our own domain. Where data leaves the UK/EEA we rely on the provider's Standard Contractual Clauses or the UK International Data Transfer Agreement. The full list of processors, including the ones that never touch your browser, is in our Privacy Policy.
Questions
Email hello@zen-mode.io. You can also complain to the UK Information Commissioner's Office at ico.org.uk.