
On this page
HTTP 403 Forbidden means the server understood the request but refuses to fulfill it. Unlike 401 (which means "you're not authenticated"), 403 says "we know who you are and the answer is still no." For scrapers, 403 is the canonical anti-bot block — the server has decided this request looks automated and has cut it off before serving the page.
Quick facts
| Status code | 403 |
|---|---|
| Category | 4xx Client Error |
| Common causes (scraping) | Bot detection, missing/wrong headers, blocked IP, geo restriction |
| Common causes (general) | Insufficient permissions, expired auth, IP allowlist |
| Typical body | "Access Denied", "Forbidden", or a Cloudflare challenge page |
Related terms
Concept map
How 403 Status Code (403 Forbidden Error) connects
The terms most directly tied to this one. Hover a node to see its neighbours, click to preview, drag to rearrange.
Tools & solutions for this topic
Frequently asked questions
What's the difference between 401 and 403?
401 Unauthorized means you haven't authenticated — log in and try again. 403 Forbidden means you're authenticated (or no auth is required) but still not allowed. For unauthenticated scraping, 403 is the relevant one.
Does a 403 mean my IP is banned?
Sometimes. The fastest way to check is to send the same request through a different IP. If the second attempt succeeds, the first IP is on a block list. If it still fails, the block is based on something other than the IP.
Can changing User-Agent fix a 403?
It fixes the most naive bot rules but not modern bot detection. Real systems check User-Agent against TLS, header order, JavaScript-derived signals, and behavior. A new UA alone moves the needle a little; aligning UA with everything else moves it a lot.
Is a 403 the same as a Cloudflare block?
Cloudflare blocks usually return 403 with their challenge page in the body, but 403 can come from many sources. Look at the response body and headers to identify which vendor (Cloudflare, Akamai, DataDome, PerimeterX) is doing the blocking.
Last updated: 2026-05-26