Skip to content

Use case · Ad verification and brand safety

Proxies for ad verification and brand safety

Check your campaign pages from a carrier or residential connection, with the browser settings and test conditions recorded alongside the result.

The job

What this actually is.

Ad verification checks the creative, placement context and landing page in a workflow you are authorised to test. Record the page or creative reference, final URL, capture time, selected country, browser settings and relevant consent state. Compare what loaded with the approved campaign requirements.

A proxy changes the network route used for the check. It does not select an audience, recreate a user's account history or guarantee that a particular ad will be served. Use the advertising platform's approved preview or test mode for repeatable checks, and open the permitted landing page directly when that is what you need to inspect.

Which pool

Mobile or residential for this job.

Choose mobile 4G/5G when the test needs a carrier-network exit. Set the browser or device separately: a mobile IP does not turn a desktop browser into a phone or provide access to an in-app placement. Check the live locations list for the mobile country required by the test.

Choose residential when the test calls for a peer-network connection. The pool includes home broadband and mobile peer connections. Use the same locale, viewport, consent state and page inputs when comparing it with mobile. Both shared pools draw from one GB balance; availability changes, so check the country before starting a run.

Mobile 4G/5G proxies by the GB · Residential proxies by the GB · Check countries online now

Settings

Rotation, and the username that sets it.

Recommended rotation modes for Ad verification and brand safety, with the username each one needs
ModeUsername
Sticky sessionKeep a named proxy session for one permitted multi-step check, while preserving the browser state separately. The device may disconnect and the IP may change, so record an interrupted check as incomplete.USERNAME-mbl-gb-sid-check12-rot-sticky
Per-connection rotationUse for checks that do not require continuity of the proxy session. Rotation does not clear cookies, reset consent or turn the request into a different person.USERNAME-mbl-gb-rot-ondemand
Timed rotation (20-minute example)Use only when the test tolerates scheduled exit changes. A timer can change the route during a check; it does not wait for the creative or landing page to finish.USERNAME-peer-nl-rot-auto20

USERNAME stands for the account part of your username; it and the password appear in the dashboard after a fulfilled purchase. Swap the two-letter country code for an available market. Every token is listed in the docs.

A sticky session keeps the same device while available; its IP may still change. A peer device can disconnect too. If a sequence breaks, mark it incomplete and repeat it within the site’s request limits.

Compare rotating and sticky sessions · Why a sticky session can change IP

Capture a permitted campaign landing pagetypescript
import { chromium } from 'playwright';

// One named proxy session for this landing-page check; browser state is separate.
const account = process.env.PROXY_ACCOUNT;
const password = process.env.PROXY_PASSWORD;
const target = process.env.CAMPAIGN_TEST_URL;
if (!account || !password || !target) {
  throw new Error('Set PROXY_ACCOUNT, PROXY_PASSWORD and your permitted CAMPAIGN_TEST_URL.');
}
const url = new URL(target);
if (!['https:', 'http:'].includes(url.protocol)) throw new Error('Use an HTTP or HTTPS test URL.');
const session = `check${Date.now().toString(36)}`;
const browser = await chromium.launch();
try {
  const context = await browser.newContext({
    proxy: { server: 'http://gw.portproof.org:7000', username: `${account}-mbl-gb-sid-${session}-rot-sticky`, password },
    locale: 'en-GB',
    viewport: { width: 390, height: 844 },
    isMobile: true,
  });
  const page = await context.newPage();
  const response = await page.goto(url.href, { waitUntil: 'domcontentloaded', timeout: 30_000 });
  if (!response?.ok()) throw new Error('The permitted test page did not return a successful response.');
  await page.screenshot({ path: `${session}.png`, fullPage: true, timeout: 30_000 });
} finally {
  await browser.close();
}

Use your own permitted landing page or an approved test page. This captures its rendered appearance; it does not prove that a live ad was served to an audience. Close the browser after capture and measure the run before scheduling more checks.

Cost

How to think about the GB.

Measure the complete permitted check: initial page, creative, redirects and any landing page opened by the test. Video, refreshes and background requests can add traffic while the page remains open. Use the same capture conditions in the sample that you plan to use in the scheduled run.

Close the browser context when the evidence has been captured. Keep the resources required to verify the creative and its placement; removing them can invalidate the result. Count retries in the sample and compare the estimate with account usage before increasing the number of checks.

Plan bandwidth from your sample and read what counts as proxy traffic. Before removing resources, check what asset blocking can break.

Traffic is EUR 4.50 per GB for a small order and EUR 2.50 per GB at the largest step, on either pool. The paid trial is 0.5 GB for EUR 2.90, once per customer and subject to eligibility. View pricing and traffic validity.

Limits

What we will not help with.

Test campaign pages and placements only through workflows you are authorised to use. Use approved preview or test modes and follow the advertising platform's rules. Do not generate artificial impressions or clicks. Portproof provides country-level proxy routing; it does not guarantee a city, a particular audience or that an ad will be delivered.

Read the acceptable-use policy before ordering. You accept it at checkout.

Start

Start with a small order.

Proxies for ad verification and brand safety · Portproof