cookie consent · EU-hosted · free plan

The GDPR cookie banner that’s done
in one command. With proof to back it up.

CookieCrumbs scans your site, blocks every tracker until people say yes, and keeps a signed record of each choice. Set it up from a dashboard, from your terminal, or straight from Cursor and Claude Code. Hosted in the EU, free to start.

$ npx cookiecrumbs init

Works with the stack you already run

Open-source projects CookieCrumbs ships SDKs or install guides for. Names and logos belong to their respective projects and indicate compatibility only, not endorsement. Shopify, Webflow, Framer and any other site builder work with the one-line script tag.

at a glance

A library you can script.
A platform you don’t have to run.

A banner you paste in is not a consent management platform. This is what changes when the scanner, the log and the config live in one place.

Roll your own

  • No consent log, so no proof
  • Nobody notices the pixel marketing added
  • Every Consent Mode change lands on you
  • Your agent can’t set it up for you

The big CMPs

  • Per-subpage tiers and surprise upgrades
  • Render-blocking scripts, slower pages
  • Nested dashboards, no CLI, no config in git
  • No way in for a coding agent

CookieCrumbs

  • Scanner, banner and signed consent log, hosted in the EU
  • One flat price, the banner never switches off
  • Dashboard for the people who sign off, CLI for the people who ship
  • An MCP server so Cursor or Claude Code can do the setup

built with AI?

Built the app with AI?
It shipped without a cookie banner.

Lovable, Bolt, v0 and Replit generate your analytics and pixels, and none of them adds consent. Ask the same agent for a banner and you get a box that blocks nothing. CookieCrumbs fixes both: the scanner finds what the app really loads, the banner holds it until people agree, and the MCP server lets Cursor or Claude Code do the setup with a diff you review.

LovableBoltv0ReplitCursorClaude CodeWindsurf

And for everyone who ships the ordinary way

For founders and marketers

Pick a template, run the scan, publish. The cookie declaration writes itself and updates when trackers change. No lawyer needed for the everyday work.

One command to init, typed SDKs for Next.js, React, Astro, Nuxt and SvelteKit, the banner config in git, and an MCP server your agent can drive.

One console, every client. Roles per workspace, shared templates, scheduled re-scans with alerts, and a price that doesn’t multiply per domain.

Shopify, WooCommerce, Webflow and custom storefronts through one script tag. Consent Mode keeps Google Ads measuring, the US rules honour Global Privacy Control, and the consent log covers the audit.

mcp server

Let the agent that wrote your app
make it compliant

One line adds the CookieCrumbs MCP server to Claude Code, Cursor, Windsurf, Zed or VS Code. Then ask in plain words. The agent scans, writes the config and opens a pull request. Every write is a diff you approve, and every action lands in the audit trail with the token’s name on it.

claude mcp add cookiecrumbs -- npx -y @cookiecrumbs-eu/mcp
{ "mcpServers": { "cookiecrumbs": { "command": "npx", "args": ["-y", "@cookiecrumbs-eu/mcp"] } } }
  • Add the server once

    One command for Claude Code, one line in .cursor/mcp.json for everyone else. Authenticated with a scoped token you can revoke.

  • Prompt to pull request

    “Add a GDPR cookie banner, block GA4 until consent, German and French texts.” The agent scans, writes the config and opens the PR. You review and merge.

  • Compliance review in chat

    Ask why a cookie is filed under Marketing, or whether your first layer meets CNIL guidance. Every answer cites the scan result and the rule.

  • Agents stay in bounds

    Tools are read-only by default. Writes need an explicit scope and show a diff first. Tokens never carry billing rights.

MCP docs

Add a GDPR cookie banner, block GA4 until consent, German and French texts.

scan_siteacme.example · 38 pages · 14 cookies
update_bannerlayout: bar · languages: de, fr · GA4 → analytics
push_configcookiecrumbs.config.ts · preview deployed

Done. GA4 now loads only after analytics consent, banner texts are in German and French, and Consent Mode v2 defaults are denied for EEA visitors. I opened PR #142 for your review.

cookiecrumbs.config.ts + languages: ['de', 'fr'], + block: { 'googletagmanager.com': 'analytics' }, consentMode: { default: 'denied' },
audit trail · via MCP · claude-code · token ending 4f2a

how it works

Scan. Customise. Ship.

