Checklist

How many ad requests go out before the banner reads GPC? Four stores tested

Start a free audit

We loaded 4 Shopify stores with GPC on and clicked nothing. On Store O, two runs sent 62 and 63 ad requests before its banner recorded GPC.

In brief

Tested 2026-10-27 (UTC+8). Four Shopify stores, three ways of handling GPC: a OneTrust cookie, an Osano consent object, and the Shopify Customer Privacy API. On Store O, OneTrust recorded GPC at 4069 ms and 4336 ms. Before that marker the two runs sent 62 and 63 ad requests (40 and 41 excluding script downloads), from 13 vendors. The Osano stores returned an opt-out marker no later than 1004 ms, with at most 2 script downloads before it. Store P has no CMP. It sent 5 and 8 ad requests before Shopify first read sale_of_data as "no". Each run used a new browser profile, a direct US visit, Sec-GPC plus the JavaScript flag, and no clicks. Two GPC runs per store. The paired protocol is the Shopify GPC honor test. Not legal advice.

When did each banner process GPC?

Tested 2026-10-27 (UTC+8), from a direct US connection in Virginia. The browser was headless Chrome, with a new profile each run, English, and the America/Los_Angeles timezone. GPC runs sent a Sec-GPC: 1 header and set navigator.globalPrivacyControl to true before any page script ran. We opened the homepage, clicked nothing, and waited 20 seconds after DOMContentLoaded. Each store has two GPC runs, listed separately, and one run without GPC.

The marker is the first sign that the store processed GPC. On Store O it is the moment OneTrust wrote the OptanonConsent cookie with isGpcEnabled=1. That write time is exact. On Store K and Store R it is the first time Osano.cm.getConsent() returned OPT_OUT: ACCEPT. Those stores wrote no consent cookie, so the cookie is not the marker. The read is every 100 ms, so the time is an upper bound: no later than the millisecond in the table. On Store P there is no CMP. The marker is the first time Shopify.customerPrivacy.currentVisitorConsent() returned sale_of_data: "no". That read is also every 100 ms, and the API already said "no" the first time it could be read, so "before" on Store P is before that API was readable. Store K and Store R are the same stores as in our Postscript test.

When each store processed GPC. Times are milliseconds from navigation start. Osano and Shopify times are 100 ms poll upper bounds. The OneTrust time is the cookie write.
Store / runCMPMarkerMarker timeShopify sale_of_data "no", first read
O run 1OneTrustOptanonConsent write, isGpcEnabled=14069 ms2371 ms
O run 2OneTrustOptanonConsent write, isGpcEnabled=14336 ms2826 ms
O, no GPCOneTrustOptanonConsent write, isGpcEnabled=03621 msempty string at first read
K run 1OsanoOPT_OUT: ACCEPTno later than 980 ms2807 ms
K run 2OsanoOPT_OUT: ACCEPTno later than 1004 ms3245 ms
K, no GPCOsanoOPT_OUT: DENYno GPC markerempty string at first read
P run 1No CMPsale_of_data: "no"no later than 1000 mssame read
P run 2No CMPsale_of_data: "no"no later than 1176 mssame read
P, no GPCNo CMPsale_of_data: ""no GPC markerempty string at first read
R run 1OsanoOPT_OUT: ACCEPTno later than 347 ms1732 ms
R run 2OsanoOPT_OUT: ACCEPTno later than 264 ms1667 ms
R, no GPCOsanoOPT_OUT: DENYno GPC markerempty string at first read

The moment a banner processes GPC may depend on that store's configuration and script load order. We did not test either, so these times do not represent the CMP itself.

On Store O, OneTrust called Shopify setTrackingConsent at 4137 ms on run 1 and 4412 ms on run 2, with marketing false and sale_of_data false. Active groups after the GPC runs were C0001, C0002, and C0003. On the run without GPC they were C0001, C0002, C0003, SSPD_BG, C0004, and C0005.

In window.dataLayer, the Consent Mode default was ad_storage granted on Store O, Store P, and Store R, and denied on Store K. On the GPC runs the recorded gtag commands were default only. None was a consent update to denied. We only checked window.dataLayer. Other writes, including a Consent Mode path outside gtag and Shopify's own consent calls, were not in this check, so this record cannot show whether Consent Mode was updated some other way.

A separate page covers a GPC signal present but marketing still loads.

What was sent before the banner processed GPC?

