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

Fixing 403 errors when scraping

Distinguish missing authorization, content blocks, and configuration failures.

FetchGauge technical notes · examples run only when you execute them

Understand the response

A 403 response means the server refused the request. Record the status, endpoint and a redacted response sample. Confirm that your account and application are permitted to access the resource.

Diagnose before retrying

Check credentials, permissions and the endpoint against its documentation. Compare with a request to a fixture you control. Do not repeatedly retry the same refused request.

When access is restricted, use an approved API or ask the site operator for access. Changing a provider does not grant permission.

Keep failures in the denominator

Count authorization and content-check failures separately in your error breakdown. A successful HTTP response containing a block page still fails a content-success check.

References

HTTP 403 Forbidden

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.