Privacy policy

This privacy policy describes how Profilia collects and uses data when you visit profilia.app.

Data controller

The data controller is Adrien Albuquerque, a French sole trader (micro-entrepreneur) registered under SIRET 980 175 475 00014, APE code 6201Z. Contact: contact@profilia.app.

Data Protection Officer (DPO): no DPO is designated. Under art. 37 GDPR this is not mandatory in our case (micro-enterprise, no large-scale processing of sensitive data, no systematic monitoring at scale). For any privacy-related question, please contact the data controller directly.

Minimum age

Profilia is intended for users aged 15 and older, in line with art. 8 GDPR and the French Data Protection Act. If you are under 15, please obtain consent from a parent or legal guardian before using the site.

Data collected

Anonymous audience measurement

When you browse Profilia, start or complete a test, we record the following events in a strictly anonymous way:

  • The page or quiz and the profile obtained
  • Completion duration
  • Device type (mobile, desktop, tablet)
  • Scores
  • Language (French or English)
  • Country derived from the browser's Accept-Language header
  • Language detection: on your first visit, we read your browser's Accept-Language header to automatically suggest the site in your language. This information is not stored: only your explicit choice (clicking the language switcher) is remembered via a functional locale cookie.
  • The domain of the page you arrived from (e.g. google.com, reddit.com): domain name only, never the full URL or query parameters
  • The AI answer engine you arrived from, where applicable: answers from ChatGPT, Perplexity or Copilot add a parameter to the link they offer. We read it, but we never store its raw value: we keep only a label drawn from a closed list of seven engines, and nothing at all if the address matches none of them. That label names a product, never a person, and it cannot take any value outside those seven. It tells us what share of our visitors arrives through an AI rather than a search engine, which no other measurement can show.
  • Which blocks of the result page actually appeared on your screen (comparison invite, next test suggestion, account prompt, your profile content, bottom of page, and the group grid if you arrive from a session link): we measure on-screen display only, never your cursor position or reading time. This tells us whether a rarely used block is unconvincing or simply never reached.
  • Whether you opened a content tab on your result, once per page: this is the only click we record on this page, and it says neither which one, nor how many times, nor how long you read. It tells us whether the content is read at all, which nothing else does.

We do NOT collect any individual marketing attribution (campaign UTM, ref_code) on these tables. That information is persisted only at explicit conversion events (outbound share, comparison, account deletion) on a dedicated table with no link to your browsing journey. Two exceptions, listed above and deliberately bounded: the entry page path, normalised before storage, and the AI answer engine label, drawn from a closed list. Neither can carry your identity nor take a free-form value, and neither is campaign data.

Rotating session identifier

To group events from the same visit we compute a session identifier from a truncated IP address (last octets zeroed), a coarse User-Agent (browser and OS family only, no version) and a secret salt regenerated every day and immediately thrown away. This "rotating salt" technique guarantees it is impossible to link two visits from the same user across different days. The identifier is therefore genuinely anonymous under the CJEU C-413/23 P ruling of 4 September 2025 and the CNIL guidelines of 4 July 2025 on consent-exempted audience measurement.

Aggregated data

Individual data is aggregated into daily statistics (number of completions per quiz and per profile). These aggregated statistics contain no individual information.

User account (optional)

Profilia offers optional account creation. Tests remain accessible without registration. If you choose to create an account, the following data is collected:

  • Email address: used solely for magic link authentication (no password is stored)
  • Name: to personalize your dashboard
  • Quiz history: completed quizzes, profiles obtained, scores, and dates are saved to allow you to track your evolution

You may sync quiz history completed before account creation (stored locally in your browser) to your account. This synchronization is voluntary.

Comparison sessions

The "Challenge a friend" feature creates a comparison session that allows you to compare your results with a friend's. These sessions:

  • Are accessible via a unique link (UUID) that you share
  • Contain participant scores and profiles (anonymous data)
  • Automatically expire after 30 days
  • Anyone with the link can view the results

Personality DNA sessions

The "My DNA" feature generates a cross-quiz personality profile. By default your DNA is computed entirely in your browser from your local history: nothing is sent to the server. A session is only persisted in our database if you explicitly click "Share". In that case:

  • It is accessible via a unique link (UUID)
  • It contains profiles and dimensions from your quizzes (anonymous data)
  • It automatically expires after 30 days

Group sessions

