Browser automation — headless Chrome, Playwright, Puppeteer, Selenium — connects to a proxy differently from a regular HTTP client: the address sits in the driver's launch parameters, not the OS settings. A mistake here gives away a bot before any antidetect setting kicks in, and the automation burns through far more traffic than expected. Here is how a channel fits into the browser—driver—network chain, where the extra gigabytes come from, and what cuts them.
How a proxy connects to a headless browser and driver
A headless browser's address is set in launch parameters, not system-wide: for Chromium it is the --proxy-server=host:port flag, for Playwright and Puppeteer a proxy field in the context options, for Selenium a Proxy object in the driver's capabilities. A system proxy wraps all machine traffic, background processes included; a driver-level one applies only within one browser session — what dozens of parallel profiles with different addresses need.
Authentication works one of two ways: username and password in the proxy URL (works in Playwright and Puppeteer via context parameters, but not when Chromium launches with a single flag), or a whitelisted IP for the automation server. The second is more reliable for a CI runner with a fixed outbound address — no password to keep in environment variables.
Why automation burns more traffic than it looks like
A person scrolling a page sees only the top of the screen. A driver loads it in full by default: fonts, analytics and ad-network scripts, retargeting pixels, support-chat websockets — none needed to check a price or a line of text, yet loaded with the target content anyway.
On a product page the useful data — HTML with price and specs — weighs tens of kilobytes, while the remaining 2–5 MB is images, fonts and third-party scripts the task never asked for. That gap is the overpayment for traffic that never reaches the result. A step-by-step breakdown of what to disable is in how to cut proxy GB usage.
Disabling media — the main way to save
The biggest lever is blocking whatever never ends up in the parsing result at the driver level, not switching to a cheaper channel. In Playwright and Puppeteer that means intercepting requests and aborting the image, media and font types, sometimes stylesheet too. Selenium with Chrome gets the same effect through a profile preference that disables images.
The result is a 3–10x drop in page weight, depending on how many images and videos it originally had. For text-only tasks — price, availability, order status — blocking media does not touch the result, since the data lives in the HTML, not the pictures. Chasing the cheapest channel instead often backfires — see cheap versus expensive proxies.
Matching locale, time zone and request language to the address geo
Switching the IP does not change the browser's locale, time zone or Accept-Language header. If the address is American while the context reports Europe/Moscow and a different language, the site gets contradictory signals. Some platforms serve content by header language rather than IP, so the mismatch changes the output itself, not just the suspicion score.
In Playwright and Puppeteer, locale, timezoneId and headers are set in the context options at page creation and must be synced with the proxy's geo on every launch, not once for all profiles. A checklist for the "profile plus channel" pairing, including WebRTC and DNS checks, is in proxies for an antidetect browser, step by step.
Parallel profiles and a separate port per profile
When automation runs several profiles at once, one shared port creates two problems. Network: sessions split bandwidth and the concurrent-stream limit, driving up timeouts and retries. Behavioral: if the provider swaps the outbound IP on the same port between reconnects, the site sees the address change mid-session and flags an anomaly.
The rule: a separate port and a session-stable address for every parallel profile. That means buying more channels but removes both sources of extra retries. Managing the address per port programmatically, without rebuilding the config by hand, is what API rotation is for — see how to set up IP rotation via API.
Frequently Asked Questions
Can the same proxy serve several headless profiles at once?
Technically yes, but it is not worth it: parallel sessions on one port split bandwidth and trigger timeouts, and a site may read alternating requests from one address as suspicious. Use a separate port per profile.
Won't disabling images and fonts break data parsing?
No, as long as the needed data lives in the HTML rather than an image or canvas element. Test once with media on and once off and compare — for prices, availability and text fields there is usually no difference.
How do I verify the browser's locale and time zone match the proxy's geo?
Any browser fingerprint checking service shows the IP, country, time zone and language the site sees. Build that check into the automation script as a first step, not something run manually now and then.
A separate port per automation profile, whitelisted-IP auth for CI, and a channel picked for the task — residential and mobile addresses billed by traffic, datacenter ones billed monthly — all in the proxy section.