Works with your stack
Cookie banner for a SaaS website
no visitor quota on launch day
Your marketing site runs on WordPress and your customers come from everywhere. Cookie Rocks applies the rules of the countries you sell to, sends the right signals to Google Ads and is never priced by visitor, so a launch never costs you more.

Cookie Rocks Pro The complete plugin, every feature, free for 30 days. Here is what matters most for this kind of site. One setting, for the whole world. Each visitor gets the rules of their own country, read from its law sheet; texts, colours and services stay shared. The rules of your own country apply to every visitor, on top of theirs, except for a site in the United States. In the EU, the UK or Brazil, that means prior consent for everyone. Try the simulator. Default and update set at the very top of the page, on every page view. Basic or advanced mode, with a recommendation for your site. Cookie Rocks reads your public container every day, without a Google account. The tools it loads go into your cookie policy by themselves, paused tags are left out, and the dashboard tells you which tags to make wait for consent. 11.43 kB on a first visit, banner included, then 1.00 kB on each next page. Measured on a blank WordPress. And the engine is built for your site: it only carries the options you use. The measured figures. When a serious problem appears, such as the banner switched off, a second consent tool or Google consent set twice, Cookie Rocks Pro tells you by e-mail or in a Slack channel. One click downloads a zip: the proofs of the period with the expiry of each choice and its planned deletion date, the texts each version of the banner showed, a copy of the banner to open in a browser, and a manifest with a SHA-256 fingerprint of each file. Checking it needs nothing from your site.What Cookie Rocks Pro does for SaaS websites
Each visitor, their own rules
Google Consent Mode v2
Google Tag Manager, read for you
Light on every page
Alerts by e-mail or Slack
Proofs you can hand over
Plugins that SaaS websites often use
Each one is tested with Cookie Rocks: what it loads in the browser, and what waits for the visitor’s choice. Open a card for the details.
What matters for consent with SaaS websites
No quota, no surprise
Cookie Rocks runs entirely on your WordPress: no pageview or visitor limit, so a traffic spike on launch day changes nothing.
Google Ads signals
Google Consent Mode at the very top of every page, basic or advanced, so your conversions stay measured within the rules.
Customers worldwide
The rules of the countries you sell to, with the official texts, and the Global Privacy Control signal honoured for US visitors when you turn it on.
Proofs you own
Every choice is kept in your own database, with an optional copy to your own storage (Dropbox, WebDAV, a webhook or e-mail). Nothing about your visitors is sent to us.
What our tests found on SaaS websites
Good to know · GTM4WPWhat GTM4WP stores in visitors' browsers
GTM4WP: 2 cookie(s) or browser key(s) for visitors, recognised by Cookie Rocks from 2.9.8.
Name Kept in Category What it is for gtm4wp_user_logged_incookie Statistics Tells Google Tag Manager that the visitor just signed in or registered gtm4wp_user_registeredcookie Statistics Tells Google Tag Manager that the visitor just signed in or registered Read in its code, 2 November 2026, GTM4WP.
Full detail
GTM4WP can store these in a visitor's browser: gtm4wp_user_logged_in (cookie, statistics: Tells Google Tag Manager that the visitor just signed in or registered); gtm4wp_user_registered (cookie, statistics: Tells Google Tag Manager that the visitor just signed in or registered). Cookie Rocks recognises them from 2.9.8, with this category and purpose, and lists them in the cookie policy when it sees them.
Good to know · Cookie RocksOnly visitors' pages say which tools the site uses
Cookie Rocks Pro records the tools a site uses only from pages viewed by visitors. Pages viewed by site staff (users who can edit posts) never add tools, so files loaded only for logged-in users, such as the Google Fonts of Site Kit's admin bar, stay out of the list of detected tools and the cookie policy. Blocking still applies to everyone.
Seen in our tests, 28 October 2026, Cookie Rocks.
Good to know · google-site-kitSite Kit's admin bar loads Google Fonts for logged-in users only
Site Kit loads Google Fonts (Google Sans, from fonts.googleapis.com) on public pages only for logged-in users who see the admin bar: its admin bar stylesheet depends on it. Visitors never receive it.
What to do: Scan the site while logged out. Do not list Google Fonts in the cookie policy because of Site Kit alone.
Read in its code, 27 October 2026, google-site-kit 1.190.0. Source
Sent from your server · Site Kit by GoogleSite Kit tag gateway serves the Google tag from the site itself
setting “Google tag gateway for advertisers” · by default: Off until Google turns the feature on for the site
The site forwards each request to Google with the visitor's IP address. The browser never contacts Google directly, so a banner that only knows Google's addresses misses the tag.
Seen in our tests, 18 October 2026, Site Kit by Google 1.189.0.
Full detail
With Site Kit's Google tag gateway on, the Google tag is served by the site itself: a script with the id google_gtagjs-<tag ID>-js loads /wp-content/plugins/google-site-kit/gtg/measurement.php?id=<tag ID>. That file forwards each request to <tag ID>.fps.goog with the visitor's IP address and request headers. The browser never contacts a Google address directly, so a banner that only knows Google's addresses does not see the tag.
Set before the choice · Site Kit by GoogleCookie Rocks holds the Google tag served through Site Kit's tag gateway
It is held until consent, like the tag served by Google. Site Kit's short script that only fills the data layer still runs, after the default consent set by Cookie Rocks.
Seen in our tests, 18 October 2026, Site Kit by Google 1.189.0.
Full detail
Cookie Rocks recognises the Google tag that Site Kit serves from the site through its tag gateway (gtg/measurement.php?id=G-, GT- or AW-) and holds it until consent, like the tag served by Google. Site Kit's short inline script that only fills the dataLayer still runs before the choice, after the default consent set by Cookie Rocks.
Good to know · GTM4WPGTM4WP loads each video tracker only when its player is on the page
Each tracker is a local file and fetches its player API only with a matching embed. In the test, allowing YouTube or Vimeo loaded only that player, not the container.
Seen in our tests, 18 October 2026, GTM4WP 2.0.6.
Full detail
GTM4WP prints the GTM container as one inline script and keeps each video tracker in its own local file (gtm4wp-youtube.js, gtm4wp-vimeo.js and others). A tracker fetches its player API only when a matching embed is on the page, and every tracker depends on the local file gtm4wp-media-gate.js. In the test, allowing YouTube or Vimeo loaded only that player, and the container did not start.
See the 20 other findings
Good to know · GTM4WPGTM4WP does not track YouTube videos embedded from youtube-nocookie.com
The YouTube tracker of GTM4WP watches only iframes whose src starts with https://www.youtube.com/embed. A video embedded from youtube-nocookie.com is not tracked: the tracker did not load www.youtube.com/iframe_api for it.
Seen in our tests, 18 October 2026, GTM4WP 2.0.6.
Set before the choice · Site Kit by GoogleSite Kit's Sign in with Google is held until consent
setting “Sign in with Google module”
- Both Google's script and Site Kit's sign-in script are held: no g_state or googlesitekit_auth_nonce cookie.
- After Accept all, without a reload, the button and One Tap appear.
- On wp-login.php, where no banner is shown, the button works as usual.
- Before 2.5.2 both scripts ran before the choice.
Seen in our tests, 17 October 2026, Site Kit by Google 1.189.0.
Full detail
With Site Kit's Sign in with Google module, Cookie Rocks holds both Google's script (accounts.google.com/gsi/client) and Site Kit's own sign-in script until consent: before the choice there is no g_state or googlesitekit_auth_nonce cookie. After Accept all, without a reload, the button and One Tap appear. On wp-login.php, where no banner is shown, the button works as usual. If accounts.google.com does not answer, the button does not appear, as without Cookie Rocks. Before 2.5.2 both scripts ran before the choice.
Good to know · GTM4WP (GTM for WordPress)Cookie Rocks holds the GTM4WP Tag Manager container until Accept all
On a test WordPress with GTM4WP 2.0.6 and a dummy container ID, Cookie Rocks holds gtm.js before the choice and loads it after Accept all, without a reload. GTM4WP set no cookie or browser storage of its own on that page.
Seen in our tests, 17 October 2026, GTM4WP (GTM for WordPress) 2.0.6.
Depends on a setting · Site Kit by GoogleSite Kit's WooCommerce conversions can send the buyer's email, phone and name
With the gtagUserData flag, the purchase event carries billing details for Google's enhanced conversions. The Reader Revenue Manager module loads a Google News script on its pages.
Read in its code, 16 October 2026, Site Kit by Google 1.189.0.
Full detail
With Site Kit's conversion tracking for WooCommerce and the gtagUserData flag (since 1.161.0), the purchase event carries user_data with the billing email, phone and name for Google's enhanced conversions. Its Reader Revenue Manager module loads news.google.com/swg/js/v1/swg-basic.js on the pages where its snippet is set.
Depends on a setting · GTM4WP (GTM for WordPress)GTM4WP's Consent Mode option can send Google's default twice
setting “Google Consent Mode (integrate-consent-mode)” · by default: off
Off by default. When on, it sets Google's default consent before the container, with every signal denied except those ticked, and never sends an update after the choice.
What to do: Leave it off when the consent plugin already sets the defaults, so the default is not sent twice.
Read in its code, 16 October 2026, GTM4WP (GTM for WordPress) 2.0.6.
Full detail
GTM4WP's Google Consent Mode option is off by default. When on, it prints gtag('consent','default') before the container with all seven signals denied except those ticked, with no region and no wait_for_update. It never sends an update after the choice: that is left to the consent plugin. The filter gtm4wp_consent_mode_default_enabled (false) removes this default, and gtm4wp_overwrite_consent_mode_flag changes one signal.
Set before the choice · GTM4WP (GTM for WordPress)GTM4WP loads Tag Manager on every page with no wait for consent
Once a container ID is set, gtm.js loads in the head of every page. GTM4WP has no wait-for-consent setting and does not read WP Consent API.
Read in its code, 16 October 2026, GTM4WP (GTM for WordPress) 2.0.6.
Full detail
GTM4WP always loads the Tag Manager container (gtm.js from www.googletagmanager.com or a custom domain) in the head of every page once a container ID is set: wp_head priority 10 (2 with its load-early option), after its data layer block at priority 1. It has no wait-for-consent setting and does not read WP Consent API. Its inline blocks carry data-cfasync="false" and data-pagespeed-no-defer.
Depends on a setting · GTM4WP (GTM for WordPress)GTM4WP media tracking loads player scripts only when it finds a video
setting “Media events” · by default: off
Off by default. When on, it requests the YouTube, Vimeo and other player scripts only when it finds the provider's frame, so a banner that holds the frame also prevents the request.
Read in its code, 16 October 2026, GTM4WP (GTM for WordPress) 2.0.6.
Full detail
GTM4WP's media events options are off by default. When on, the player SDKs (YouTube iframe_api, Vimeo, SoundCloud, Wistia, Twitch, Dailymotion and others) are requested by JavaScript only when the provider's iframe is found by its src address, so a banner that moves src to data-src or shows a placeholder prevents the request. The filter gtm4wp_media_sdk_blocked (true) holds all SDK requests, and the gtm4wp-media-gate script can be blocked.
Good to know · GTM4WP (GTM for WordPress)GTM4WP's WooCommerce integration stores small values only after an action
- gtm4wp_item_list_attr: cookie, 3 days, when a product is clicked in a list.
- gtm4wp_orderid_tracked: localStorage on the order received page, or a 365-day cookie.
- gtm4wp_readded_to_cart: localStorage.
- Cache-safe data layer option (off by default): gtm4wp_woo_event, gtm4wp_login, gtm4wp_visitor_session.
Read in its code, 16 October 2026, GTM4WP (GTM for WordPress) 2.0.6.
Full detail
GTM4WP's WooCommerce integration writes small first-party values only after an action: gtm4wp_item_list_attr (cookie, 3 days, when a product is clicked in a list), gtm4wp_orderid_tracked (localStorage on the order received page, or a 365-day cookie if localStorage is unavailable) and gtm4wp_readded_to_cart (localStorage). Its cache-safe data layer option (off by default) adds gtm4wp_woo_event (2 days), gtm4wp_login (logged-in users) and sessionStorage gtm4wp_visitor_session.
Set before the choice · HubSpotThe HubSpot plugin loads HubSpot on every page with no consent setting
Once an account is connected, the loader is added to every front page. Consent exists only through HubSpot's own banner, set in the HubSpot portal. Forms and meetings load separately.
Read in its code, 16 October 2026, HubSpot 11.3.75.
Full detail
Once a HubSpot account is connected, the HubSpot plugin adds the loader js.hs-scripts.com/<portalId>.js (or js-eu1..., id hs-script-loader, async defer) in the footer of every front page, plus an inline _hsq.push(['setContentType']) in the head. It has no consent setting in WordPress and no WP Consent API code; consent handling exists only through HubSpot's own banner configured in the portal. Forms load from <hublet>.hsforms.net and meetings from static.hsappstatic.net, separately.
Depends on a setting · HubSpotHubSpot's optional proxy makes HubSpot cookies come from the site's domain
setting “proxy mappings” · by default: off
Off by default. When on, WordPress relays HubSpot addresses, with HubSpot's cookies, so its requests and cookies come from the site itself.
Read in its code, 16 October 2026, HubSpot 11.3.75.
Full detail
The HubSpot plugin has an optional reverse proxy, off by default: /_hcms/, /hs/, /hubfs/, /hs-fs/, /cs/c/, /e3t/ and /events/public/v1/ are relayed to HubSpot by WordPress, with HubSpot's headers and Set-Cookie included, so HubSpot requests and cookies then come from the site's own domain.
Good to know · Cookie RocksCookie Rocks counts the Google tag as statistics only without Google Ads
- Statistics only, without _gcl_au and _gcl_ls, when nothing shows Google Ads and one sign says there is none.
- Signs: the answer No Google Ads, or Site Kit active without its Ads module.
- Otherwise a GT- tag stays in statistics and marketing.
- A Google Ads ID (AW-) in the tag counts as Google Ads.
Read in its code, 15 October 2026, Cookie Rocks.
Full detail
Cookie Rocks lists the Google tag as Google Analytics (gtag.js), statistics only, without the Google Ads cookie _gcl_au and storage key _gcl_ls, when nothing shows Google Ads (no Google Ads tag seen on the pages or declared in GTM, no Site Kit Ads module) and one sign says there is none (the answer No Google Ads, or Site Kit active without its Ads module). Otherwise a GT- tag stays in statistics and marketing. A Google Ads ID (AW-) in the gtag.js address or in gtag('config', 'AW-...') counts as Google Ads.
Good to know · Site Kit by GoogleWith Site Kit's Ads module, the Google tag counts as statistics and marketing
After Accept all, Google Ads sets _gcl_au. With statistics only, no Google Ads cookie is set, but the tag still sends Google a cookieless request with advertising denied.
Seen in our tests, 15 October 2026, Site Kit by Google 1.189.0.
Full detail
With Site Kit's Ads module (a test AW- conversion ID), the Google tag counts as statistics and marketing. After Accept all, Google Ads sets _gcl_au and calls doubleclick.net. With consent to statistics only, no Google Ads cookie is set, but the loaded tag still sends Google a cookieless request with advertising consent denied (pagead2.googlesyndication.com/ccm/collect).
Good to know · Site Kit by GoogleCookie Rocks holds Site Kit's Google tag in basic mode
- Before any choice, no request goes to Google.
- Accept all or statistics only: _ga and _ga_<ID> are set; with statistics only, advertising stays denied.
- Reject all: gtag.js never loads.
Seen in our tests, 15 October 2026, Site Kit by Google 1.189.0.
Full detail
Site Kit prints its Google tag (gtag.js) in the page head. Cookie Rocks holds it there in basic mode: before any choice, no request goes to Google. After Accept all, Google Analytics sets _ga and _ga_<ID>; with statistics only, the same happens and advertising stays denied; after Reject all, gtag.js is never loaded. With a GT- test ID Google returned no configuration and set no cookie; the cookies were seen with a G- test ID.
Depends on a setting · Site Kit by GoogleSite Kit's Consent Mode setting sends Google's default consent a second time
setting “Consent Mode” · by default: off
Google receives a second default consent, for a fixed list of 32 countries that ignores the regions saved in Site Kit, and functionality storage is granted as the page opens.
What to do: Keep Site Kit and WP Consent API, and turn off only the Consent Mode setting of Site Kit (Settings, Admin settings) when the banner already sends Google's consent signals. The Cookie Rocks dashboard flags it and turns it off in one click.
Seen in our tests, 15 October 2026, Site Kit by Google 1.189.0.
Full detail
With its Consent Mode setting on, Site Kit sets Google's default consent a second time, after the banner's, and only for a fixed list of 32 countries (EU, IS, LI, NO, GB, CH): the regions saved in Site Kit are not read. With WP Consent API present, it also sends its own consent updates after each choice; they grant functionality_storage as soon as the page opens (the functional category of WP Consent API), while statistics and advertising follow the visitor's choice.
Good to know · Site Kit by GoogleCookie Rocks gives Site Kit's tag the consent in the right order
The tag reads denied first, then granted on Accept all, so everything is sent as granted. After a refusal the tag never loads. In a browser test, nothing was sent before the choice.
Read in its code, 15 October 2026, Site Kit by Google 1.189.0.
Full detail
With Site Kit, Cookie Rocks pushes its 'denied' consent default first in the dataLayer and asks Google to wait 500 ms; on Accept all it records 'granted' before releasing Site Kit's tag, so the tag reads denied, Site Kit's settings and events, then granted, and everything is sent as granted. After a refusal the tag never loads. In a browser test: no request and no cookie before the choice, Analytics and its cookies after Accept all.
Good to know · Site Kit by GoogleSite Kit sends nothing to Google before it is connected
Before it is connected to a Google account, Site Kit only adds a DNS prefetch hint for googletagmanager.com to the pages: no request to Google and no cookie.
Seen in our tests, 15 October 2026, Site Kit by Google 1.189.0.
Set before the choice · Site Kit by GoogleTwo Site Kit scripts still run before the choice, but send nothing to Google
When the Google tag is held, Site Kit's tag settings and content events only fill the data layer. After consent, the tag processes events pushed before the choice.
Seen in our tests, 15 October 2026, Site Kit by Google 1.189.0.
Full detail
When a banner holds Site Kit's Google tag (gtag/js), two other Site Kit scripts still run before the choice: the inline tag settings (google_gtagjs-js-after: linker, js, developer_id, config) and its content events provider. They only fill the dataLayer and send nothing to Google. Site Kit also replaces window.gtag with an equivalent function writing to the same dataLayer. After consent, events pushed before the choice are processed by the tag.
Good to know · Site Kit by GoogleCookie Rocks holds Site Kit's Tag Manager and AdSense scripts
The Tag Manager container loads only after consent. Auto ads count as marketing: they load after Accept all, not with statistics only or after Reject all.
Seen in our tests, 15 October 2026, Site Kit by Google 1.189.0.
Full detail
With Site Kit's Tag Manager module, the container (gtm.js) is held in the page head and loads only after consent. With its AdSense module, the Auto ads script (adsbygoogle.js) is held as marketing: it loads after Accept all, not with statistics only or after Reject all.
Good to know · Site Kit by GoogleSite Kit reads WP Consent API only when its Consent Mode setting is on
setting “Consent Mode” · by default: off
With that setting off, Site Kit sends no consent signal at all, and the visitor's choice reaches Google only through the banner's own signals.
Read in its code, 15 October 2026, Site Kit by Google 1.189.0.
Full detail
Site Kit declares itself compatible with WP Consent API, but its code reads WP Consent API only when its own Consent Mode setting is on. With that setting off, Site Kit pushes no consent command at all, and the visitor's choice reaches Google only through the banner's own Consent Mode signals.
Good to know · WP Consent APICookie Rocks rewrites the WP Consent API cookies on every page
They last 30 days by default, so a banner that writes them only at the click leaves Site Kit with no consent later. In a test, deleted cookies were set again and Google read granted.
Seen in our tests, 8 October 2026, WP Consent API.
Full detail
WP Consent API keeps its wp_consent_* cookies for 30 days by default. A banner that writes them only at the click leaves Site Kit reading no consent after 30 days, while the banner's own choice is still valid. Cookie Rocks writes the visitor's choice to WP Consent API on every page: in a test, the wp_consent_* cookies were deleted and the page reloaded; they were set again to allow, and Site Kit and Google read granted.
Kinds of sites
Other kinds of sites, each with its own page.
Questions
Does it work with Google Tag Manager?
Yes. Cookie Rocks reads your public Tag Manager container, lists the tools it loads, adds them to your cookie policy and tells you which tags to make wait.
Will it slow down our landing pages?
Very little. Each site gets an engine with only the options it uses, and the code for held videos, maps and forms loads only on the pages that have them.
Can we test it before buying?
Yes. The complete plugin is free for 30 days, with every feature, and the free Audit checks your current setup first.
What happens after the 30-day trial?
The banner, your visitors’ choices and your proofs of consent keep working. Without a key, most settings lock, updates and support stop. Take a key at any time and everything opens again.
For SaaS teams
Ship consent before your next launch.
no quota, no meter
Every feature for 30 days, no card. Enough time to get the purchase through your finance team.
- During the trial: everything, including the full settings and the scans
- After 30 days without a key: the banner, your visitors’ choices and your proofs of consent keep working
- What waits for a key: most settings, updates and support

Get your trial key
Your e-mail and your site. Your key arrives as soon as you confirm your e-mail.