Cookie Policy

Effective date: 18 May 2026 — Version 1.7 (updated 13 November 2026)

Short version: Apart from the off-by-default advertising cookies described below, every HTTP cookie we set is strictly necessary: two keep you signed in, one remembers your language, and two exist only for a few minutes or hours while you save a free-builder draft or connect e-conomic. Your browser's localStorage and sessionStorage also hold your consent choice, small settings you chose yourself (such as light or dark theme), and a few short-lived notes that make a page work (such as the invoice you are typing in the free builder). The only tracking identifier is the PostHog visitor ID, stored in localStorage and only if you accept analytics. In the showroom, PostHog keeps its entries in the tab’s sessionStorage instead, and only if you allow the counting on the showroom’s start panel. Advertising measurement is a separate, off-by-default permission: nothing advertising-related is loaded or stored unless you switch it on, and we never use it to track you across other websites or to build advertising audiences. Every item is listed below, and an automated check runs on every code change to keep this list complete.

Last audited: 28 May 2026 — Production audit of pennapay.com and app.pennasystems.com via browser DevTools inspection (pre- and post-consent flows verified; cookies and localStorage inspected before consent, after Accept, and after Decline).
Domain update, 3 October 2026: on 30 August 2026 our marketing site moved from pennapay.com to pennasystems.com, and pennapay.com now only redirects there. The items listed below as set on pennapay.com at the May audit are now set on pennasystems.com. A check of the live response headers on 3 October 2026 found that the language cookie is also set by our server when you open a Danish page; the table now says so.
Completeness update, 13 November 2026: we compared this page with everything our code writes to your browser and found items that were missing. They are now listed: two more HTTP cookies (pp_draft_token, pp_economic_state), the PostHog opt-out flag, and the settings and notes kept in localStorage and sessionStorage (new sections 3 and 3a). We also corrected the PostHog description: until 13 November 2026 PostHog, once you had accepted analytics, also wrote its visitor ID to a one-year HTTP cookie as well as to localStorage. That contradicted this page, which said it sets no cookies. It now keeps the ID in localStorage only, and removes any old PostHog cookie it finds on your device.
Showroom update, 13 November 2026: the showroom at pennasystems.com/showroom is now described on this page: the access_token cookie on showroom.pennasystems.com (two hours at the latest), the notes it keeps in your browser tab, and PostHog’s entries for the optional counting, which exist only if you allow it on the showroom’s start panel.
Language cookie change, 4 October 2026: when our server sets the language cookie automatically on a Danish page, it is now a session cookie, and it is set only if your browser has no language cookie yet. The 1-year cookie is now set only when you choose a language yourself, with the language switch or in your settings. A language saved in your account settings now always takes precedence over the cookie in the app.

1. What is a cookie?

A cookie is a small text file stored on your device by your browser when you visit a website. Cookies help websites remember your preferences or keep you logged in. Under GDPR and the Danish cookie rules derived from the ePrivacy Directive (EU 2002/58/EC, as amended by 2009/136/EC), we must tell you which cookies we use and obtain your consent for any cookies that are not strictly necessary.

This policy also covers localStorage identifiers, which have the same privacy impact as cookies and are treated equivalently under current EDPB guidance.

2. Cookies we set

PennaSystems classifies cookies and similar client-side identifiers according to the four categories established under the ePrivacy Directive and EDPB guidance:

PennaSystems sets strictly necessary cookies (listed in the table below) and uses one consent-gated analytics identifier (the PostHog visitor ID, stored in browser localStorage rather than as a cookie — see §3 below; in the showroom, in the tab’s sessionStorage — see §3a). We do not set functional cookies: settings you choose yourself (such as the theme or the builder layout) and short-lived notes that make a page work are kept in localStorage and sessionStorage, not in cookies, and are listed in §3 and §3a. They are written only when you use the feature that needs them, they are not used to identify or track you, and the browser never sends them to our servers on its own, so we treat them as part of the service you asked for rather than as something that needs a separate consent. The only advertising cookies that can ever appear are the Google Ads conversion cookies described in §6, they appear only after you grant the advertising-measurement permission, and no other advertising or retargeting technology is used on this site.

The following table lists every HTTP cookie set by pennasystems.com, app.pennasystems.com and the showroom at showroom.pennasystems.com. pennapay.com only redirects to pennasystems.com and sets no cookies.

That is the complete list of HTTP cookies. Apart from the consent-gated Google Ads conversion cookies in the last row, we set no advertising cookies, no retargeting cookies and no cross-site tracking cookies of any kind — and that last row stays empty on your device unless you switch the permission on yourself.

3. localStorage items we store

In addition to HTTP cookies, we store the following items in your browser's localStorage. These are never transmitted to our servers by the browser, and they persist across browser sessions until you clear them. Items marked Functional are written only when you make the choice they remember, or close the hint they remember, and are not used to identify or track you. Where an entry says “(app)”, it exists only after you use that part of the app while signed in.

If you decline analytics, no PostHog entry is created. The consent record and the Functional and Strictly necessary items above can still exist, because they remember your own choices.

3a. sessionStorage items we store

sessionStorage works like localStorage but is emptied by the browser when you close the tab. None of it is transmitted to our servers by the browser.

