Privacy Policy
Last updated: 2026-09-26 · What changed: accounts that nobody signs in to for 18 months may now be deleted, after a warning email (§6 and §10).
1. Who we are
EPSO EU Testing is a study tool for EU competition (EPSO) candidates. The data controller is the operator of eutesting.org (see Impressum for full identification and contact details). This site is not affiliated with EPSO or any EU institution.
2. What data we collect
We collect the minimum possible:
- Contact form — when you send a message we process the name, email and message body you type.
- Browser local storage (
localStorage / sessionStorage) — we store your language choice, your quiz answers, your progress, your dark-mode preference, and your cookies-consent flag. If you are not signed in, these remain on your device only and never reach our server. If you are signed in, your answers and progress are also synchronised to your account so you can continue on another device — that copy is the "account data" described in the next bullet.
- Account data (registered users only) — if you create an account we store your email address, a hashed password (we never see the plain-text password), an identifier issued by our authentication provider (Netlify Identity), your registration date, last sign-in date, and (optionally) a copy of your quiz progress so you can resume on another device.
- Subscription data (premium subscribers only) — if you subscribe to a paid plan we store a Stripe customer identifier, the subscription identifier, the subscription status (e.g.
active, past_due, canceled) and the current period end date. We do not store, see or transmit your payment-card number, expiry, CVV or billing address — these are handled entirely by Stripe on Stripe's own domain (Stripe Checkout).
- Technical connection data (everyone, unavoidably) — as with any website, your IP address, the page you requested, the time, your browser's user-agent string and the referring site reach our hosting provider's servers, because a web request cannot be delivered without them. Netlify records these in its operational logs. We have no access to those raw logs and never see an individual visitor's IP address.
- Error reports (only when something fails) — if signing in, loading your account, starting a payment or opening the billing portal fails in your browser, the page sends us a short error report: which step failed, the error message and HTTP status, our host's error reference, your sign-in method (email or Google) and, if you are signed in, the account identifier issued by Netlify Identity — never your email address. Our host adds your browser's user-agent string and the country it infers from your IP address; the IP address itself is not stored. Nothing is sent while everything works.
- Audience statistics — Netlify derives aggregate visit statistics from those same logs: pages requested, referring site, country, bandwidth and requests that returned an error. The country is inferred from the IP address by Netlify; we receive only the aggregate counts, never the addresses. This happens entirely on Netlify's servers — no script runs in your browser for it, and it sets nothing on your device.
We do not collect precise location data, advertising identifiers, biometric data, or any third-party data. We do not build profiles, do not track you across other websites, and take no automated decisions about you.
3. Purposes
- Contact form: to reply to your message.
- Local storage: to remember your progress and keep your language and display preferences between sessions. Functionally necessary for normal use of the site.
- Account data: to authenticate you across devices, recover your password if forgotten, and unlock the registered-tier content (currently Set 2). We also keep the language you use the site in, so that account notices reach you in that language.
- Account notices: to email you about your account itself, and nothing else: a change to this policy that affects your account, and the warning before an unused account may be deleted (§6). These are not newsletters or advertising; we do not send you marketing email.
- Subscription data: to verify your premium access (Set 3 and beyond), bill the recurring monthly fee, and let you cancel or update your plan via Stripe's Billing Portal.
- Technical connection data: to deliver the pages you request, keep the service running and secure, and diagnose faults and abuse (the logs are also what show us that the site is being probed by automated scanners).
- Error reports: to find and fix faults that stop you signing in, loading your account or subscribing — failures that otherwise leave no trace on our side.
- Audience statistics: to understand which study material is actually used, so we know what to write and translate next, and to see when the site is being scanned by automated traffic.
4. Legal basis (GDPR Art. 6)
- Contact form: consent — Art. 6(1)(a) — you click "Send" voluntarily.
- Local storage: strictly necessary for the service the user has requested — Art. 6(1)(b)/(f) and the "strictly necessary" exception of the ePrivacy Directive.
- Account data: performance of a contract — Art. 6(1)(b) — your account is the contractual relationship that enables you to use registered features.
- Account notices and deleting unused accounts: performance of a contract — Art. 6(1)(b) — and our obligation to keep personal data no longer than needed — Art. 5(1)(e) and Art. 6(1)(c). Telling you before we delete an account is part of that.
- Subscription data: performance of a contract — Art. 6(1)(b) — and compliance with statutory accounting and tax obligations — Art. 6(1)(c) (German Commercial Code §257 HGB and §147 AO require retaining billing records for up to 10 years).
- Technical connection data: legitimate interests — Art. 6(1)(f) — operating a secure, functioning website. This processing is unavoidable: without your IP address the server cannot send you the page you asked for.
- Error reports: legitimate interests — Art. 6(1)(f) — keeping the service you use working. A report is sent only after a failure, contains no email address, writes nothing to your device and is used for nothing but fixing the fault. You may object under Art. 21 GDPR — see §7.
- Audience statistics: legitimate interests — Art. 6(1)(f) — namely running, maintaining and improving a site people can actually use. We consider this proportionate because it is produced entirely on our host's servers from request logs: no script runs in your browser for it, and nothing is stored on or read from your device, so no consent is required under Art. 5(3) of the ePrivacy Directive (implemented in Germany as §25 TDDDG). It creates no persistent identifier, builds no profile and does not follow you to other sites, and what we receive is aggregate counts. You may object to this processing at any time under Art. 21 GDPR — see §7.
5. Processors
We rely on the following third-party data processors, each operating under a GDPR-compliant Data Processing Agreement:
- Netlify, Inc. — hosting, contact-form delivery, authentication (Netlify Identity), key-value storage of account and subscription metadata and of error reports (Netlify Blobs), serverless backend (Netlify Functions) and aggregate audience statistics (Netlify Analytics, produced from server logs).
- Stripe Payments Europe, Ltd. (Dublin, Ireland) — payment processing, recurring billing, fraud prevention, and customer-billing portal. Stripe receives your name, email, billing country, payment-card details and the price of the subscription. Stripe is itself the controller for some payment-fraud-prevention processing (see Stripe's privacy policy).
- Brevo (Sendinblue SAS) (Paris, France) — delivery of account emails (sign-up confirmation, password reset, email-address change). Brevo receives your email address and the content of that email. Brevo counts whether these emails are opened and their links clicked; we have set this counting to anonymous, so it is not linked to your address, and we do not use it for anything. The link in these emails therefore passes through a Brevo redirect before reaching eutesting.org.
- IONOS SE (Montabaur, Germany) — hosting of our mailbox
contact@eutesting.org, where messages you send us by email or through the contact form are kept (see §6), and from which we send the account notices in §3 by hand.
There is no other processor. The website itself is self-contained: static HTML, self-hosted fonts, no advertising networks, no tracking pixels on its pages, and no third-party analytics product of any kind — no Google Analytics, no Google Tag Manager, no Plausible, Matomo, Fathom or equivalent. No script of any kind runs in your browser to measure you. The only statistics that exist are the aggregate ones Netlify derives from its own server logs, described in §2.
6. Retention
- Contact-form messages: kept in the operator's inbox until answered, and at most 24 months thereafter, then deleted.
- Browser local storage: stays on your device until you clear it manually (browser settings → clear site data, or the Reset button in the quiz).
- Account data: retained while your account is in use. If you request account deletion (see §10), we remove the account record within 30 days, except for data that is also linked to billing records (see below).
- Unused accounts: if nobody signs in to an account for 18 months, it may be deleted. Before we delete an account, we email a warning to its address, and we delete it no earlier than 30 days after that warning, and only if it has still not been used. Deletion removes the login, the account record, saved progress, saved jobs and news, and written-test submissions. Signing in at any time, including after the warning, keeps the account. We review unused accounts by hand from time to time, so a warning or a deletion may come later than these periods: they are the earliest point at which it can happen, not a fixed date. For accounts that existed before 26 September 2026, the 18 months are counted from the date this rule takes effect, never from earlier inactivity. The rule does not apply while you have Premium access, while a subscription payment is outstanding, or while a written test you submitted is still waiting to be graded. Billing records are kept as described below.
- Record of warnings and deletions: we keep a log of the warnings we send and the accounts we delete for 24 months. It holds the date, the action and a one-way code derived from the email address, never the address itself.
- Technical connection data: held in Netlify's operational logs under Netlify's own retention policy. We keep no copy and cannot retrieve individual entries.
- Error reports: deleted automatically after 90 days.
- Audience statistics: Netlify keeps a rolling window of roughly the last 30 days. Older data is not available to us — we verified on 27 August 2026 that querying any longer period returns nothing beyond that window.
- Subscription / billing data: retained for as long as required by German tax law — up to 10 years from the end of the calendar year of the last invoice (§257 HGB, §147 AO) — even after account deletion. During this period the data is restricted to billing-records use only and is no longer used for any other purpose.
7. Your rights
You have the right to access, rectify, erase (subject to §6 above), restrict the processing of, port, and object to the processing of your personal data. To exercise these rights, use the contact form on the site.
Objecting to the audience statistics (Art. 21 GDPR). These rely on our legitimate interests, so you may object — tell us through the contact form. Being honest about what that can and cannot achieve: the statistics are counted on our host's servers from ordinary request logs and hold no identifier for you, so we cannot single out and delete "your" past entries, and no browser setting or content blocker can prevent them, because nothing runs in your browser to block. You also have the right to lodge a complaint with your national data protection authority (in Germany: the Hamburg Commissioner for Data Protection, datenschutz-hamburg.de).
8. Cookies and tracking
This site sets no analytics or advertising cookies at all. There is no Google Analytics, Google Tag Manager, Plausible, Matomo or equivalent third-party analytics product, no advertising network and no tracking pixel. No data is sold or shared with marketers, and nothing is used to follow you to other websites.
We do keep one measurement, described in full in §2: aggregate audience statistics, which our host produces on its own servers from ordinary request logs. It uses no cookie, writes nothing to your device, runs no script in your browser and assigns you no identifier. You may object to it — see §7.
Until 27 August 2026 this site also carried a page-performance script (Netlify Real User Metrics) that reported load-speed measurements, your operating-system family and your screen dimensions. It has been switched off and no longer runs on any page.
Everything set on the eutesting.org domain is strictly necessary for the service you asked for:
Cookies
nf_jwt and a refresh token (Netlify Identity) — keep you signed in across page reloads. Deleted when you log out or close the browser.
Browser storage. The rest is localStorage, which stays on your device and is never sent anywhere by itself. In the interest of being checkable rather than vague, this is the complete list of keys we set:
epso_hub_state_v1 — your quiz answers, progress and current position.
epso_notes_v1 — notes you type while studying.
eut.checklist — the exam-preparation checklist you tick off.
epso_lang and eut.lang — your language choice.
eut.theme and darkMode — light or dark appearance.
epso_sub_cache_v1 — a short-lived copy of your subscription status, so premium pages do not flash as locked while the server answers.
gotrue.user — your sign-in session, written by Netlify Identity.
cookies_consent_v1 — records that you have dismissed the cookies notice so we do not show it again.
You can clear all of it at any time from your browser's "clear site data", or with the Reset button inside the quiz.
If you proceed to a Stripe Checkout or Billing Portal page, Stripe sets its own cookies on its own domain (checkout.stripe.com, billing.stripe.com) for security, fraud prevention and session continuity. These cookies are controlled by Stripe, not by us — see Stripe's cookies policy.
9. International data transfers
Netlify (data hosting, authentication, serverless functions and audience statistics) is a US-incorporated company that processes data in the EU and the US. It relies on the EU-US Data Privacy Framework and Standard Contractual Clauses approved by the European Commission to ensure an adequate level of protection for personal data transferred outside the EEA.
Stripe processes EU customers' data primarily through Stripe Payments Europe, Ltd. in Dublin (Ireland), with some technical processing in the US under Standard Contractual Clauses and the EU-US Data Privacy Framework.
10. Account and subscription deletion
You may cancel your subscription at any time via the Manage subscription link inside your account menu (which opens the Stripe Billing Portal). Cancellation takes effect at the end of the current billing period — premium access remains until then.
You may request the deletion of your account at any time by contacting us through the contact form. Upon deletion, we remove your email address and account record from our database within 30 days, subject to the billing-data retention obligation explained in §6. Cancelling your subscription does not automatically delete your account; closing your account does not automatically refund any unused portion of a paid period.
You may also export your personal data (a copy of what we hold) at any time via the same contact channel.
An account that nobody signs in to for 18 months may be deleted, after a warning email at least 30 days before (see §6). If you would like a copy of your data before that happens, reply to the warning or use the contact form.
11. Changes
This policy may be updated to reflect site or legal changes. The date above indicates the current version, and the “What changed” line next to it summarises the latest change. We may also email you about a change that affects your account, as an account notice (§3).