From an unscanned site to a live GDPR cookie banner with a consent log behind it, in three steps. Click through them in the dashboard, script them from the CLI, or hand them to your coding agent.

  1. Step 1

    Scan

    Run npx cookiecrumbs init or paste your domain. The scanner loads your pages in a real browser, in every consent state, and drafts the categories and the declaration.

  2. Step 2

    Customise

    Layout, colours, texts and languages, in the dashboard or in cookiecrumbs.config.ts. Preview it per region and pick from ten built-in templates.

  3. Step 3

    Ship

    One script tag or the SDK. Scripts stay blocked until consent, and every choice lands in your EU-hosted log.

One command runs the first scan

acme · zsh
$ npx cookiecrumbs init
✔ Detected Next.js (App Router) · linked acme.example to workspace acme (eu-central)
✔ cookiecrumbs.config.ts and cookiecrumbs/texts/ written · install snippet printed
$ cookiecrumbs scan --wait
✔ 38 pages crawled in 3 consent states · 14 cookies in 4 categories · declaration updated
→ Run `cookiecrumbs open` to edit design, texts, languages and regions
Found 14 cookies Classifying 72% Blocking marketing until consent
import { defineConfig } from 'cookiecrumbs';

export default defineConfig({
  layout: 'bar',
  languages: ['en', 'de', 'fr', 'nl'],
  regions: {
    EU: 'opt-in',
    UK: 'opt-in',
    US: 'opt-out',
  },
  consentMode: { default: 'denied' },
});
EUUKUS-CA
Bottom bar EU: opt-in
app/layout.tsx
<CookieCrumbs site="acme.example" />
$ cookiecrumbs push --note "launch"
✔ Banner v14 published on acme.example · scripts blocked until consent
2026-08-21 14:02:11 · eu-central · analytics: granted · marketing: denied · v14

website cookie scanner

A website cookie scanner that finds
what your site really sets

A banner is only as good as its inventory. The scanner crawls rendered pages in each consent state, matches every cookie and pixel against a maintained tracker database, and writes the cookie declaration for you. Then it keeps checking.

CookieCrumbs
Every page, in every consent state, in a real browser

Finds what your site actually sets

Rendered pages in each consent state, not just HTML. Cookies set by scripts, pixels, iframes, local storage and tag managers, with the page and the script that set them.

Every cookie is matched against the tracker database and published as a cookie declaration in your languages, as JSON, HTML or Markdown.

Run a free scan

Scan results · acme.example

38 pages crawled · 14 cookies in 4 categories · last scan 2 hours ago

JSONSARIFMD
CookieProviderCategorySet byExpiryStatus
cc_consentCookieCrumbsNecessary/6 monthsAllowed
_gaGoogle AnalyticsAnalyticsgtm.js2 yearsBlocked until consent
_fbpMeta PixelMarketing/pricing3 monthsBlocked until consent
__hstcHubSpotMarketinghs-script13 monthsBlocked until consent
_hjSessionHotjarAnalytics/docs30 minBlocked until consent
themeacme.examplePreferenceslocalStorage1 yearBlocked until consent
Re-scans on a schedule

Daily, weekly or monthly. A pixel added through someone's tag manager experiment arrives as a Slack or email alert, blocked by default.

Scan from the CLI
$ cookiecrumbs scan --fail-on-unknown
✖ 1 unclassified tracker: cdn.example.net/px.js
  build failed · classify it or add a rule

Runs in CI and fails the build when an unclassified tracker appears. Pull results as JSON and diff them in pull requests.

dashboard

When someone asks how you got consent,
send the file

A data protection authority or an enterprise customer asks how consent was obtained. You answer with a signed export, not an explanation.

Consent logs that hold up as proof

Every choice is stored with a timestamp, the banner version, a hash of the texts shown and the categories chosen, chained to the record before it. Exports are signed, so an auditor can verify them without trusting us. Proof of consent under Article 7(1), on every plan.

Audit trail | Article 7(1) | EU-hosted

Consent log · filtered: last 24 h · eu-central

Acceptance analytics · sample data

64%consent rate
Accept all
52%
Custom choice
12%
Reject all
36%
vs. banner v13
+7 pts

By device

Desktop 58%31%
Mobile 47%40%
Tablet 55%33%
Banner v14 · last 30 days · 41,208 decisions

