Guides
Playwright proxy configuration/guides/playwright-proxyFixing 403 errors when scraping/guides/scraping-403Handling 429 rate limits/guides/scraping-429Python rotating proxies/guides/python-rotating-proxyMCP web scraping setup/guides/mcp-web-scraping
Use cases
Best API for Playwright/use-cases/playwrightWeb access for AI agents/use-cases/ai-agent
Providers
Bright Data/providers/bright-dataZenRows/providers/zenrowsOxylabs/providers/oxylabsApify/providers/apifyDecodo/providers/decodoScraperAPI/providers/scraperapi
Comparisons
Bright Data vs Oxylabs/compare/bright-data-vs-oxylabsZenRows vs ScraperAPI/compare/zenrows-vs-scraperapiBright Data + Playwright vs ZenRows + Playwright/compare/bright-data-vs-zenrows?workload=playwright
Benchmarks
Browser API benchmark · 30D/benchmarks/browser-apiScraping API benchmark · 30D/benchmarks/scraping-api
Troubleshooting

Handling 429 rate limits

Bound concurrency, honor retry instructions, and avoid retry storms.

FetchGauge technical notes · examples run only when you execute them

Respect the rate limit

A 429 response indicates too many requests. If present, follow the Retry-After response header; it can specify a delay or a date.

Use a bounded queue

Limit concurrent work and keep a retry budget. Back off after failures and stop after the budget is exhausted. Record original attempts and retries separately to expose their cost.

Measure useful work

Report successful documents alongside attempted requests. A high request count can hide repeated work and increasing latency.

References

HTTP 429 Too Many Requests

Compare with context

FetchGauge’s current benchmark data is simulated. Use the methodology to understand the intended protocol, and the calculator to explore its cost assumptions.