Privacy compliance for e-commerce

Stop tracking your customers
before they say yes

Noticeify blocks advertising pixels, analytics scripts, and third-party trackers until your visitor gives affirmative consent — and proves it with a timestamped audit trail.

<script
  src="https://noticeify.pages.dev/consent-loader.js"
  data-client-id="nfy_ocusleep_prod"
  data-domain="ocusleep.com"
  async></script>

Three questions every website owner needs to answer

What tracking is on my site?

The scanner crawls every page and builds a full inventory of pixels, analytics scripts, cookies, and iframes — classified by vendor and risk level.

Is any of it firing before consent?

A three-phase Playwright scan loads each page clean, then with consent, and diffs the results — surfacing any vendor that fires before the user clicks Accept.

Can I prove what was consented to?

Every consent event is logged with a timestamp, banner version, policy version, category choices, and GPC signal — exportable as CSV or PDF for legal review.

Google Consent Mode v2

All consent signals default to denied before GTM loads, then update granularly after the user decides — preserving conversion modeling in denied state.

What visitors see

Loads before any non-essential script. No dark patterns. Reject and Accept are equal visual weight.

OcuSleep.com

nfy_ocusleep_prod
Meta Pixel appears to be firing before consent on /checkout. Immediate review recommended.
54%
Acceptance rate
31%
Rejected non-essential
2
Pre-consent scripts
Consent by category (7d)
${[['Analytics','61','var(--green)'],['Marketing','48','var(--green)'],['Personalization','44','var(--green)'],['Support / chat','39','var(--green)'],['Embedded media','35','var(--green)']].map(([l,p,c])=>`
${l}
${p}%
`).join('')}
Vendor inventory
${[['Google Analytics 4','analytics','✓ blocked'],['Google Tag Manager','essential','✓ managed'],['Meta Pixel','marketing','⚠ pre-consent',true],['Microsoft Ads','marketing','✓ blocked'],['Klaviyo','marketing','⚠ review',false,true],['Zendesk Chat','support','✓ blocked']].map(([n,cat,status,crit,warn])=>`
${n} ${cat} ${status}
`).join('')}
Manage your privacy preferences
ocusleep.com · Last saved: today at 2:31 PM · Banner v1.0
Strictly necessary
Required to operate the website — shopping cart, checkout, authentication, payment processing, and fraud prevention.
Session cookies, Stripe, Signifyd
Always on
Functional
Remembers your preferences, region, and language settings.
Analytics
Helps us understand how visitors use the site.
Google Analytics 4, Microsoft Clarity
Marketing & advertising
Ad measurement, retargeting, and audience building across websites.
Meta Pixel, Google Ads, Microsoft Ads, Klaviyo
Support & chat
Live chat and customer support widget.
Zendesk Chat
Embedded media
YouTube and Vimeo video players. May set cookies when activated.
Recent consent events
2:41 PMUser accepted all categories/checkoutaccept all
2:38 PMGPC signal detected — marketing denied/sleep-glassesGPC
2:35 PMUser rejected non-essential/cartrejected
2:31 PMCustom: analytics only/custom
2:28 PMUser accepted all categories/checkoutaccept all
Google Consent Mode v2 — current state

Default state (before consent). All signals denied until the user makes a choice.

ad_storage
denied
analytics_storage
granted
ad_user_data
denied
ad_personalization
denied
functionality_storage
granted
personalization_storage
denied
security_storage
granted
wait_for_update
500ms
GTM container
Container ID GTM-NQB7D7L
Consent initialization tag ⚠ not detected
url_passthrough ✓ enabled
ads_data_redaction ✓ enabled

Pre-consent pixel scanner

Last scan: Apr 29, 2026 · 47 URLs crawled · ocusleep.com

47
Pages crawled
11
Third-party domains
2
Pre-consent fires
1
Unclassified
Findings requiring attention
Critical
Meta Pixel firing before affirmative consent
The Meta Pixel was observed sending network requests before a consent choice was recorded on the /checkout page.
connect.facebook.net/en_US/fbevents.js · detected on /checkout, /cart
High
Klaviyo onsite script not fully gated
The Klaviyo identify/track script loads from a GTM custom HTML tag that fires outside the Noticeify vendor registry.
static.klaviyo.com/onsite/js/klaviyo.js · source: GTM custom HTML tag
Moderate
Zendesk chat script loads before user opens chat
Correctly blocked in the vendor registry, but confirm the GTM trigger does not bypass the consent gate.
static.zdassets.com/ekr/snippet.js · 39 of 47 pages
Low
1 unclassified third-party script detected
An external script was detected but is not present in the Noticeify vendor registry. Classify and assign a consent category.
cdn.justuno.com/visitorv2.js · source: GTM · /frames, /sunglasses

Simple, transparent pricing

One platform, multiple sites. No per-pageview charges.

Starter
$0/mo
One website. Perfect for getting started.
  • 1 website
  • Banner + preference center
  • Consent logging
  • GPC detection
  • Google Consent Mode v2
Agency
$149/mo
Unlimited websites. White-label ready.
  • Unlimited websites
  • White-label banner
  • Legal-ready PDF reports
  • Priority support
  • Multi-team access

Get Noticeify running in 3 steps

Works on any website. Shopify, WordPress, or custom HTML.

1

Add the embed tag

Place this as the very first script in <head>, before GTM and any other tag. On Shopify, add it to theme.liquid.

<script
  src="https://noticeify.pages.dev/consent-loader.js"
  data-client-id="nfy_ocusleep_prod"
  data-domain="ocusleep.com"
  async></script>
2

Gate your vendor scripts

Move all non-essential scripts into the vendor registry. Noticeify only loads them after the user grants that category.

// Check consent before firing any pixel
if (window.Noticeify.hasConsent('marketing')) {
  loadMetaPixel();
}

// React to consent changes
window.Noticeify.onConsentChange(({ categories }) => {
  if (categories?.analytics) initGA4();
});
3

Add the footer privacy link

Give returning visitors a way to update their preferences at any time. Required by CCPA.

<a href="#"
  onclick="window.Noticeify.openPreferences();return false">
  Your Privacy Choices
</a>
Shopify-specific note

In Shopify, go to Online Store → Themes → Edit code → layout/theme.liquid. Paste the embed tag immediately after the opening <head> tag, before any other script. GTM must load after Noticeify.