Direct Answer
Firecrawl and Crawl4AI both support bring-your-own-proxy. Point self-hosted Firecrawl at your German mobile endpoint with PROXY_SERVER, or pass it to Crawl4AI's BrowserConfig via proxy_config. With one dedicated endpoint you need no rotation pool — set host, port and credentials once, then rotate on demand at the proxy.
Why Mobile IPs Matter for AI Scrapers
Firecrawl and Crawl4AI are built to turn live web pages into clean, LLM-ready Markdown for RAG pipelines, agents and AI-data products. Both render JavaScript with headless Chromium, so the page they fetch looks like a real browser visit — and the IP behind that visit decides how often it succeeds.
A German mobile IP is a carrier-grade NAT (CGNAT) address shared by thousands of real subscribers, which is why German sites tend to treat it as ordinary household traffic rather than a datacenter range. For AI-data collection that targets German e-commerce, news, SERPs or app endpoints, that reputation is the difference between clean Markdown and partial pages. The mechanics are covered in what is a mobile proxy and CGNAT — how multiple users share one IPv4 address, and the reputation angle in what is IP reputation.
GermanProxy.io is an IT-routing / proxy service: you get a host, port and credentials — no hardware, no client to install. The catalog is 5G-only, four products across Blue Premium Mobile Network and Red Premium Mobile Network, each as a dedicated or shared connection, with HTTP + SOCKS5, sticky sessions, on-demand rotation, an OpenVPN config and fair-use 20 GB/day.
Before You Start
You will 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. The single proxy URL form everything below builds on is:
http://USER:PASS@PROXY_HOST:PORT
Firecrawl — Bring-Your-Own-Proxy (self-hosted)
Self-hosted Firecrawl reads proxy settings from environment variables, so every page it scrapes routes through your endpoint without touching the request code. In your Firecrawl .env (or your container environment):
PROXY_SERVER=http://PROXY_HOST:PORT
PROXY_USERNAME=USER
PROXY_PASSWORD=PASS
Restart the Firecrawl service so the workers pick up the new environment, then call the API exactly as before — the proxy is applied underneath:
from firecrawl import Firecrawl
# Self-hosted instance. The constructor still requires an api_key argument,
# so pass any placeholder if your instance runs without auth.
firecrawl = Firecrawl(api_url="http://localhost:3002", api_key="self-hosted")
result = firecrawl.scrape("https://www.example.de", formats=["markdown"])
print(result.markdown[:500])
Two honest notes: the hosted Firecrawl Cloud API uses its own proxy infrastructure, so bring-your-own-proxy is a self-hosted feature — run the open-source service if you want your traffic on your German mobile IP. And because one dedicated endpoint is a single stable IP, you don't configure a pool — you rotate on demand at the proxy when you want a fresh IP.
Crawl4AI — Mobile Proxy via Playwright
Crawl4AI drives Playwright under the hood, so you set the proxy in BrowserConfig with a proxy_config dict. Every page the crawler renders then routes through your German mobile IP:
import asyncio
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig
browser_config = BrowserConfig(
proxy_config={
"server": "http://PROXY_HOST:PORT",
"username": "USER",
"password": "PASS",
},
headless=True,
)
async def main():
async with AsyncWebCrawler(config=browser_config) as crawler:
result = await crawler.arun(
url="https://www.example.de",
config=CrawlerRunConfig(),
)
print(result.markdown[:500])
asyncio.run(main())
Keep credentials out of source: read them from environment variables (os.environ["PROXY_USER"]) rather than hard-coding them. If you already drive Playwright directly, the same proxy object pattern from mobile proxy with Python requests & Playwright applies.
Firecrawl vs. Crawl4AI — How They Take a Proxy
Both are bring-your-own-proxy friendly; they differ in where you wire it in.
| Criterion | Firecrawl (self-hosted) | Crawl4AI |
|---|---|---|
| Where the proxy goes | PROXY_SERVER env var |
BrowserConfig.proxy_config |
| Auth | PROXY_USERNAME / PROXY_PASSWORD |
username / password keys |
| Render engine | Headless Chromium | Playwright (Chromium) |
| Proxy applies to | Every worker fetch | Every crawler page load |
| Hosted-API proxy | Provider-managed (not BYOP) | N/A — you run it yourself |
| Best fit | Managed scrape/crawl API for pipelines | Embedded crawler inside Python code |
For one dedicated German endpoint, neither needs a rotation library — that complexity exists for large anonymous pools. See dedicated vs shared mobile proxy for which product fits your concurrency.
Verify the IP First
Before you scale a crawl, point either tool at an IP-echo endpoint (for example https://api.ipify.org?format=json) and confirm it returns a German mobile IP. If it returns your own address, re-check the proxy URL and that the credentials reached the worker. A quick end-to-end check is described in test your mobile proxy setup, and you can confirm there is no WebRTC leak or DNS leak from the headless browser while you're at it.
Sticky Sessions vs. Rotation
- Sticky session: keep the same German mobile IP across a multi-step crawl — useful when a flow spans login, pagination and detail pages.
- Rotation on demand: request a fresh IP at the proxy when you want to spread load across a long run.
Tune your crawler's concurrency and delay to a human-reasonable rate; AI scrapers can fire fast, and restraint keeps both your data and the target server healthy. The trade-off is explained in sticky sessions and IP rotation, and the IP-type comparison in mobile vs residential vs datacenter proxy.
Scrape Responsibly (authorized use only)
A mobile proxy improves reliability for legitimate, authorized data collection — it is not a tool to circumvent access controls, platform rules or anti-abuse systems. For AI-data work especially, keep the pipeline clean and defensible:
- Respect
robots.txtand each site's terms of service before you crawl it for training data, RAG or analysis. - Throttle concurrency and add delays so you never overload a server.
- Collect only what you need, and handle any personal data in line with the GDPR — anonymise or drop it where you can.
- Identify your crawler honestly with a truthful user agent, not a misleading one.
- Keep a lawful basis for the data you store and feed into a model.
Whether a given crawl is permitted is a legal question, not a technical one — start with is web scraping legal in the EU and are mobile proxies legal.
FAQ
Does Firecrawl support a custom proxy (bring-your-own-proxy)?
Self-hosted Firecrawl reads proxy settings from environment variables (PROXY_SERVER, PROXY_USERNAME, PROXY_PASSWORD), so you can route every fetch through your own German mobile endpoint. The hosted Firecrawl Cloud API uses its own proxy infrastructure; bring-your-own-proxy is a self-hosted feature.
How do I use a mobile proxy with Crawl4AI?
Crawl4AI runs on Playwright, so you pass your proxy in BrowserConfig via proxy_config with server, username and password. Every page the crawler loads then routes through your German mobile IP. A single dedicated endpoint needs no rotating-pool setup.
Do I need a rotating proxy pool for AI scraping?
Not with a dedicated endpoint. Pool rotation exists to pick an IP from many; one dedicated German mobile endpoint removes that need. Rotate on demand at the proxy, or use sticky sessions for multi-step flows. See sticky sessions and IP rotation.
HTTP or SOCKS5 for Firecrawl and Crawl4AI?
Both tools drive headless Chromium, which speaks HTTP(S) proxies natively, so HTTP is simplest. Use SOCKS5 where you need it at the network layer — see SOCKS5 vs HTTP proxy.
Is scraping for AI training or RAG legal?
Collecting public data for legitimate purposes is widely practised, but it is bound by each site's terms, robots.txt and the GDPR for any personal data. A mobile proxy improves reliability for authorized collection — it is not a tool to bypass access controls. See whether scraping is legal in Europe.
Related guides
- LLM Web Scraping: Extract Structured Data From German Sites
- Running AI Agents on German Sites: A Reliability Playbook
- Async Web Scraping in Python Through One Mobile IP
- Chrome DevTools MCP with a Proxy: Route Chrome via Mobile IP
CTA
Feed your AI pipeline clean German data on real mobile IPs. Get your German mobile endpoint — HTTP/SOCKS5/OpenVPN, sticky sessions, on-demand rotation, fair-use 20 GB/day. Browse the plans to get started. New to the build? Start with efficient web scraping with mobile proxies or the dedicated angle for mobile proxies for AI agents.
Get a German mobile proxy: Real 4G/5G IPs from Germany, fair-use 20 GB/day — compare German mobile proxy plans or get a dedicated proxy on the Blue network.