The "Group mode" feature lets several people take the same test and see the aggregated breakdown. These sessions:

  • Are reachable through a unique link (UUID) shared by the host
  • Contain the participants' scores and profiles, with no personal identifier
  • Show no breakdown until at least 3 people have answered: below that, the grid would point at each of them
  • May carry an optional first name, visible to the host only, and an optional email address
  • Expire automatically after 30 days

The email address, if you enter one, serves a single purpose: telling you once that enough people have answered for the grid to appear. It is never used for marketing, is tied to no account, is visible neither to the other participants nor to the host, and disappears with the session after 30 days. Nothing is pre-ticked: entering the address is the consent, and leaving the field empty takes nothing away from your participation.

Full report waiting list

At the end of a test, you can ask to be notified when a paid "full report" launches. It does not exist yet. If you leave your email address there:

  • It serves a single purpose: notifying you once, on the day that report becomes available
  • It is stored with the test concerned, the language of the page and the amount you were shown, and nothing else
  • No account is created, no payment is requested and no banking data is collected
  • It is linked to no browsing identifier: no IP address, no session identifier, no quiz history
  • It is automatically deleted after 12 months
  • You can leave the list at any time by writing to the address shown under the form, and every email you receive will carry an unsubscribe link

The amount shown is indicative and serves to measure real interest in this offer. Leaving your address commits you to nothing.

Cookies and third-party trackers

Profilia does not use any third-party cookies or trackers for advertising or analytics. No advertising script (Google Ads, AdSense, Meta Pixel) or third-party analytics tool (Google Analytics, Google Tag Manager) is loaded.

Web audience measurement is handled by Umami, an open-source solution that we self-host on the subdomain stats.profilia.app (Hetzner Germany infrastructure, no data transfer to a third-party vendor). Umami is cookieless: it does not set any cookie in your browser. For logged-out visitors, the visitor identifier is derived from your IP, User-Agent, and a monthly rotating salt, which limits to one calendar month the ability to link two visits from the same browser, and removes it beyond that. Events are retained for 25 months maximum and then automatically purged, in line with the CNIL ceiling for consent-exempt audience measurement (CNIL recommendation of 4 July 2025).

For users logged into a Profilia account, a stable pseudonymous identifier (your internal user ID, never your email or name) is associated with your Umami sessions so we can retrieve your quiz history across devices. This association is opt-out at any time from Settings → Data & privacy, and is automatically cleared at logout. Legal basis: contract performance (you created the account voluntarily). Logged-out visitors remain strictly anonymous as described above.

Third-party services

Resend (transactional emails)

Login emails (magic links) are sent via the Resend service. Your email address is transmitted to Resend solely for sending the authentication email. Learn more: Resend's privacy policy.

Sentry (error tracking)

The website uses Sentry to detect and fix technical errors. Sentry collects technical diagnostic data: error messages, execution traces, browser type and version, URL visited at the time of the error, and IP address. IP addresses are automatically anonymized by Sentry and are not used for identification purposes. No other personal data (name, email, etc.) is transmitted. This processing is based on our legitimate interest in ensuring service stability. Learn more: Sentry's privacy policy.

Legal basis

  • Legitimate interest: anonymous quiz tracking allows us to improve the service (usage statistics, abandon rates, profile distribution). Technical error tracking (Sentry) also falls under legitimate interest.
  • Performance of contract: collecting your email during account creation is necessary to provide the authentication and quiz history service.
  • Consent: joining the full report waiting list relies on you voluntarily entering your email address, in a form whose sole purpose is that. No box is pre-ticked.

Data retention

  • Anonymous audience measurement data (quiz completions, starts, page views, including the entry path and the AI engine label described above): retained for up to 25 months, then purged automatically (CNIL maximum for consent-exempted audience measurement).
  • Attributed conversion data (shares, signups with UTM): retained for up to 13 months.
  • User account data: retained as long as your account is active. When you delete your account, a 30-day grace period lets you cancel via an email link; after that, all of your personal data (account, email, sessions, badges) is permanently erased and your quiz results are detached from your identity (kept for aggregate statistics only).
  • Magic link authentication tokens: valid for 15 minutes, then purged hourly.
  • Comparison sessions: automatically deleted after 30 days.
  • Shared DNA sessions: automatically deleted after 30 days.
  • Group sessions (including the optional first names and email addresses they carry): automatically deleted after 30 days.
  • Server access logs (nginx): IP addresses are truncated (/24 for IPv4, /48 for IPv6) before being written.
  • Aggregated statistics (DailyStat): retained indefinitely as they cannot be linked to any individual.
  • Full report waiting list (email address, test concerned, language, amount shown): automatically deleted after 12 months.

