QA & localisation · Cookie consent testing
Cookie consent testing by country and US state
Cookie consent testing checks that each market gets the right banner and that the site does what the visitor chose: no non-essential cookies or tags before consent in the EU, a working opt-out in US states that require one. Run the check from inside each market, because the consent platform decides by visitor location.
Pay per GB · No subscription · Prices in EUR, excl. VAT
- €2.00
- per GB on ARC Fast, excl. VAT
- −44%
- at 1 TB (€1.12 / GB)
- 185+
- countries, city targeting
- Never
- expires — no subscription
Written for
- Privacy and compliance teams
- Web analytics engineers
- Consent management administrators
- Privacy auditors
The short answer
- Consent platforms choose the banner by visitor location. From the office you test one region's rules; from an exit in each market you test all of them.
- Test three states per page: before any interaction, after reject, after accept. The first two are where most findings are.
- In the EU, storing or reading non-essential information on a device needs consent first. A tag that fires before the banner is answered is a finding.
- In California, a Global Privacy Control signal must be treated as an opt-out of sale and sharing. Send
Sec-GPC: 1from a Californian exit and check the site honours it. - Use a fresh browser context for every run. A stored consent cookie from the last test hides the banner and every bug behind it.
The problem
What goes wrong without the right IPs
You only ever see your own banner
The consent platform reads the visitor's location and serves an opt-in banner in the EU, an opt-out link in some US states and nothing elsewhere. Your QA team, all in one country, has tested one branch.
Tags fire before the choice
A tag manager trigger set to page view, a hard-coded pixel or a third-party script that loads its own trackers will set cookies before the banner is answered. It is invisible unless you record the requests.
Reject does not mean reject
A reject click that hides the banner but leaves analytics cookies in place, or that is undone on the next page, is a common failure, and it only shows if you reload after rejecting.
Opt-out signals are ignored
Global Privacy Control is a header and a JavaScript property. Many sites never read either, and the omission does not show up in any normal test run.
Regional changes ship silently
A marketing team adds a pixel, a consent platform updates its geolocation rules, a template change moves the banner. Without a scheduled check per market, you learn about it from a complaint.
What to collect
What you can collect
- Banner variant served
- Which banner, or none, the market received. The first assertion: is this the configuration we intended for this country or state?
- Cookies set before interaction
- Name, domain, expiry and whether each is classed as essential. Non-essential cookies here are the headline finding in the EU.
- Third-party requests before interaction
- Domains contacted before the visitor chose. A tracker request without a cookie can still be a problem; record both.
- State after reject
- Cookies and requests after a reject click and after a reload. Shows whether the choice is applied and persists.
- State after accept
- Confirms tags work when consent is given, so the fix for one bug does not break measurement.
- First-layer options
- Whether reject is offered next to accept, and whether boxes are pre-ticked on the settings layer.
- GPC handling
- Whether a request with
Sec-GPC: 1changes what is set and shown, and whether the site displays that the signal was honoured. - Exit country, city and timestamp
- Evidence of where the test ran from, so a finding can be reproduced and explained.
How it runs
How a collection run works
- 01
Define the matrix: pages × markets × states
List the templates that matter (home, product, checkout, article), the markets you serve, and the three consent states. Add a GPC variant for US markets that require opt-out signals to be honoured.
- 02
Run each cell in a fresh context through the market's exit
Open a new browser context with no stored state, held on one sticky exit for the whole cell so the page, banner and reload all come from one visitor.
Pre-consent and post-reject capture, Playwright26 linesfrom playwright.sync_api import sync_playwrightSERVER, PASSWORD = "http://proxy.arcproxies.io:8000", "PASSWORD"def run_cell(url: str, country: str, city: str | None, cell: str, gpc: bool = False): user = f"USERNAME_pool-arcfast_country-{country}" if city: user += f"_city-{city}" user += f"_session-{cell}_sesstime-10" with sync_playwright() as p: browser = p.chromium.launch(proxy={"server": SERVER, "username": user, "password": PASSWORD}) ctx = browser.new_context(extra_http_headers={"Sec-GPC": "1"} if gpc else {}) page = ctx.new_page() requests = [] page.on("request", lambda r: requests.append(r.url)) page.goto(url, wait_until="networkidle") before = {"cookies": ctx.cookies(), "requests": list(requests)} page.get_by_role("button", name="Reject all").click() # adapt per banner page.reload(wait_until="networkidle") after = {"cookies": ctx.cookies(), "requests": list(requests)} browser.close() return before, after# California, with and without the GPC headerrun_cell("https://www.example.com/", "us", "losangeles", "ca-gpc", gpc=True)run_cell("https://www.example.com/", "de", None, "de-base") - 03
Classify what you recorded
Map every cookie and request domain to a purpose using your consent platform's categories. Anything non-essential before consent, or still present after reject and reload, becomes a finding with the market attached.
- 04
Run it on a schedule and on release
Run the full matrix weekly and a reduced matrix on every release that touches templates, tags or the consent platform. Diff against the last run so a new tracker shows up as a change, not as noise.
Setup
Recommended setup
A consent test is a short, stateful browser session. Hold one exit per test cell and pick the pool by how much of the matrix you run.
| Plan | Role | Session | Targeting | Price |
|---|---|---|---|---|
ARC Fast Rotating residential | Default for full consent runs Residential exits, the address type real visitors arrive from, held for load, choice and reload. City targeting is how you reach US states that have their own rules. | Sticky, 10 minutes per test cell | Country + city | €2.00 / GB €1.12 at 1 TB (−44%) |
ARC Basic Rotating ISP | For quick pre-consent checks at scale Our lowest price per GB, for the frequent check that only asks which cookies and requests appear before any interaction. | Sticky, 5 minutes per page | Country + city | €0.75 / GB €0.59 at 1 TB (−21%) |
ARC Mobile Mobile 4G/5G | For mobile templates on carrier networks Genuine 4G/5G exits for sites that serve a different template or tag set to phone traffic. No city targeting, so no state-level checks. | Sticky up to 60 minutes | Country only — DE, GB, US, JP | €3.50 / GB €3.15 at 1 TB (−10%) |
Prices are list prices in EUR, excl. VAT. Volume discounts apply automatically at checkout — full ladder on the pricing page.
Connect
One connection string per market
The country, city and sticky session are tokens in the username. Change the token, change the market; keep the session handle, keep the IP.
http://USERNAME_pool-arcfast_country-de_session-k3f9a1x2_sesstime-10:PASSWORD@proxy.arcproxies.io:8000Swap _country-de for any market you quote. The full grammar is on the residential proxies page.
Illustration
What a weekly consent audit across 12 markets costs
An illustration with round numbers — your pages, payloads and retry rate will differ. The arithmetic is the real price ladder.
Assumptions
- Page templates
- 300
- Markets
- 12 countries and US states
- Consent states per page
- 3 (no interaction, reject, accept)
- Weight per run
- 3 MB, full render
- Cadence
- weekly
- Bandwidth per month
- ≈ 141 GB
On ARC Fast
€191.76per month, excl. VAT
141 GB bought in one purchase at €1.36 / GB (−32% volume rung, applied automatically).
The same 141 GB on ARC Basic: €95.88 at €0.68 / GB. Move down as soon as the cheaper pool holds up.
Consent tests need the full render, because the trackers are the thing being tested. Cut cost by testing templates rather than every URL, and by running only the pre-consent state between full weekly audits.
Bandwidth never expires, so a bigger single purchase is only ever cheaper per GB. See the ladder.
In depth
Cookie consent testing, in depth
US state privacy laws and opt-out preference signals
US state laws mostly work on opt-out rather than opt-in. Under the California regulations, a business that sells or shares personal information must treat an opt-out preference signal such as Global Privacy Control as a valid request to opt out, without asking for more information and without a pop-up in response to the signal. Colorado has required controllers to honour recognised universal opt-out mechanisms since 1 July 2024, and recognised GPC as the first.
GPC is technically simple: browsers that support it send the request header Sec-GPC: 1 and expose navigator.globalPrivacyControl. That makes it easy to test, and easy to forget to implement.
Which US states you can test from
Consent platforms usually resolve a US visitor to a state from the IP address. Our rotating pools take a city token in six US metros, which places a test in these states:
| City token | State | What it lets you check |
|---|---|---|
losangeles | California | Opt-out link, GPC handling under the California regulations |
seattle | Washington | Your configuration for Washington visitors |
dallas | Texas | Your configuration for Texas visitors |
miami | Florida | Your configuration for Florida visitors |
newyork | New York | Your configuration for New York visitors |
chicago | Illinois | Your configuration for Illinois visitors |
States outside this list, Colorado among them, cannot be targeted directly; country-level US exits land wherever the pool places them. IP geolocation databases also disagree at the edges, so record which banner variant you actually received rather than assuming it from the token. How to test a proxy's location explains how to check.
Fitting consent checks into a wider test suite
Consent testing is one slice of geo-dependent behaviour. The same runner can assert currency, redirects and localised strings; our website testing page covers that wider suite, and Playwright with proxies shows the browser setup in full.
Keep consent runs separate in reporting, though. A failed currency assertion is a bug; a tracker firing before consent may be a compliance incident, and it should reach the privacy team, not just the developer on call. For how browser choice affects these runs, see Playwright vs Puppeteer vs Selenium.
Works with anything that takes a proxy URL
Playwright
- Puppeteer
- Selenium
- Node.js
- Python requests / httpx
- Docker
FAQ
Questions
Something not covered? Write to contact@arcproxies.io.
Why does cookie consent testing need proxies?
Because consent platforms decide which banner to show, and which tags to allow, from the visitor's location. Testing from one office exercises one region's configuration. An exit in each market shows what visitors there actually receive.
How do I test Global Privacy Control?
Send the request header Sec-GPC: 1 from a browser context in a state whose rules require the signal to be honoured, such as California, and compare cookies, requests and the displayed opt-out status against a run without the header.
Can I target a specific US state?
Indirectly, through city targeting on ARC Basic, Fast and Ultra: Los Angeles, Seattle, Dallas, Miami, New York and Chicago place a test in California, Washington, Texas, Florida, New York and Illinois. Other states cannot be targeted directly.
Should consent tests run in a fresh browser profile?
Yes, every time. A consent cookie stored by an earlier run hides the banner and makes the page behave as if the visitor had already chosen, which masks exactly the pre-consent behaviour you are testing.
Does a passing test mean the banner is compliant?
No. A test shows what the site does in a given market at a given time. Whether that behaviour meets the law in that market is a legal assessment for your privacy counsel; the test gives them evidence to make it.
Sources & review
Last reviewed by the ARC Proxies team. Prices are read from the live catalog at build time.
- [1]EUR-Lex: Directive 2002/58/EC on privacy and electronic communications
- [2]European Data Protection Board: Report of the work undertaken by the Cookie Banner Taskforce
- [3]California Privacy Protection Agency: CCPA statute and regulations, effective January 1, 2026
- [4]Colorado Attorney General: Universal Opt-Out and the Colorado Privacy Act
- [5]W3C Privacy Working Group: Global Privacy Control (GPC)
QA & localisation
More on qa & localisation
Get started
Buy a gigabyte and try it on your own targets.
No subscription, no sales call. Code WELCOME15 takes 15% off your first purchase, and whatever you do not use is still there next quarter.