Analytics without dark patterns

Accept, reject and custom rates by region, device, language, layout and banner version. Compare two versions and see which one earns consent honestly.

By region | By device | By banner version

Edit, publish, no deploy

Texts, categories, colours and behaviour change from the dashboard and go live in seconds. Every version is kept, so rollback is one click.

Teams and clients

Workspaces, roles and an audit trail on every change. Shared templates with per-site overrides, and client workspaces for agencies.

cli and sdks

Consent as code.
One command and you’re most of the way.

Everything in the dashboard is also a file and an endpoint. Your banner lives in git, gets reviewed in a pull request and deploys with the rest of the app. The CLI, the SDKs and the MCP server are on the free plan.

acme · zsh
$ npx cookiecrumbs init
✔ Detected Next.js (App Router) · linked acme.example to workspace acme (eu-central)
✔ cookiecrumbs.config.ts and cookiecrumbs/texts/ written · install snippet printed
$ cookiecrumbs scan --fail-on-unknown --wait
✔ 38 pages crawled in 3 consent states · 0 unclassified trackers · 14 cookies match the declaration
$ cookiecrumbs push --note "launch"
✔ Draft pushed · published as v14 on acme.example
$ cookiecrumbs logs export --format csv
✔ 12,480 consent records, Ed25519-signed → ./exports/consent-2026-08.csv

npx cookiecrumbs init

Detects Next.js, React, Astro, Nuxt, SvelteKit or plain HTML, links the site, writes cookiecrumbs.config.ts and the texts, and prints the install snippet for your framework.

Config as code

Design, texts, categories, languages and region rules in one typed config. cookiecrumbs push deploys it. cookiecrumbs pull brings dashboard edits back into the repo.

Scan and logs in CI

cookiecrumbs scan --fail-on-unknown fails the build when a new tracker sneaks in, with SARIF for code scanning. cookiecrumbs logs export pulls signed records for an audit. Tokens are scoped per site, environment and permission.

eu-first

An EU-hosted consent management platform,
with nothing to explain to procurement

Built and run in Germany, priced in euro. The consent records you rely on never cross a border, so there is no transfer mechanism to argue about.

Data stays in the EU

Consent logs, scan results and dashboards run in Frankfurt. Records never leave the EU.

Security and hosting

Transparent pricing

Prices in euro, locked for the life of your plan. Traffic is never metered, and a scan never upgrades you on its own. Your invoice matches the pricing page.

What you see on pricing is what you pay.

Yours to take away

Configs are files in your repo. Policies export as HTML or Markdown, consent logs as signed CSV or JSON, including after you cancel. Leaving is one command.

$ cookiecrumbs export --all

  • GDPR
  • ePrivacy
  • UK PECR
  • CCPA / CPRA
  • LGPD
  • Swiss FADP
  • Quebec Law 25
  • Consent Mode v2
  • WCAG 2.2 AA

from the blog

Cookie consent,
written down properly

Long reads on the rules, the enforcement and the engineering of consent. Every claim carries a date and a source, and every piece ends with something you can check on your own site today.

5 September 2026 · 8 min

How to add a cookie banner to a Lovable app that actually blocks trackers

Lovable ships your app without a cookie banner, and asking it for one gets you a box that blocks nothing. Here is the ten-minute route to a banner that holds every tracker until people agree, with the checks that prove it.

Read

5 September 2026 · 9 min

Reject all, on the first layer: what the 2025 CNIL decisions changed for every cookie banner

Two decisions in September 2025 turned an EDPB guideline into a price tag. Here is what the regulator counted, and what a compliant first layer looks like in 2026.

Read

5 September 2026 · 10 min

Google Consent Mode v2 for people who ship: the seven signals, basic against advanced, and the June 2026 change

Consent Mode is not a cookie blocker. It is a message your banner sends to Google’s tags. Get the message wrong and you either break the law or lose your Ads measurement. Here is the whole thing in one page.

Read

5 September 2026 · 8 min

Proof of consent under Article 7(1): what a consent record has to contain, and what ours does

A regulator or an enterprise customer asks how you got consent. “We have a banner” is not an answer. A file is. This is what has to be in it.

Read

5 September 2026 · 8 min

Do cookie banners hurt Core Web Vitals? Where the cost really comes from

Yes, a banner can wreck your scores. No, it does not have to. The damage comes from three specific behaviours, and each has a fix.

