Cookies & local storage

PartyPPL sets nineteen cookies of its own and keeps a few things in your browser and in the app, so you stay logged in and your tickets work without a signal. No trackers, no ad networks. Everything is below, with purpose and duration.

1Why you see no cookie banner

Cookies and other storage on your device need consent, except in two cases (article 11.7a(3) of the Dutch Telecommunications Act): when they are strictly necessary for the service you ask for yourself, and when they only serve to measure how the service works, with no or little effect on your privacy.

Almost everything below is strictly necessary: staying logged in, your preferences, your tickets offline. Two things are measurement: the `ppl_inv` cookie, which counts whether an invitation led to a sign-up, and the report of how long a page was on screen. Both without an id of you as a person, only for us and not combined with other data.

On the link of somebody in the affiliate programme we only set `ppl_inv` with your consent, which you give yourself with a tap on "Sign up through this link". Without that tap that page sets nothing.

For the personal data involved, such as your IP address, the basis is our legitimate interest (article 6(1)(f) GDPR). You can object through the privacy statement.

If anything is ever added that does need consent, such as third-party analytics or an ad pixel, we ask first and only set it afterwards. Refusing will then be as easy as accepting.

2The nineteen cookies

All from PartyPPL itself, on partyppl.nl, support.partyppl.nl, pay.partyppl.nl and gaming.partyppl.nl, and for our own team on admin.partyppl.nl, marketing.partyppl.nl and server.partyppl.nl. No third-party cookies. Functional means: it remembers a choice you made yourself, so the site does what you asked; that counts as strictly necessary.

