Skip to content

Find the cookies scanners miss

For Danish site owners and agencies: Privaci opens your site in a real browser and reads the browser’s own cookie jar, so you get HTTP-only cookies, CNAME cloaking and fingerprinting with it. A JavaScript-based tool cannot.

  • No credit card
  • Set up in under 2 minutes
  • No lock-in

Scanned once. No banner was shown and nothing was clicked.

Run 14 Mar 2026, 09:14 shop.example.dk clicks: 0

What a scan looks like An example scan. Cookie names and trackers vary from site to site. Exempt means the category needs no consent.
Finding Observed
_ga Google Analytics google-analytics.com Fired before consent
_fbp Meta Pixel connect.facebook.net Fired before consent
canvas-fp Fingerprinting Canvas + WebGL Ran before consent
PHPSESSID Required session shop.eksempel.dk Exempt

Scan ID 2026-03-14-1 3 findings 1 exempt

Conclusion positive evidence

Everything in this run was observed before anyone was asked, because nobody was ever asked. That is positive evidence, not an inference from the absence of a banner.

  • Built in Denmark Developed and operated by bon.do ApS
  • Operated and stored in the EU No transfer to third countries
  • Free up to 50 pages No credit card and no time limit
  • Pro from 30 DKK/month Price follows page count, not features. Excl. VAT.

What you cannot see, you cannot document

A cookie banner can only block what it knows about. And a consent log is missing half the story when the scanner cannot see the whole page.

HTTP-only cookies

The server sets them with Set-Cookie and marks them HttpOnly, so JavaScript cannot read them.

That flag is the entire point, and it is also why a tool that reads cookies through JavaScript cannot see them. Cookiebot documents this as a limitation of their own scanner. Legally, a cookie you never registered cannot be part of the consent assessment you have to be able to document.

CNAME cloaking

The tracker answers on your own subdomain, for example metrics.yourdomain.com, through a DNS record.

In the browser the traffic looks first-party. It is absent from the cookie policy. Without a DNS lookup it is invisible to visitors and to most scanners alike. The transparency duty under GDPR Articles 13 and 14 applies regardless of how the tracker is wrapped.

Browser fingerprinting

Canvas, WebGL and AudioContext can identify a visitor without setting a single cookie.

Article 5(3) of the ePrivacy Directive is about storing information on equipment, not about cookies. Fingerprinting therefore needs consent even though nothing appears in the cookie list.

Conclusion supervisory plan 2026

The consequence is not technical. It is legal.

In its 2026 supervisory plan the Danish Data Protection Agency made the processing of cookies on websites an enforcement priority, and it looks specifically at whether visitors get a real chance to refuse. A banner that does not know what runs on the page cannot offer that chance, and a log missing the trackers you could not see is not documentation.

One run. No consent click.

We open the page once, as a visitor who was never asked. Everything the scan sees is therefore observed before consent, not guessed from whether a banner happens to be present.

  1. The page is opened in a real browser

    Not an HTTP request and not a crawler. A Chromium instance that runs JavaScript, fetches tags, scrolls in steps to trip lazy-loaders and lets the page behave the way it behaves for a visitor.

  2. The cookie jar and storage are read directly

    We read the browser’s own cookie jar, not document.cookie. That is the only way to capture HTTP-only cookies, and it also catches localStorage, sessionStorage and writes that were cleaned up again before anyone could look.

  3. Everything is stamped pre-consent by construction

    There is no state to stamp wrongly, because there is only one. Each finding carries the phase the single run had, and consent cannot retroactively make a tracker that has already run lawful.

There is no accept button and no post-consent run. The scan has exactly one state: a visitor who was never asked.

When the trackers fire, relative to a consent

A timeline of the first 800 milliseconds of a page load. Four markers show when two tracker requests, an exempt cookie and a fingerprinting signal were observed. The band spans the whole window, because no consent was given at any point in the run.

No consent was given in this run

  1. __cf_bm exempt 90 ms
  2. _ga tracker 180 ms
  3. _fbp tracker 240 ms
  4. canvas-fp signal 620 ms
  5. scan settles 1500 ms

Measured: the window is the first 800 ms after navigation. Each mark is an event the browser itself reported in that run. The scan settled after 1,500 ms.

An example. Cookie names and timings vary from site to site.

Fig 0.5 Two trackers, an exempt cookie and a signal, all inside the first second

A receipt, not a summary

A JavaScript-based scanner reads document.cookie. We read the browser’s own cookie jar. In the same run the two lists can be set against each other: what the script could see, against what the browser actually held. The difference is the cookies that would never have made it into your declaration.