4. Analytics tools we use

PostHog Analytics

We use PostHog (PostHog, Inc., EU Cloud) for product and web analytics. PostHog:

PostHog is only initialized after you grant analytics consent. Until 13 November 2026 it also wrote its visitor ID to a one-year HTTP cookie (ph_…_posthog); that cookie has been switched off, and any copy still on your device is deleted the next time you visit. You can clear the PostHog visitor ID at any time by withdrawing consent below or by clearing localStorage for our domains in your browser's developer tools (Application → Local Storage → delete the ph_* key). PostHog privacy policy →

In the showroom (showroom.pennasystems.com), PostHog runs only if you allow it on the showroom’s own start panel, not through the cookie banner: after Accept all, or after Save and open the showroom with Let us see what I click or Accept technical data still ticked. The boxes start ticked as a suggestion (on a later visit, they show your saved choice), nothing is counted until you press a button, and Reject all switches the counting off. There PostHog keeps its entries in the tab’s sessionStorage, not in localStorage or a cookie, does not look up your location, removes query strings from page addresses, records no video of your screen and never links the counts to an account. You can stop it at any time with Stop counting in the showroom menu. What is counted, and for how long it is kept, is described under Showroom in our Privacy Policy.

Cloudflare Web Analytics

We use Cloudflare Web Analytics as a secondary analytics layer. It:

Cloudflare privacy policy →

5. Cookies set by subprocessors during checkout

When you initiate a paid subscription, Stripe's checkout page may set Stripe-specific cookies on its own domain. These are governed by Stripe's cookie policy, not ours. We have no control over them once you are on Stripe's checkout page.

6. Third-party cookies and advertising

Apart from the consent-gated Google Ads conversion tag described immediately below, we embed no third-party advertising scripts, social media widgets, or tracking pixels. No other third-party HTTP cookie is set by any content originating on our pages.

If you follow a link from our site to a third party (e.g. Stripe's payment page), that third party may set its own cookies governed by its own cookie policy.

Google Ads conversion measurement

We use a single Google Ads conversion tag, and only to answer one question: did someone who clicked one of our advertisements go on to create an account. It is the only advertising technology on this site.

It is governed by two independent switches, and it runs only when both are on. The first is yours: the Advertising measurement permission, described in §7. The second is ours: a server setting that determines whether an advertising account is configured at all. When that server setting is off, no Google host is permitted by our Content Security Policy and no request reaches Google from any visitor, whatever they have consented to. Turning it on is a material change to this policy: we announce it in our legal changelog at least 14 days before it takes effect (§10), so that changelog — not this paragraph — is the authoritative record of whether we are currently advertising.

This is what does and does not happen, in both states:

7. Your consent

The strictly necessary items listed in Sections 2, 3 and 3a (access_token, ps_session, penna-locale, pp_draft_token, pp_economic_state, cookie_consent_v2, penna-demo, showroom_consent, the showroom’s tab notes (penna-showroom-return, penna-showroom-active, penna-showroom-restart, penna-showroom-refreshed) and the client-page keys penna_ct_… and penna_ce_…) do not require your consent under GDPR Art. 6(1)(b) (performance of a contract) and the ePrivacy Directive exemption for technically necessary cookies.

The Functional items in Sections 3 and 3a are settings and hints you set yourself. We do not ask for a separate consent for them: they are written only when you use the feature, they are not used to identify or track you, and the browser never sends them to us on its own. You can delete them at any time (§8).

Cloudflare Web Analytics sets no cookies and creates no client-side identifiers; it operates without consent under the ePrivacy strictly-necessary exemption.

PostHog stores a random visitor ID in localStorage. PostHog is only initialized after you grant analytics consent on the cookie banner.

The showroom has its own start panel instead of this banner; it is described in §4 and under Showroom in our Privacy Policy. The banner choices below do not switch the showroom’s counting on or off.

The banner offers three choices, and every optional category is declined until you choose — closing or ignoring the banner grants nothing:

You may change or withdraw any of these choices at any time, without giving a reason and without affecting the lawfulness of what happened before you withdrew. Withdrawing the advertising permission also deletes the associated cookies (§6). Use the button below, or the link in the site footer:

8. How to control or delete cookies

You can control and delete cookies at any time through your browser settings:

Impact of deleting specific items:

9. Do Not Track

We do not track you across other websites, build advertising profiles, or share your browsing with data brokers — with or without a Do Not Track signal, and whatever you have consented to here. Our practices therefore already align with what DNT requests, and we do not alter our behaviour in response to the signal. The advertising-measurement permission in §6 does not change this: it measures whether one of our own advertisements led to a signup on our own site, and it is off unless you switch it on.

10. Changes to this policy

If we add new cookies or materially change how we use existing ones, we will update this policy and display a notice on the site at least 14 days before the change takes effect. Registered users will also be notified by email if the change affects the authenticated application.

11. Contact

Questions about our use of cookies or this policy:
PennaSystems (CVR 46522036)
privacy@pennasystems.com
We respond within 5 business days.

You may also contact Datatilsynet (the Danish Data Protection Agency) at dt@datatilsynet.dk if you wish to lodge a complaint about how we use cookies or process personal data, or you may contact the supervisory authority in your EU/EEA country of residence.