`__Host-ppl_session` · staying logged in · strictly necessary
Only when you are logged in. A random token; the database only knows its hash. httpOnly, Secure, SameSite=Lax. At most 30 days, and expired after 14 days without use. If you log in on support.partyppl.nl, that site sets a cookie of its own with the same name and the same rules, only for that address. On a development server without https it is called `ppl_session`.
`ppl_prefs` · preferences · functional
Your language, your chosen cities and your theme. No identification. SameSite=Lax, 1 year.
`ppl_text` · text size · functional
Only when you choose larger text in the app: "normal" or "larger". Gone as soon as you switch back to the system setting. 1 year.
`ppl_org` · portal · functional
Only for organiser team members: which organisation you picked in the portal. 1 year.
`ppl_inv` · invitation · measurement
The code of the last invitation you opened. With it we count per invitation how often it was opened and whether an account came from it; whoever invited sees only those totals. No id of you. httpOnly, 30 days, and gone at your next login. The counts themselves expire after 400 days. If the link belongs to somebody in the affiliate programme, we only set it once you tap "Sign up through this link" yourself, and then for 7 days at most; if you make an account, that signup counts for that person. If you open more than one link, the last one counts.
`ppl_apple` · signing in with Apple · strictly necessary
A random code that ties the step at Apple to your browser. httpOnly, Secure, 10 minutes, and gone once you are in.
`__Host-ppl_support_mail` · contact without an account · strictly necessary
Only when you confirm your e-mail address with a code on the support page without an account: that address with our signature, so you can send your question without logging in. httpOnly, Secure, SameSite=Lax, 2 hours. On a development server without https it is called `ppl_support_mail`.
`__Host-ppl_support_sso` · logging in on support.partyppl.nl · strictly necessary
Only when you tap Log in on support.partyppl.nl: a random code that ties the handover of your login on partyppl.nl to your browser, so a link from somebody else cannot put you in their account. httpOnly, Secure, SameSite=Lax, 10 minutes, and gone once you are in. On a development server without https it is called `ppl_support_sso`.
`__Host-ppl_pay` · logging in on pay.partyppl.nl · strictly necessary
Only when you log in on pay.partyppl.nl, where organisers see their invoices from PartyPPL and we keep our books: a random token for a session of its own, separate from the one on partyppl.nl; the database only knows its hash. httpOnly, Secure, SameSite=Lax. At most 12 hours, expired after an hour without use, and gone as soon as you log out on partyppl.nl. On a development server without https it is called `ppl_pay`.
`__Host-ppl_pay_sso` · logging in on pay.partyppl.nl · strictly necessary
Only when you tap Log in on pay.partyppl.nl: a random code that ties the handover of your login on partyppl.nl to your browser, so a link from somebody else cannot put you in their account. httpOnly, Secure, SameSite=Lax, 10 minutes, and gone once you are in. On a development server without https it is called `ppl_pay_sso`.
`__Host-ppl_gaming` · logging in on gaming.partyppl.nl · strictly necessary
Only when you log in on gaming.partyppl.nl with your PartyPPL account: a random token for a session of its own there, separate from the one on partyppl.nl; the database only knows its hash. httpOnly, Secure, SameSite=Lax. At most 30 days and expired after 14 days without use, as on partyppl.nl, and gone as soon as you log out on either. On a development server without https it is called `ppl_gaming`.
`__Host-ppl_gaming_sso` · logging in on gaming.partyppl.nl · strictly necessary
Only while you log in on gaming.partyppl.nl: a random code that ties the handover of your login on partyppl.nl to your browser, so a link from somebody else cannot put you in their account. httpOnly, Secure, SameSite=Lax, 10 minutes, and gone once you are in. On a development server without https it is called `ppl_gaming_sso`.
`__Host-ppl_gaming_tried` · logging in on gaming.partyppl.nl · strictly necessary
On your first visit to gaming.partyppl.nl we check once whether you are logged in on partyppl.nl, so you are in straight away. If you are not, this cookie holds the value 1, so we do not ask again for 12 hours. No id. httpOnly, Secure, SameSite=Lax. On a development server without https it is called `ppl_gaming_tried`.
`__Host-ppl_admin` · logging in on admin.partyppl.nl · strictly necessary
Only for the admins and support staff of PartyPPL, when they log in on admin.partyppl.nl: a random token for a session of its own, separate from the one on partyppl.nl; the database only knows its hash. httpOnly, Secure, SameSite=Lax. At most 12 hours, expired after an hour without use, and gone as soon as you log out on partyppl.nl. On a development server without https it is called `ppl_admin`.
`__Host-ppl_admin_sso` · logging in on admin.partyppl.nl · strictly necessary
Only when an admin opens admin.partyppl.nl: a random code that ties the handover of the login on partyppl.nl to that browser, so a link from somebody else cannot put anyone in another account. httpOnly, Secure, SameSite=Lax, 10 minutes, and gone once you are in. On a development server without https it is called `ppl_admin_sso`.
`__Host-ppl_marketing` · logging in on marketing.partyppl.nl · strictly necessary
Only for PartyPPL's admins, when they log in on marketing.partyppl.nl, where our team does the marketing: a random token for a session of its own, separate from the one on partyppl.nl; the database only knows its hash. httpOnly, Secure, SameSite=Lax. At most 12 hours, expired after an hour without use, and gone as soon as you log out on partyppl.nl. On a development server without https it is called `ppl_marketing`.
`__Host-ppl_marketing_sso` · logging in on marketing.partyppl.nl · strictly necessary
Only when an admin opens marketing.partyppl.nl: a random code that ties the handover of the login on partyppl.nl to that browser, so a link from somebody else cannot put anyone in another account. httpOnly, Secure, SameSite=Lax, 10 minutes, and gone once you are in. On a development server without https it is called `ppl_marketing_sso`.
`__Host-ppl_console` · logging in on server.partyppl.nl · strictly necessary
Only for PartyPPL's admins who log in with a passkey on server.partyppl.nl, the console of our servers: a random token for a session of its own; we keep only its hash. httpOnly, Secure, SameSite=Strict. At most an hour, and expired after a quarter of an hour without use.
`ppl_in_app` · portal in the iPhone app · strictly necessary
Only when you open the organiser portal from the iPhone app: the value 1, so the portal in that window knows it runs in the app and offers nothing for sale there that the App Store does not allow. No id. httpOnly, Secure, SameSite=Lax, until you close that window. It only sits in the app's window, never in Safari.

The short address pppl.app sets nothing: it sends you straight on to partyppl.nl.

3Local storage in your browser

This data stays on your device, with two exceptions: what you do offline is sent on once you are back online, and the pairing of a door scanner goes along with every scan.