document.cookie
6
cookie jar
9
consent clicks
0

What you get: features and plans

The order is the buyer’s, not the engineer’s. The top item is the one that keeps you out of trouble.

All plans

Trackers are held back before they load

The snippet parks tracker scripts, iframes and pixels in the markup and releases them only once the visitor has agreed. Until then the request never leaves the browser. This is not a report afterwards.

All plans

A verdict per page and a consent log

Every page gets a verdict, and every consent action is logged with a timestamp, a visit ID and the categories chosen. We store neither IP address nor user agent, so the log is documentation without becoming another personal-data problem.

All plans

The three blind spots, reported

HTTP-only cookies, CNAME cloaking and fingerprinting each arrive as their own finding. The section above explains why a JavaScript scanner misses them; the point here is that they are in the result, each with its own legal basis.

All plans

Google Consent Mode v2

All four signals (ad_storage, analytics_storage, ad_user_data and ad_personalization) are mapped from the categories the visitor actually chose. Not from a fixed assumption.

Requires Pro

A banner in your own brand

Colour, position, logo and copy. Accept and reject are locked to the same size and weight in code, so no configuration can end up as a dark pattern.

Requires Pro

Access for the whole team

Invite colleagues or clients per site with read or edit access. Agencies can manage several sites without sharing one login.

This is the real snippet, not an imitation. Switch between Free and Pro to see what Pro adds.

What to notice

  • Reject all and Accept all are the same size and the same weight. That is a requirement from the Danish DPA, not a design choice.
  • Customise opens the preference centre, where each individual cookie can be switched off.
  • The language switcher inside the banner changes the banner, not the page.
  • Nothing is stored. The demo runs in a sandbox with no access to your browser.

Compare honestly

The rows are written from the vendors’ own public material. Where we cannot document a claim about a competitor, the cell says “not stated” — we never write that someone else lacks something we cannot prove.

Compare honestly
Criterion Privaci Cookiebot Cookie Information
HTTP-only cookies Cookies the server sets, which JavaScript cannot read Yes Their own documentation describes the limitation Not stated
Browser fingerprinting Canvas, WebGL, AudioContext and OffscreenCanvas — a finding of its own, not a footnote Yes Not stated Not stated
localStorage, sessionStorage and IndexedDB Read in the same run as the cookie jar, including keys that are cleared again Yes Not stated Not stated
CNAME cloaking The DNS chain is followed for every third-party host, per page Yes Not stated Not stated
Evidence of when a tag ran Every finding is stamped pre-consent, because the run never clicks accept Yes Not stated Not stated
Blocking beyond scripts Refused before they leave the browser: fetch, XHR, beacons, storage and service workers Yes Not stated Not stated
Blocked or ran A stopped tag is reported as stopped, with its own state Yes Not stated Not stated
Trackers no blocking can reach Flagged with a concrete fix, such as a module import Yes Not stated Not stated
Consent log No IP address, no user agent. Policy hash, language and version Yes Not stated Not stated
Reject and Accept are the same size Locked in code, so a theme cannot build a dark pattern Locked in code Configurable Not stated
Scanner and blocking on Free Included from the first scan, with no feature gate Yes Yes, on Free (1 domain, up to 50 subpages) No free plan, 14-day trial only
Price for a 50-page site Published price lists, excluding VAT. Checked 2026-09-22 from DKK 0/mo. DKK 0/mo. on Free, otherwise from approx. DKK 52/mo. From approx. DKK 146/mo.

Cookiebot and Cookie Information are reproduced from their own publicly available material and price lists, checked 2026-09-22. Euro amounts are converted to kroner, and they should be confirmed in a concrete quote before you rely on them. All Privaci amounts exclude VAT.

The price follows page count, not features

There is one paid product: Pro. You pay for how many pages the site has, and every Pro band includes the same features. A 12-page site should not pay for a 5,000-page one.

pages

Find the number in your CMS sitemap. A guess is fine — the band moves itself once we have scanned.

  1. Pro Starter ≤ 50 pages 30 DKK/mo.
  2. Pro Business 51–350 pages 80 DKK/mo.
  3. Pro Scale 351–500 pages 180 DKK/mo.
  4. Pro Enterprise 501+ pages 275 DKK/mo.

not to scale · excl. VAT

Included in every Pro band

  • Custom banner colour, logo & position
  • Cookie-level consent toggles
  • Consent Mode v2

Free ≤ 50 pages Category-level consent · 1 scan / month · Community support

Privaci · monthly scan

Free · up to 50 pages · without your own brand sample

Pro Starter ≤ 50 pages

30 DKK/mo. · excl. VAT

324 DKK/yr. · you save 36 DKK against monthly billing

