Experiment units and privacy
Reading or writing an assignment on the device (cookie, localStorage) is device access under § 25 TDDDG, and the German data protection authorities grant no exemption for testing. X3 therefore assigns without any device storage by default.
Units
| Unit | Id | Stable for | Device access |
|---|---|---|---|
pageload | random id of the page load (memory) | one page load | none |
day | the daily visitor hash X3 already uses for cookieless sessions (salt rotates at midnight) | same network and browser, one project day | none |
visitor | the consented visitor id x3_vid | one browser, ≤ 13 months | only with consent |
A visitor is never placed in a weaker unit than the experiment needs: a visitor-sticky experiment does not enrol visitors without consent ("unit unavailable"). The analysis unit is always the assignment unit.
Per consent mode
| Mode | Before consent | After consent |
|---|---|---|
| cookieless | day or page load | visitor (with visitor ids on), else day |
| strict | day or page load; exposure only from code (no visibility reads) | as cookieless |
| require | not enrolled: control, no assignment request | enrolled from the consent on |
Visitors who opt out (optOut(), GPC/DNT when respected) are never enrolled.
Honest statements (shown with every result)
- Visit-days are not people. Someone returning on another day may see both arms – this dilutes the effect toward zero (conservative) and cannot be detected; results say "Besuchstage".
- A visit across midnight becomes two units; multi-day conversions need visitor units.
requiremode analyses consenters only.
Recordings and heatmaps per arm
Behaviour views per arm (page map, heatmap, mass replay, recordings) use exactly the data your capture settings allow – an experiment never widens them. Each arm shows its basis ("solange nicht abgelehnt" or "nur mit Zustimmung"), arms below the project's minimum number of visitors show "zu wenig Besucher", and with heatmaps or recordings switched off the experiment page says so instead of linking to an empty view. Single recordings stay subject to the recordings permission and consent rules.
Public by design
Flag keys, arm keys, arm params and the client-evaluable targeting ship in the public client
config – anyone can read which tests run. Use neutral keys (pricing-test-2) and never put
unpublished prices or offers into params; X3 warns about prices, percentages and words like
"intern". Never in the public config: names, hypotheses, notes, metrics, results, creators.
Never done
No fingerprinting beyond the daily hash, no IP storage, no device storage without consent, no experiment data sent to ad platforms, QA and test traffic never enter results.