`ppl_geo`
Your last position, only if you tapped "near me" and your browser allowed it. To sort by distance.
`ppl.recent-searches`
Your last five searches.
`ppl:trip:<event>`
The amounts in a night's trip planner.
`ppl:checklist:<event>`
Your checklist. If you are logged in, we also keep it with your account.
`ppl:plan:<event>`, `ppl:home`
Your answers in "Plan your night" per night, and the place you leave from (name and coordinates), which we remember for a next night. Nothing is sent to us.
`ppl:crew:<event>`
Whether you closed or used the "Tell your crew" card for a night, so it does not come back.
`ppl_agenda_filter`
The last filter you chose in the agenda, without your position, so the agenda opens that way next time.
`ppl_side`
Only on an iPad: whether the sidebar was open or closed.
`ppl_gaming_fx`
Only on gaming.partyppl.nl: whether you turned the moving effects on or off.
`ppl:warmed`, `ppl:festival`, `ppl:page:*`, `ppl:cache-owner`, `ppl:persist`
Which nights and pages are ready for offline, a backup copy of page data (with your tickets), whose they are and whether your browser allowed persistent storage. If another account logs in, we wipe it all.
`ppl:review:asked`, `ppl:review:going`
Only in the iPhone app: counters for the request to rate the app.
`ppl-admin-nav`, `ppl-portal-nav`
Whether the admin or portal sidebar is collapsed.
`ppl.ttp.aware.v1`
Only for an organiser's door team: whether you already saw the Tap to Pay on iPhone explainer on this device.
`ppl.door.label`, `ppl.door.sound`, `ppl.door.scanner`
Settings of a door computer. The pairing with a scanner goes along with every scan.
`ppl:chat:at` (sessionStorage)
Where you were in a chat, until you close the tab.
`ppl-outbox` (IndexedDB)
"I'm going", "Interested" and ticket alerts you gave without a connection. We send them on once you are back online.
`ppl-pages` (IndexedDB)
Page data for offline, if your browser lacks the ordinary cache.

4The service worker and the offline cache

On the website and as a web app a service worker runs with five caches:

`ppl-v4`
The app itself: scripts, styles, fonts, the offline page and the icons.
`ppl-pages-v2`
Pages you visited. Gone on every change you make and when you log out.
`ppl-festival-v1`
Nights ready for offline: the event page, artists, the venue, the site map, the checklist and your tickets. Say "I'm going" to a night within 30 days and we get it ready; two days after the night it goes.
`ppl-media-v1`
Images you saw, at most 200; the oldest go first.
`ppl-pages`
Page data the app keeps itself for offline.

Never cached: payments, what you send, the chat connection and our API, except the site maps.

On a new version the service worker clears old caches itself. Under Tickets you see what is ready and remove it.

5What the apps keep on your device

Page data
The iPhone app keeps the data of your tickets, your nights and their artists for offline, as above. Another account wipes it all.
Widgets
A token (kept by us only as a hash, valid 30 days) and the latest widget data, with the ticket code of your next night so the QR works offline too. In the app's shielded storage; gone when you log out.
Apple Watch
The QR of your next ticket, from your iPhone. Gone when you log out.
Spotlight
Your upcoming nights, so you can search for them on your iPhone. Only on your device.
Alarms
Set by your iPhone itself, with AlarmKit.
Apple Wallet
A pass you add sits in Wallet and is yours until you remove it.

6How we count without a cookie

We want to know how many people use the agenda, without knowing who you are:

  • per day we count page views per route pattern (routepatroon), so `/e/:id` and not the address itself. For nights, artists, venues and organisations we also count per day how often the page was opened and how long it was on screen, as a total per page;
  • for unique visitors we make a hash of the day, IP address, browser and a secret key, shorten it to ten characters and keep only that;
  • the day is in the hash, so visits cannot be linked across days;
  • those hashes expire after 48 hours. We do not keep the IP address or browser. Per day we count at most 5,000 unique visitors; after that only views keep counting;
  • the page reports every two minutes and on closing how many seconds it was visible, without a cookie and without an id. From that we count how long visits lasted, on which kind of device and system. Administrators are not counted;
  • when you arrive from outside the site, we count the source per day: the utm details in the link, otherwise the kind of site you came from (such as Google or Instagram), otherwise 'direct'. Only as a total per source, without a cookie;
  • when someone opens a page that does not exist, we count that address per day, with only the name of the site the link was on.

Not counted: our API, files, the admin, the portal, ticket scans, requests your browser makes ahead of time, and bots. Counts per page are deleted after 100 days, the counts of addresses that do not exist after 90 days, the counts per source after 400 days, the other daily counts after 25 months, every day, automatically.

From 12 to 16 October 2026 we also counted visits with Umami, which we ran ourselves on our second server at OVHcloud in Canada, without a cookie and without keeping IP addresses. Since 16 October 2026 it is switched off: the site no longer loads the script and nothing goes to it. Those counts sit in a closed archive that is not online, nothing is added and they go at the latest 25 months after collection. What is in it is in the privacy statement. If we start measuring differently, this page says so first.

Basis: measuring how the service works, with little effect on your privacy (article 11.7a(3) of the Dutch Telecommunications Act), and our legitimate interest (article 6(1)(f) GDPR). Nobody else gets the figures.

7Third-party content

