legal / cookies
Cookies and storage.
The tracker writes nothing to a visitor's device. The panel uses cookies, because somebody signs into it. Those are different pieces of software and this page keeps them apart. Last updated 2026-09-19. Questions go to privacy@kehai.io.
01
Why this page exists separately
Two very different things get called cookies, and putting them in one paragraph is how a reader ends up misinformed.
The tracker on a customer's site writes nothing to a visitor's device. No cookie, no local storage, no session storage, no database in the browser. That is a technical fact and it is what makes the visitor measurement what it is.
The panel is a different piece of software and it does use cookies, because somebody signs into it. Mixing the two would let a true statement about one become a false statement about the other.
02
The tracker, on a customer's site
Every field that is stored
The list above is what the browser sends. This is what a row in the database actually holds, in full, because an inventory that leaves something out is the gap a reviewer finds first.
utm_ parameters the visit arrived with, kept in fields of their own as well as inside the address, and carried onto every page of that visit.Two things this cannot promise. A page address a site's owner designed is theirs, so a route like /orders/12345 is stored as it arrives, and so is a query parameter they did not block; the site settings carry the editable list of parameter names to refuse and new sites start with names that usually carry credentials. This list can be changed or emptied. The installation tag loads one script, the same bytes for every site, and carries no per-site list; there are no additional fixed query-name exclusions. A list change takes effect on the next event that arrives. Intake also applies the current list before storage. Older tags retain their copied list until replaced with the short tag. Unblocked click and sharing parameters, including gclid and fbclid, retain their supplied values within the 2,048-character URL input and 255-character query key/value limits. They can link records beyond a daily visitor code and remain for the site's retention window. Older rows containing only a 1 marker stay unchanged; the discarded values cannot be reconstructed. Site owners also choose the event properties they send. Kehai checks declared event and property names and values for recognized identifying shapes. That value check does not apply to arbitrary URL paths or unblocked query values, and it cannot know what a customer's own addresses mean.
How one visitor is told from another without browser storage: the server derives a one-way visitor code from the site, the network address, and the browser's user agent together with a salt that is replaced every midnight UTC. A separate visit code groups activity until 30 minutes of inactivity or midnight UTC, whichever comes first. For new measurements, neither code nor the visit's attribution is carried into the next UTC day. The codes are stored with event details for the site's retention window; this is server storage, not browser storage. Older event rows and earlier exports and backups are not rewritten by this change.
Being precise about consent, rather than convenient
Kehai sets no analytics cookie and writes no visitor identifier to browser storage. That does not settle consent. The European Data Protection Board's final guidance on article 5(3) explains that JavaScript instructing a device to return information can fall within the rule without a cookie.
A consent exemption depends on the actual collection, its purpose, configuration, and applicable national law. The absence of cookies does not establish an exemption under Polish law or another jurisdiction. This statement supplies technical facts for that assessment. It is not a legal opinion approving a particular installation, including kehai.io.
The optional Kehai WordPress/WooCommerce plugin has a separate commerce function. It does not create an analytics cookie or browser-storage identifier, but it can use an already-existing WooCommerce session on the customer's shop to retain available acquisition context and attach it to an order. It does not start a shop session to recover an earlier ad visit. Session context older than two days is not attached to a new order; order context is eligible for at most 90 days and is removed by scheduled cleanup or order privacy/deletion hooks. WordPress cron delays can delay physical deletion. DNT/GPC suppresses this context and associated plugin commerce delivery. The customer must assess the existing shop session and this use of it as part of the installation; absence of a newly created cookie is not a consent exemption.
The PrestaShop module can use an existing cart for available acquisition context. It creates no cart or browser identifier for analytics. Its cart context expires after 30 minutes without activity or at midnight UTC; order context clears after 48 hours and suppression markers after 30 days, through scheduled cleanup. DNT/GPC suppresses the context and associated commerce delivery. Wix and Squarespace commerce connections run on the server; their API keys do not install browser code. The merchant's own platform may still use functional shop cookies.
03
The panel, at app.kehai.io
Signing in requires cookies. These are not analytics and none of them follows anybody anywhere.
The sign-in cookies are sent only over an encrypted connection and cannot be read by scripts on the page. They are set for the whole of kehai.io rather than for one address, because signing in happens on one host and the panel is on another, so a browser sends them to every Kehai hostname including the one that receives measurements. Nothing there reads them, and a narrower handoff that would not need them to travel is planned. Signing out clears the session cookies across that domain. An optional trusted-device marker can remain for later sign-ins until it expires or is invalidated.
Kept in the browser rather than in a cookie
The chosen color palette is not in the browser at all. It is stored with the account, so the panel arrives already wearing it on the first render.
04
Set by somebody else
Both are strictly necessary for the page to be served safely, build no profile, and are not used for analytics.
05
What is never set
The analytics tracker sets no advertising cookie, retargeting pixel, social platform tag or shared cross-site visitor identifier, and embeds no third-party analytics. It does not inspect canvas output, font inventories or installed plug-ins. The daily code derived on the server from the network address and user agent is described above.