Read

5 September 2026 · 8 min

UK cookie rules after 5 February 2026: the statistics exemption, explained

The UK loosened one corner of its cookie rules and tightened the penalty for everything else. Here is what the Data (Use and Access) Act changed, and what it did not.

Read

All posts

regulation watch · updated

Regulation watch: what changed,
what is proposed

Cookie rules move every few months. We track them so your banner does not fall behind. Every card is dated and linked to its source, and region rules in CookieCrumbs follow this list through the changelog.

IAB TCF 2.3 mandatory

TCF 2.2 strings stopped being valid on 1 March 2026. TCF 2.3 adds the disclosedVendors segment to the TC String. CookieCrumbs does not emit TC Strings yet; TCF support is planned. If you serve AdSense or Ad Manager, you need a TCF-registered CMP today.

On the roadmapSource: IAB Europe

Google Consent Mode change

ad_storage became the controlling signal for Google Ads data. Banners that only map analytics_storage lose Ads measurement. CookieCrumbs maps Marketing consent to the right signal automatically.

Handled in CookieCrumbsSource: Google Tag Platform

EU Digital Omnibus, GDPR Art. 88a

Would move cookie consent into the GDPR, exempt first-party audience measurement and bar re-asking for six months after refusal. Council dropped Art. 88b browser signals in June 2026; trilogue continues.

CNIL enforcement

CNIL fined Google €325m and SHEIN €150m over banners without one-click refusal and related practices. Equal prominence of Reject all on the first layer is the baseline.

Handled in CookieCrumbsSource: CNIL decisions

pricing

Transparent pricing,
locked for the life of your plan

Prices in euro, monthly or yearly with two months free. The unit of sale is your organisation. Traffic is never metered; the only paid meter is subpages scanned per month. And the banner never goes dark: no plan ever stops serving or logging consent.

Free

Fully compliant, forever

€0/month

Start free
  • 2 domains, unlimited traffic, 2 team members
  • Monthly scan, 100 subpages a month per domain
  • Every regulation: GDPR, PECR, LGPD, Law 25, US opt-out, GPC honoured
  • Consent Mode v2 (basic)
  • 4 templates: colours, radius, font; with the CookieCrumbs badge
  • Headline consent rate
  • Consent records kept 12 months, exports always available
  • CLI, SDKs and MCP server; community support

Scale

One company, many domains

€199/month

Choose Scale
  • 50 domains, unlimited traffic (fair use above 100M loads a month)
  • Continuous scanning, 100,000 subpages a month
  • Consent API and webhooks
  • Roles and the full audit log
  • Slack and webhook alerts, scheduled exports
  • Signed DPA
  • 5-year proof, one store and hash chain for all domains
  • Priority support

Agency

Many clients, one console

€99/month

Choose Agency

Billed monthly. 20 client workspaces included, then €9 per further workspace.

  • 20 client workspaces, 1 production domain each
  • Weekly scans and scan-on-deploy, 10,000 subpages a month per workspace
  • Fully customised, white-label banner
  • Consent analytics per client
  • Shared templates and config-as-code
  • Roles per client workspace
  • 5-year proof, isolated per client
  • Priority support

All prices in euro, locked for the life of the subscription: no indexation, no renewal uplift. Yearly billing is ten months for twelve (Pro €290, Scale €1,990). An organisation is one legal entity or brand family; Agency workspaces are for clients that are separate legal entities, and a client workspace that leaves its agency continues as a €29 Pro plan. Custom: on-premise, more than 100,000 subpages or paper contracts, quoted from the Scale price, contact us. Switching from another vendor? Your paid plan is free until the current contract ends, with config import. CookieCrumbs is not yet part of the Google CMP Partner Program, which matters only if you serve AdSense, Ad Manager or AdMob.

faq

Cookie consent FAQ

Straight answers on GDPR, UK PECR, Consent Mode v2 and how CookieCrumbs handles each of them. Dates matter here, so every answer carries them.

In the EU, yes, if you set anything beyond strictly necessary cookies: ePrivacy Directive Article 5(3) plus GDPR consent. In the UK, PECR still requires consent, with new statistical and appearance exemptions since 5 February 2026. In the US there is no opt-in rule, but California and other state laws require an opt-out link and Global Privacy Control support.