Map (OpenFreeMap)
Tiles come from tiles.openfreemap.org as soon as you see a map. That service sees your IP address. No cookies.
YouTube, SoundCloud and Mixcloud
A player only loads when you tap play; YouTube then in our own player, in privacy-enhanced mode through youtube-nocookie.com, with the player script from youtube.com. The preview image of a video and the cover of a set come from our own server, so those services do not see you before you tap. After your tap, that service may use cookies and local storage, and its rules apply.
Paying (Stripe)
Checkout happens on Stripe's page; Stripe's cookies and rules apply there. If you pay with Apple Pay or Google Pay in the order screen, Stripe's script (Stripe.js) loads on our page, only at the payment step. It can set Stripe cookies and read details of your device to prevent fraud. That is strictly necessary for the payment you start yourself (art. 11.7a(3)(b) of the Dutch Telecommunications Act).
Spotify
If you link Spotify, you log in on Spotify's site. The player of a PartyPPL playlist only loads when you tap Play here. Then Spotify (Spotify AB, Sweden) sees your IP address and may set cookies. After your tap, Spotify's rules apply.

Fonts and scripts come from our own server. Most images do too.

8Managing it yourself

You wipe or block cookies and site data in your browser. If you block everything, you can still browse, but not stay logged in, and we do not remember your language.

Logging out wipes the page cache. If you want everything gone, clear the site data for partyppl.nl or remove the app.

More about what we do with data: the privacy statement.

What changed

  • 19 October 2026: added that with Apple Pay and Google Pay in the order screen Stripe's script loads on our page, only at the payment step. Added: the three cookies of gaming.partyppl.nl (`__Host-ppl_gaming`, `__Host-ppl_gaming_sso` and `__Host-ppl_gaming_tried`), the two of marketing.partyppl.nl (`__Host-ppl_marketing` and `__Host-ppl_marketing_sso`) and `__Host-ppl_console` of server.partyppl.nl, so nineteen cookies; the ones of marketing. and server. are only set for admins. In local storage `ppl_gaming_fx`. We now also count per day which source a visit comes in through and which addresses do not exist, without a cookie.
  • 17 October 2026: on PartyPPL Media, YouTube plays in our own player, in privacy-enhanced mode (youtube-nocookie.com). It too only loads after your tap, with no cookie of ours added.
  • 17 October 2026: the two cookies of admin.partyppl.nl, the admin with a session of its own: `__Host-ppl_admin` and `__Host-ppl_admin_sso` (so thirteen cookies). They are only ever set for admins and support staff.
  • 17 October 2026: the two cookies of pay.partyppl.nl, `__Host-ppl_pay` for the session of its own there and `__Host-ppl_pay_sso` for the handover of your login (so eleven cookies).
  • 17 October 2026: the `ppl_in_app` cookie, which marks the organiser portal in the iPhone app, was missing (so nine cookies); and support.partyppl.nl sets its own session cookie when you log in, with the same rules as on partyppl.nl.
  • 17 October 2026: the `__Host-ppl_support_sso` cookie, which ties logging in on support.partyppl.nl to your browser (so eight cookies).
  • 17 October 2026: `ppl_inv` also serves the links of the affiliate programme, there only with your consent (you tap "Sign up through this link" yourself) and for 7 days at most; the last link counts, and the cookie goes at your next login.
  • 16 October 2026: Umami added, our own statistics without a cookie on a server at OVHcloud in Canada; the `__Host-ppl_support_mail` cookie of the contact form (so seven cookies); `ppl_agenda_filter`, `ppl_side`, `ppl:plan:*`, `ppl:home`, `ppl:crew:*` and `ppl.ttp.aware.v1` in local storage; the daily counts are kept 25 months, not 400 days; the preview image of a video and the cover of a set come from our own server.
  • Six cookies instead of two: `ppl_text`, `ppl_org`, `ppl_inv` and `ppl_apple` were missing.
  • Every key in local storage, IndexedDB and the service worker's five caches, with what does reach the server.
  • New: what the apps keep on your device (widgets, Apple Watch, Spotlight, alarms, Wallet).
  • Corrected: the YouTube preview image loads before you tap play.
  • New: Spotify's player for a PartyPPL playlist, which only loads after your tap.
  • Each cookie now says whether it is strictly necessary, functional or measurement, and on what ground we work without a banner.
  • The statistics clear themselves every day; the invitation counts expire after 400 days.
  • 16 October 2026: Umami is switched off again. The site no longer loads it; the counts from 12 to 16 October 2026 sit in a closed archive until they go at the latest 25 months after collection. So two things are measurement again.