Sub-processors and non-EU transfers

Profilia relies on a limited set of sub-processors. Each is covered by a Data Processing Agreement and, for US vendors, by the EU-US Data Privacy Framework:

  • Hetzner Online GmbH (Germany): servers and database hosting. No non-EU transfer.
  • Resend (United States, DPF): sending magic link emails, account deletion emails and the group grid unlocked notification.
  • Sentry (United States, DPF): technical error monitoring, IPs anonymised at source.
  • Cloudflare (United States, DPF): CDN and anti-DDoS protection, processes anonymised technical logs.

Your rights

Under the GDPR, you have the following rights:

  • Right of access: know what data concerns you
  • Right to rectification: have inaccurate data corrected
  • Right to erasure: request the deletion of your data
  • Right to object: object to the processing of your data
  • Right to data portability: receive your data in a structured format

If you have an account: you can export all of your personal data as JSON from the "Data & privacy" section of your settings, and trigger account deletion with a 30-day grace period from the same screen.

Anonymous audience measurement data: thanks to the daily rotating salt, it is technically impossible for us to identify your visits among aggregate data. We cannot honour an individual erasure request on these tables, but they are purged automatically after 25 months at the latest.

Right to object to audience measurement: you can object at any time, with no account and no justification, using the button below. No third-party marketing or analytics cookies are set on this site.

Anonymous audience measurement is active in this browser. You have opted out of audience measurement in this browser.

Your browser blocks local storage, so your choice could not be saved. Check your privacy settings, or leave private browsing.

This choice applies to this browser and this device, and is kept until you clear the site data. It stops both page statistics and quiz journey measurement.

Right to complain: if you believe your rights are not respected, you may lodge a complaint with the French data protection authority (CNIL).

For any questions or requests, contact us at: contact@profilia.app.

Changes

This policy may be updated at any time. The date of the last modification is indicated below.

Cookie and local storage declaration

Below is everything this site stores on your device, cookies as well as browser local storage. Article 82 of the French Data Protection Act covers both in the same way, so both are declared here. Everything is either strictly necessary to operate the service or falls under consent-exempt audience measurement.

Cookies

  • laravel_session, XSRF-TOKEN: form security and temporary session identification (session duration).
  • locale: stores your language preference if you've selected one explicitly (12 months).

Audience measurement

  • profilia_attempt:<test>: random identifier for a test attempt, sent along with your anonymous result. It only prevents the same attempt from being counted twice, for example if you reload the results page. It contains no information about you, cannot link you across days or across sites, and disappears when the tab closes or a new attempt starts.
  • profilia_engaged_<test>: fixed-value marker that prevents your engagement in the same test from being counted twice within the same tab (tab duration).
  • profilia_tracking, profilia_tracking_v2: arrival context of the visit (source, entry page), kept for a rolling 30 minutes. No personal identifier. If you arrive through a comparison challenge, the identifier of that challenge is added; it designates the game played, not the person who started it.
  • profilia_own_refs: the share markers this browser placed itself, so you are never counted as arriving from your own link. Ten at most, no identifier.

Your content, which stays with you

  • profilia_quiz_history, the tests' progress state, profilia_badges_known and profilia_badge_events: your in-progress answers, your results and your badges. They live in your browser and are only sent to our servers if you ask us to, by creating an account or sharing a link.

Display preferences

  • profilia_theme, profilia_locale_nudge, profilia_adn_capture_dismissed, profilia_auth_prompt_dismissed, profilia_consent: your theme, and whether you've already dismissed a given suggestion, so we don't show it to you again.
  • profilia_group_*: markers that let you find your way back to a group session you created or joined.

Technical markers

  • __profilia_probe__: trial key, written then immediately erased, used to check whether your browser allows storage.
  • profilia_build_reload: marker set once per tab, which prevents the page from reloading in a loop when a site update has left a stale file in your browser cache.
  • _tracking_err_<endpoint>: marker set when a measurement request failed, so the incident is reported once per tab rather than thousands of times. It only holds the technical name of the request concerned.

Your opt-out

  • profilia_tracking_opt_out, umami.disabled: remember your refusal of audience measurement if you exercise it. As long as they are set, nothing is written or sent, including the attempt identifier above.

No advertising cookie, third-party analytics tracker or profiling tracker is set.

Last updated: April 9, 2026