Counts below are ad and marketing requests whose start time is before the marker. They include script downloads. The number in parentheses leaves out script, stylesheet, and document loads. Runs are not combined. We only checked whether requests were sent, not what they carried (for example an ad platform's restricted-processing parameters), so we cannot say whether any of them count as a sale or share.

Ad and marketing requests before the GPC marker. Parentheses exclude script, stylesheet, and document loads.
Store / runBefore (excluding script downloads)Vendors and hosts
O run 162 (40)Google Ads 23: www.google.com 9, googleads.g.doubleclick.net 5, www.googleadservices.com 4, cm.g.doubleclick.net 2, ad.doubleclick.net 1, the store's first-party sGTM subdomain (AW/DC gtag.js) 2. RTB House 9 (creativecdn.com). Amazon Ads 5 (c.amazon-adsystem.com and s.amazon-adsystem.com). Bing UET 4 (bat.bing.com). Kargo 4 (kds-pixel.kargo.com and storage.cloud.kargo.com). Ometria 4 (trk.ometria.com and cdn.ometria.com). Taboola 3. Postscript 2 (sdk.postscript.io). Reddit 2 (alb.reddit.com and www.redditstatic.com). MNTN 2 (dx.mountain.com and px.mountain.com). Xandr 2 (ib.adnxs.com). Teads 1 (p.teads.tv). The Trade Desk 1 (js.adsrvr.org).
O run 263 (41)Google Ads 26: www.google.com 12, googleads.g.doubleclick.net 5, www.googleadservices.com 4, cm.g.doubleclick.net 2, ad.doubleclick.net 1, the store's first-party sGTM subdomain (AW/DC gtag.js) 2. RTB House 7. Amazon Ads 6. Bing UET 4. Kargo 4. Ometria 3. Taboola 3. Postscript 2. Reddit 2. MNTN 2. Xandr 2. Teads 1. The Trade Desk 1.
K run 12 (0)www.googletagmanager.com (AW gtag.js) 1. static.klaviyo.com 1.
K run 22 (0)www.googletagmanager.com (AW gtag.js) 1. static.klaviyo.com 1.
P run 15 (3)Attentive 4 (cdn.attn.tv 3, a store-specific attn.tv subdomain 1). www.googletagmanager.com (AW gtag.js) 1.
P run 28 (4)Attentive 7 (cdn.attn.tv 3, creatives.attn.tv 2, a store-specific attn.tv subdomain 2). www.googletagmanager.com (AW gtag.js) 1.
R run 10None
R run 20None

On Store O the first ad request was at 1171 ms on run 1 and 1121 ms on run 2, about 3 seconds before OneTrust recorded GPC. Before Shopify read sale_of_data as "no", Store O had already sent 14 requests on run 1 and 23 on run 2.

How a CMP can hold tags before a click is a different check: CMP auto-blocking before Accept.

Did ad requests stop after GPC was processed?

The capture waited 20 seconds after DOMContentLoaded, with no click. The table counts ad and marketing requests from the GPC marker until that wait ended. How long that stretch lasts depends on when the marker landed, and this page does not turn it into one fixed duration after the marker. We recorded the counts and the vendors. We did not check which script sent each request. Again, we checked whether requests were sent, not their parameters, so we cannot say whether they count as a sale or share.

Ad and marketing requests from the GPC marker until the end of the 20 second wait after DOMContentLoaded. Parentheses exclude script, stylesheet, and document loads.
Store / runAfter (excluding script downloads)Main vendors
O run 144 (16)The Trade Desk 14, Google Ads 10, Amazon Ads 5, Bidswitch 4, Taboola 2, MNTN 2, Index Exchange 2, PubMatic 2, Bing UET 1, Xandr 1, Magnite 1
O run 240 (12)The Trade Desk 14, Google Ads 7, Amazon Ads 4, Bidswitch 4, Taboola 2, MNTN 2, Index Exchange 2, PubMatic 2, Bing UET 1, Xandr 1, Magnite 1
K run 10 (0)None
K run 20 (0)None
P run 122 (16)Google Ads 11, Attentive 8, Vibe 2, Mailchimp 1
P run 219 (14)Google Ads 11, Attentive 5, Vibe 2, Mailchimp 1
R run 110 (5)Google Ads 9, Klaviyo 1 (script)
R run 29 (5)Google Ads 8, Klaviyo 1 (script)

On Store O, after OneTrust called setTrackingConsent with marketing false, the two runs still sent 44 and 40 ad requests.

How much did GPC change compared with a visit without it?

Each store has one run with GPC off, same homepage, same 20 second wait, no click. That run is only there to check that the marker moved with GPC. The table is the ad and marketing total for that visit.

One visit per store with GPC off. Totals are the 20 second window. Vendors in the last column appeared on that visit and on neither GPC run.
StoreAd requests (excluding script downloads)Vendors absent from both GPC runs
O153 (95)AppLovin, Snap, Pinterest
K2 (0)None. The same two script downloads.
P68 (55)Meta, TikTok, Snap, AppLovin, Reddit, Spotify Ads
R22 (15)Reddit, Amazon Ads, Pinterest

On Store K, Osano's first read had MARKETING set to DENY on the GPC runs and on the run without GPC. The Consent Mode default on that store was ad_storage denied in all three runs. The run without GPC sent the same two script downloads, and nothing after.

What did Shopify's privacy API do on the store with no banner?

Store P shows no CMP. The first time Shopify.customerPrivacy.currentVisitorConsent() could be read, sale_of_data was already "no": no later than 1000 ms on run 1 and no later than 1176 ms on run 2. On the run without GPC that field was an empty string at the first read. Before the API was readable, the GPC runs sent 5 and 8 requests, Attentive and gtag.js. After it, Google Ads still sent 11 requests on each run, with Attentive, Vibe, and one Mailchimp request. We did not check which of these the store treats as a sale or share.

What the Customer Privacy API records, and what a customer-event pixel can still load, is on Shopify Customer Events versus the Privacy API.

What do California's official sources say about GPC?

California's AB 566, the California Opt Me Out Act, adds Civil Code section 1798.136. It says a business shall not develop or maintain a browser without a consumer-configurable setting that sends an opt-out preference signal. The section becomes operative on January 1, 2027. AB 566 bill text

Staff slides for the August board meeting listed GPC timing examples. Staff slides

Not legal advice.

On Store O, the first ad request went out at about 1.1 seconds. OneTrust recorded GPC at about 4.1 to 4.3 seconds.

What we didn't test

One direct US exit, in Virginia. Two GPC runs and one run without GPC per store. Homepage only. No click, no scroll, and no product page.

Osano and Shopify marker times are upper bounds from a 100 ms poll. The OneTrust marker is the exact cookie write.

Before and after compare the request start time with the marker time. A request after the marker can continue a chain that started earlier, such as a cookie-sync redirect. We did not split those out.

We checked whether a request was sent. We did not read the fields inside it.

GPC in the browser was the header plus the JavaScript property. That should match Firefox or Brave with GPC on. We did not repeat the runs in those browsers. The browser steps are on how to test GPC in Chrome, Firefox, and Brave.

A few requests in the capture events had no Sec-GPC header: 1 of 764 and 1 of 761 on Store O, and 3 of 431 and 3 of 433 on Store R. The other requests on those runs had the header. Store K and Store P had the header on every recorded request.

These times come from four stores. They are not a ranking of CMPs, and they are not a statement that a store did something wrong.

How do you check GPC timing on your own store?

You can time the same gap in a desktop browser. Keep the header proof with the request list. The field list is on how to prove a storefront honored GPC.

  1. Turn GPC on before the load. Brave and Firefox have a setting. An extension can send it in other browsers. The free GPC checker reads the header your browser sent to ConsentProbe.
  2. Open a new private window. In DevTools, open Network and turn on Preserve log. Load the homepage and note the time of the first ad request.
  3. Open Application, then Cookies. For OneTrust, read isGpcEnabled=1 inside OptanonConsent. Or, in the Console, call Shopify.customerPrivacy.currentVisitorConsent() and read sale_of_data.

Want this timing recorded on your store, run by run? See the cookie audit.

FAQ

Does GPC stop ad pixels on Shopify?

On these four stores, eight GPC runs, and one run without GPC each, the counts include script downloads. Store O sent 62 then 44 on run 1, and 63 then 40 on run 2. The run without GPC sent 153. Store K sent 2 then 0 on both GPC runs, and 2 without GPC. Store P sent 5 then 22, and 8 then 19. The run without GPC sent 68. Store R sent 0 then 10, and 0 then 9. The run without GPC sent 22. In total, the visit without GPC sent more of these requests than either GPC run on Store O, Store P, and Store R. Store K sent the same two requests with GPC on or off. Not legal advice.

How fast does OneTrust process GPC?

On Store O, OneTrust wrote OptanonConsent with isGpcEnabled=1 at 4069 ms and 4336 ms. That is one store. That store's configuration and script load order were not tested, so these times do not represent OneTrust itself.

Does Shopify's Customer Privacy API reflect GPC?

On Store P, Store O, Store K, and Store R, the GPC runs read sale_of_data as "no". On each store's run without GPC, sale_of_data was an empty string at the first read. This page does not describe Shopify's internal implementation.

Not legal advice.

Sources

These links cover the platform and regulatory context used in this guide. Applicability still depends on the organization and jurisdiction.

Save a US-baseline technical record

After a DIY check, run a free US-baseline audit: one browser visit outside California, with cookies, requests, and screenshots stored as evidence. That visit does not run EU reject/accept or California GPC. EU, California, and Global 2 audits can be purchased from Billing after sign-in.

Ad Requests Before GPC Processing (4 Stores) | ConsentProbe