# Test a cookie consent banner from different countries

> Consent tools pick the banner by the visitor's IP location, so your office sees one version. Test each region from a fresh profile with an exit there.

Source: https://mosaicbrowser.com/blog/cookie-banner-by-country

## Checking your cookie banner from the countries that require it

Consent tools pick the banner by the visitor's IP location, so your office sees one version. Test each region from a fresh profile with an exit there.

![The banner your office sees proves nothing about Paris, beside a screenshot: importing a cookie jar into a Mosaic profile](https://mosaicbrowser.com/covers/cookie-banner-by-country.webp)

To test a cookie consent banner from different countries, you need one browser per region: each with an exit in that region, and each a stranger to the site. The banner is picked by where the visitor's IP address is, so the one on your office screen is the office's banner and says nothing about France or California. And once you have clicked Accept or Reject, the tool keeps your answer in a cookie, which spoils a second run in that browser.

## Why the banner changes by country

Inside a consent management platform the setup is a short table: a list of countries on the left, a banner template on the right. On each page view the tool takes the visitor's IP address, looks it up in a location database and finds the row it falls in. Three rows is typical. One is for the EU, the EEA and the UK, where the banner is opt-in and no non-essential cookie is set until the visitor agrees, because European law asks for consent first. One is for California and the US states with similar laws, where the visitor gets an opt-out link for the sale or sharing of their data. The last row catches everybody else with a notice, or with nothing.

That makes three behaviours on one site, plus a fourth for when the lookup fails and the tool falls back to whatever its default is. Whoever set it up sees exactly one of them every day, the one for their own office address.

The country is not the only input. Plenty of banners pick their translation from the browser's `Accept-Language` header rather than from the location. And the first time a visitor chooses, the tool stores a consent cookie and stops asking. Your own browser made that choice long ago.

Mosaic is a desktop app

Email yourself the link and open it on your computer.

[How it works: Provider minting](https://mosaicbrowser.com/features/proxy-providers)

## What to check in each region

Seeing the banner is the easy part. We write down six things per region:

1. The kind of banner: opt-in with Accept and Reject, an opt-out link, or a plain notice.
2. Its language, beside the language the browser asked for.
3. Every cookie present before anyone clicks. Most real faults sit here. An analytics or ad tag that fires on load has already set its cookies by the time the question is on screen.
4. The cookie list after Reject and a reload. In an opt-in region only what the site classes as strictly necessary should be left.
5. Whether the choice survives the next page, and the next visit.
6. Clicks to Reject against clicks to Accept. European regulators have said for years that no should cost the visitor no more effort than yes, so a Reject tucked inside a settings panel fails on sight.

Then go back to an empty jar, press Accept, and check that the tags you expect actually fire.

## Why a VPN and a private window give you half the answer

A VPN changes the IP, the input the consent tool reads first, and a private window starts without a consent cookie. So far so good. But neither changes `Accept-Language`, so an English-language browser on a French exit is shown the banner for a French visitor who set their browser to English. Somebody like that does visit. You meant to test somebody else.

Two smaller traps catch people. The consent tool has its own location database, and it can place an exit somewhere other than where your VPN or proxy seller says it is; a "German" address read as Austrian means you tested the wrong rule. And if the site picks the banner on the server and caches pages at the edge, you may be served a copy built for whoever visited before you. When a result looks wrong, check the exit's country first and the cache second.

## Running the test in Mosaic

In Mosaic each region gets its own profile, and each profile starts with an empty cookie jar, so the Paris test never carries the consent cookie from the London one.

1. Save your proxy seller as a [provider](https://mosaicbrowser.com/features/proxy-providers) from one pasted gateway line. Each profile then mints its own session.
2. Create one profile per region and pick the country as you create it. For a US state, pick the state as well, if the seller's line format has a word for one. A pick the seller cannot spell is refused by name, not dropped.
3. A profile created against a checked proxy is drawn for that exit, so its timezone, language and geolocation agree with it. The proxy check also prints the exit's measured country. Keep that next to your notes, because it is what you compare the banner with.
4. Start the profile, open the site, and click nothing.
5. In the profile editor, open Cookies and press Export current. With the browser running, that reads the live jar over DevTools and puts it in the box on that tab: the cookies the first page load set before consent. Copy the list out. A script gets the same list from `GET /api/v1/profiles/:id/cookies`.
6. Press Reject, reload, export again, and compare the two lists.
7. For a second run from scratch, stop the profile and clear its cookies with `DELETE /api/v1/profiles/:id/cookies`. The route refuses while the browser is open, because Chromium would write the jar straight back when it closed.

![The Cookies tab of a Mosaic profile, listing stored cookies by domain](https://mosaicbrowser.com/shots/cookies.png)
*A profile's cookie jar, read from the browser itself*

One limit is worth knowing. A profile's language follows its exit only before the first run, so for a clean language test make a new profile per region instead of moving one profile from exit to exit. The reasons, and what Chrome does with the language list, are in [testing a site in another language](https://mosaicbrowser.com/blog/accept-language-testing).

The same setup answers the next questions too: what each market's storefront shows ([Shopify Markets, country by country](https://mosaicbrowser.com/blog/shopify-markets-geolocation-test)) and whether checkout works for a buyer who has never visited ([testing your own checkout as a customer](https://mosaicbrowser.com/blog/test-checkout-as-customer)). Use it on sites you run or are paid to test.

## Questions

### How do I see the cookie banner a visitor in another country sees?

Use a browser with an IP address in that country and no history on the site. The consent tool reads where the address is and looks for its own cookie from an earlier visit, and both have to be right: an exit in the country, and a jar with nothing in it.

### Is a VPN enough to test a geo-targeted cookie banner?

For the location, mostly yes, since the IP is what the tool looks up. It leaves two things as they were: the consent cookie your browser stored on an earlier visit, and the Accept-Language header, which is where many banners get their translation from.

### Why does my cookie banner show in the wrong country?

Usually because the consent tool's location lookup places the address somewhere other than you expected, or because a cached copy of the page was built for another region. Check the exit's country with a proxy check and test with caching in mind.

### What should I check besides whether the banner appears?

Which cookies exist before anyone clicks, whether rejecting really leaves the analytics and advertising cookies unset, and whether the choice survives a reload. The banner showing is the easy part.

## Related

[Checking what Shopify Markets shows a buyer in each country](https://mosaicbrowser.com/blog/shopify-markets-geolocation-test): To test Shopify Markets geolocation, make the exit, timezone and language name one country: Shopify reads the IP for country and the browser for language.

[Testing your own checkout as a customer who has never visited](https://mosaicbrowser.com/blog/test-checkout-as-customer): To test a Shopify checkout as a customer, pay with a test method from a browser that has never seen your store: no admin login, no saved address, no cart.

[Testing a site in another language means more than one header](https://mosaicbrowser.com/blog/accept-language-testing): Set Accept-Language alone and the page still formats dates for your own machine. A real language test moves the header, navigator.languages and Intl.

[Provider accounts: one gateway line, one exit per profile](https://mosaicbrowser.com/features/proxy-providers): Paste your proxy seller's gateway line once and Mosaic mints a separate session for every profile, so each one browses from its own exit address.

[Mosaic for e-commerce sellers running several stores](https://mosaicbrowser.com/use-cases/e-commerce-sellers): Keep each store you are entitled to run in its own browser profile, with its own exit, cookies, logins and downloads, so stores never mix.



[Proxies for ad verification: which type to use](https://mosaicbrowser.com/guides/proxies-for-ad-verification): The best proxies for ad verification are residential, in the ad's target city, with one sticky session per profile. Datacenter exits fit link checks only.

[How to check your ads in different countries](https://mosaicbrowser.com/guides/check-your-ads-in-different-countries): Check your ads in different countries with Google's preview tool and Meta's Ad Library, then open the landing page from a browser that really sits there.

## Mosaic, on your own computer

The browser this blog is about: its own Chromium, fingerprints from real machines and a proxy exit per profile. Free holds 3 profiles. Pro is $49 a month for any number.

Mosaic is a desktop app

Email yourself the link and open it on your computer.
