The One Thing That Makes Camoufox Different
Most proxy setups route your HTTP traffic and stop there — leaving the browser's timezone, locale and geolocation pointing at wherever your server sits. That mismatch (German IP, wrong timezone) is exactly the kind of incoherence that trips up access to public data.
Camoufox is a fingerprint-matching, Playwright-controlled Firefox that closes that gap. You give it a Playwright-style proxy dict, and with one extra option it makes the whole browser coherent with the proxy's exit IP:
proxy={
"server": "http://PROXY_HOST:PORT",
"username": "USER",
"password": "PASS",
}
geoip=True
geoip=True detects your German mobile endpoint's exit IP and aligns the browser's timezone, locale, language and geolocation to match — and spoofs the WebRTC IP to the proxy region. The proxy dict is standard Playwright; the geoip alignment is what Camoufox adds on top.
With a dedicated German endpoint there's no pool to rotate in code — you point Camoufox at one endpoint and rotate on demand at the proxy.
Before You Start
You need four values from your GermanProxy.io account:
- Host and port of your endpoint
- Username and password
The examples use PROXY_HOST, PORT, USER and PASS as placeholders — replace them with your own. Install Camoufox with the geoip extra, then download the browser build (pip installs only the wrapper):
pip install -U camoufox[geoip]
camoufox fetch # Windows
python3 -m camoufox fetch # macOS / Linux
Step 1 — Launch Through the Proxy (sync)
The proxy is a Playwright-style dict with exactly three keys — server, username, password. Add geoip=True to align the fingerprint to the IP:
from camoufox.sync_api import Camoufox
with Camoufox(
geoip=True,
proxy={
"server": "http://PROXY_HOST:PORT",
"username": "USER",
"password": "PASS",
},
) as browser:
page = browser.new_page()
page.goto("https://www.example.de")
print("Title:", page.title())
Every request from page now travels over your German mobile IP, and the browser's timezone, locale and geolocation match that IP's region.
Step 2 — The Same Setup, Async
For fetching many German pages concurrently, AsyncCamoufox takes the identical dict:
import asyncio
from camoufox.async_api import AsyncCamoufox
async def main():
async with AsyncCamoufox(
geoip=True,
proxy={
"server": "http://PROXY_HOST:PORT",
"username": "USER",
"password": "PASS",
},
) as browser:
page = await browser.new_page()
await page.goto("https://www.example.de")
print("Title:", await page.title())
asyncio.run(main())
Same proxy dict, same geoip option — only the async syntax around it changes.
Step 3 — Verify the IP Before You Scale
Confirm you're actually on a German mobile IP before building anything on top. Navigate to an IP-echo endpoint and read the body:
from camoufox.sync_api import Camoufox
with Camoufox(
geoip=True,
proxy={
"server": "http://PROXY_HOST:PORT",
"username": "USER",
"password": "PASS",
},
) as browser:
page = browser.new_page()
page.goto("https://api.ipify.org?format=text")
print("Egress IP:", page.inner_text("body"))
If it returns your own address, re-check that the proxy dict reached Camoufox(...) and that server, username and password are all present. A 407 points at the credentials — see how to fix 407 proxy authentication required. For a fuller checklist, see test your mobile proxy setup.
One gotcha:
geoip=Truecan raiseInvalidProxyif the proxy can't complete the exit-IP lookup. If you hit that, first confirm the endpoint reaches the open internet at all (Step 3 withoutgeoip), then re-enablegeoip.
Step 4 — Check for WebRTC and DNS Leaks
A proxy routes the browser's HTTP traffic, but two side channels can still expose your real address — and this is where Camoufox's approach is worth understanding:
- WebRTC opens UDP straight to STUN servers, bypassing an HTTP proxy entirely. Camoufox handles this by spoofing the WebRTC IP at the protocol level — it rewrites the ICE candidates rather than tunnelling them — and with
geoip=Truethe spoofed IP aligns to your German mobile region. See what a WebRTC leak is. - DNS can resolve names outside the tunnel. Camoufox mitigates DNS leaks via its bundled uBlock Origin prefetching. See what a DNS leak is.
Note the distinction: Camoufox spoofs and mitigates these channels — it does not route WebRTC or DNS through the proxy. For any flow where IP consistency matters, verify both with a leak checker (a page that reports IP, timezone and WebRTC together is ideal) so nothing contradicts your German mobile IP.
HTTP vs. SOCKS5 in Camoufox
Both protocols come with your endpoint, and Camoufox accepts either in server:
| Aspect | HTTP endpoint | SOCKS5 endpoint |
|---|---|---|
| Server value | http://HOST:PORT |
socks5://HOST:PORT |
| Credentials | username / password keys |
Supported (Firefox-based) |
| Typical use | Default for most work | Lower-level / non-HTTP traffic |
Because Camoufox is Firefox-based (not Chromium), it can carry credentials for both HTTP and SOCKS5. For most data-collection work the HTTP endpoint is simplest; reach for SOCKS5 only when you specifically need it. Background: SOCKS5 vs HTTP proxy.
Sticky Sessions vs. Rotation
With a dedicated German endpoint you control the IP at the proxy, not in your code:
- Sticky session: keep one Camoufox browser open across a multi-step flow — navigate, paginate, submit — and the German mobile IP (and the aligned fingerprint) stay the same.
- Rotation on demand: when you want a fresh IP, trigger rotation at the proxy and start a new browser. There's no per-request IP pool to manage.
See sticky sessions and IP rotation explained and dedicated vs shared mobile proxy.
Why a Mobile IP for Camoufox at All
Camoufox does the hard work of making a browser's fingerprint coherent — but a coherent fingerprint on a distrusted IP still draws friction, because the egress IP is judged separately. Datacenter ranges are widely distrusted; a real German mobile IP rides on carrier-grade NAT (CGNAT), the same shared-IP space thousands of ordinary phone users sit behind, which is why it carries higher IP reputation on German platforms. Camoufox's geoip alignment plus a real German mobile IP make the browser and the network tell the same story.
For the trade-offs against other IP types, see mobile vs residential vs datacenter proxy and what is a mobile proxy.
Scrape Responsibly
A mobile proxy and a fingerprint-matching browser improve reliability for legitimate data collection — they are not tools to circumvent access controls or platform rules. Keep your Camoufox crawl clean and defensible:
- Respect each site's terms and its
robots.txt; collect only public data you're permitted to use. - Throttle with realistic delays between navigations so you don't overload servers — a full browser is heavier than a plain HTTP client.
- Collect only what you need, and handle any personal data in line with the GDPR. See is web scraping legal in the EU.
- Be honest about who you are — don't impersonate a service or misuse a target's security mechanisms.
Whether mobile proxies themselves are lawful to use: are mobile proxies legal.
FAQ
How do I set a proxy in Camoufox?
Pass a Playwright-style dict to Camoufox or AsyncCamoufox: proxy={"server": "http://PROXY_HOST:PORT", "username": "USER", "password": "PASS"}. The keys are server, username and password. The server value accepts http:// and socks5:// schemes.
What does geoip=True do?
With geoip=True, Camoufox detects your proxy's exit IP and aligns the browser's timezone, locale, language and geolocation to match — and spoofs the WebRTC IP to the proxy region. Pass an explicit IP string to use that instead of auto-detecting.
Does Camoufox prevent WebRTC and DNS leaks?
Camoufox spoofs the WebRTC IP at the protocol level and mitigates DNS leaks via its bundled uBlock Origin prefetching. WebRTC is spoofed, not routed through the proxy; with geoip=True the spoofed IP aligns to your German mobile region. Verify both before you rely on it — see what a WebRTC leak is and what a DNS leak is.
Can Camoufox use a SOCKS5 mobile proxy?
Yes. The server value accepts socks5://PROXY_HOST:PORT as well as http://. Because Camoufox is Firefox-based, it can carry credentials for both. For most work the HTTP endpoint is simplest; use SOCKS5 when you specifically need it. See HTTP vs SOCKS5 proxies.
Do I need to run camoufox fetch?
Yes. pip installs only the Python wrapper. Run camoufox fetch (or python3 -m camoufox fetch) once to download the actual Camoufox browser build. Install the geoip dataset with the extra: pip install -U camoufox[geoip].
How do I verify the outgoing IP?
Navigate to an IP-echo endpoint and read the body: page.goto("https://api.ipify.org?format=text") then page.inner_text("body"). It should show your German mobile IP. A full leak checker also confirms timezone and WebRTC coherence.
Related guides
- Botasaurus Proxy Setup with a Dedicated German Mobile Proxy
- Patchright Proxy Setup: Route via German Mobile IPs
- FlareSolverr Proxy Setup: Requests via a German Mobile IP
CTA
Drive Camoufox on real German mobile IPs. Get a German mobile proxy — HTTP/SOCKS5/OpenVPN, sticky sessions, on-demand rotation, fair-use 20 GB/day, from a transparent EU provider. Browse the plans to get started.
Get a German mobile proxy: Real 4G/5G IPs from Germany, fair-use 20 GB/day — compare German mobile proxy plans or try a shared 5G German proxy.