The band moves itself

We move you up on the first scan over the boundary and down again after two scans under it. The move is prorated from the day the count crosses. You get an email 30 days before an increase, and there is no lock-in.

Choose Pro

In production we count your sitemap ourselves, so you do not have to look it up.

See all bands

Measured: a page is a URL we actually fetch and scan. Redirects count at the target, query parameters and duplicates count once, and subdomains count within the same site.

Band Pages DKK/mo. DKK/yr. DKK per page
Pro Starter ≤ 50 pages 30 324 0.60
Pro Business 51–350 pages 80 864 0.23
Pro Scale 351–500 pages 180 1.944 0.36
Pro Enterprise 501+ pages 275 2.970 0.28

All amounts are in Danish kroner, excluding VAT. Free has no time limit and needs no payment card.

Running in production today

Each line is a capability in service, with the bound we know about. We state the bound because a capability without its limitation is a claim rather than a fact.

This list is not a roadmap. Everything below is built and in use on privaci.io itself, and every line can be checked in the product.

11 capabilities in service

Status as of September 2026

  1. 01 Browser scanning A Playwright crawl that runs JavaScript like a real visitor
  2. 02 HTTP-only cookies Read from the browser cookie jar, not from document.cookie
  3. 03 CNAME cloaking The DNS chain behind every third-party host, per page
  4. 04 Fingerprinting Canvas, WebGL, AudioContext and OffscreenCanvas
  5. 05 Pre-consent blocking 148 tracker domains built in, plus per-site rules
  6. 06 Google Consent Mode v2 All four signals mapped, with no plan gate
  7. 07 Cookie declaration Generated from the scan and hosted on your own domain
  8. 08 Monthly scan cadence The site rescans itself every month, with backoff if a run fails
  9. 09 Consent log Timestamps and a pseudonymous id, without IP address or user agent
  10. 10 Team access Invitations with read or edit permission
  11. 11 WordPress plugin Installs the snippet and the declaration from wp-admin. Not yet on wordpress.org

Frequently asked questions

Is Privaci a full replacement for Cookiebot?

For most Danish websites, yes, and on detection we go further, because we find HTTP-only cookies, CNAME cloaking and fingerprinting. But if your site is ad-funded and needs IAB TCF 2.2, or you want an auto-generated cookie declaration, we cannot solve that today. We would rather say so than let you discover it.

What does it cost?

Free up to 50 pages, with no time limit and no payment card. Above that there is one Pro subscription where the price follows page count: 30 DKK/mo. up to 50 pages, 80 DKK/mo. up to 350, 180 DKK/mo. up to 500 and 275 DKK/mo. beyond that. Every Pro band includes the same features. Pay yearly and you get 10% off. All amounts exclude VAT.

How is a browser scan different from an ordinary cookie scanner?

An ordinary scanner fetches the page HTML and looks for cookie names in the code. It misses cookies set by JavaScript or in an AJAX call, and it never sees HTTP-only cookies at all. We open the page in a Chromium browser, let it finish running and then read the browser’s own cookie jar: the same list you see in developer tools under Application.

Does Privaci block trackers, or only report them?

Both. The snippet parks tracker tags before the browser fetches them and releases them only after consent. That is not an after-the-fact report. The rules come from the most recent scan of your site, backed by 148 tracker domains built into the snippet that work from day one.

Do you store personal data about our visitors?

We store neither IP address nor user agent. The consent log holds a pseudonymous visit ID, the timestamp and which categories were chosen. That is enough to document your position to a supervisory authority without the log itself becoming another register of identifiable people.

How long does setup take?

Under two minutes. You create a site, confirm ownership with a DNS record or a meta tag, and paste one script tag. You get a free preview scan before you have even confirmed ownership, so you can see the result before you decide.

Who is behind Privaci?

Privaci is developed and operated by bon.do ApS, a Danish software house in Svendborg, company registration 43473425. The product is built for the Danish and Nordic market, and all operations and all data sit in the EU.

Can I cancel whenever I want?

Yes. There is no lock-in, and you cancel in the customer portal yourself. The subscription runs to the end of the paid period and then falls back to Free. Your data and your log are not deleted.

See what runs on your site before you decide

Create an account and run a free preview scan. You get the list of findings and a verdict per page, and you do not need to confirm ownership or enter a card to get there.

  • Free up to 50 pages
  • No credit card
  • No lock-in

Built by bon.do

Privaci is developed and operated by bon.do ApS, a Danish software house in Svendborg that builds software for regulated environments. We do not build generic SaaS products: every product solves a bounded problem for a bounded group of people, and this is one of them.