Change script tags to type="text/plain" with a data-category attribute, or let the CookieCrumbs snippet rewrite known trackers automatically. Blocked scripts, iframes and pixels execute only after the matching category is accepted. In Next.js, React, Astro and Nuxt the SDK wraps tags in a consent-aware component, and Google Tag Manager triggers fire on consent events.

It can. A render-blocking CMP script with a short cache TTL can add seconds to LCP and cause layout shift on every visit. CookieCrumbs loads one 21 kB gzipped file asynchronously with long cache lifetimes, makes no third-party requests of its own, and the bar and ribbon layouts reserve their space before paint so they cause no layout shift.

Not on every page view. The CNIL recommends respecting a refusal for at least six months, and the proposed EU Digital Omnibus Article 88a would make a six-month no-re-ask period law across the EU. CookieCrumbs stores the refusal, suppresses the banner for a period you set, six months by default, and only re-asks when your purposes change.

No. They generate the analytics and pixel scripts you ask for and nothing that blocks them. Asking the builder for a banner usually produces a cosmetic box that shows a choice and blocks nothing, which does not meet GDPR or the ePrivacy Directive. CookieCrumbs adds a banner that holds those scripts until consent, through one script tag or through its MCP server from Cursor or Claude Code.

The free scan reads your homepage HTML once and matches script and iframe hosts against the tracker database, without an account. The full scan in the dashboard loads every page in a real browser, in each consent state, records every cookie, script, pixel, iframe and storage key with the page and script that set it, and re-runs on a schedule. Only the full scan can see what a tag manager injects after load.

In the EU, analytics still needs consent unless your regulator exempts a restricted setup; standard GA4 sends data to a third party and does not qualify. In the UK, PECR Schedule A1 (5 February 2026) exempts low-risk statistics with information and an objection route, under the ICO guidance of 29 April 2026. CookieCrumbs ships both rule sets.

Consent Mode v2 is how a cookie consent banner tells Google tags what the visitor allowed, through ad_storage, analytics_storage, ad_user_data and ad_personalization. Defaults must be denied for EEA, UK and Swiss visitors. Since 15 June 2026 Google uses ad_storage as the controlling signal for Ads data. CookieCrumbs sets the defaults, updates on consent and supports basic and advanced mode.

For AdSense, Ad Manager and AdMob, yes: since 16 January 2024 Google requires a CMP from its CMP Partner Program for EEA and UK traffic, integrated with IAB TCF. Google Ads and GA4 require Consent Mode v2 signals but not a certified CMP. CookieCrumbs is Consent Mode v2 ready and is not yet part of the Google CMP Partner Program, so it is not the right choice for AdSense, Ad Manager or AdMob until that certification is in place.

You must be able to show who consented, when, to what, and what they were shown. A usable log stores a timestamp, pseudonymous ID, banner version and texts, categories chosen and withdrawals. GDPR sets no fixed period; keep records while you rely on the consent plus the limitation period in your country. CookieCrumbs keeps records 12 months on Free and 5 years on every paid plan.

In practice, yes. The CNIL requires a one-click refusal on the first layer and fined Google €325m and SHEIN €150m in September 2025; EDPB Guidelines 03/2022 treat hidden or faded reject options as dark patterns. CookieCrumbs layouts ship equal-prominence buttons and a persistent control to reopen the banner; you can change colours, not demote the button.

Run npx cookiecrumbs init. The CLI detects the framework, installs the integration, writes cookiecrumbs.config.ts, sets Consent Mode v2 defaults and links the site to your workspace. Static sites, WordPress, Shopify and Webflow use one script tag or a plugin. With the MCP server in Claude Code or Cursor, the agent runs the same steps and opens a pull request.

Yes, if it has the tools. The CookieCrumbs MCP server exposes scanning, banner configuration, publishing and the consent log to Claude Code, Cursor, Windsurf, Zed and VS Code. Writes are proposed as a diff first and confirmed on a second call, and every action is logged with the token that made it.

In Frankfurt, Germany, on infrastructure inside the EU. Consent records never leave the EU, no IP address or user agent is stored beside a record, and every record can be exported as signed CSV or JSON, including after you cancel.

ready when you are

Compliant by Friday.
Provable forever.

Free plan, two domains, no card. Or run a free scan first and see what your site loads today.

$ npx cookiecrumbs init