No KYC — no ID, no selfie, no documents. Pay in crypto: BTC, USDT, USDC, ETH, SOL, LTC
Language: English
Get an API key

Guide · troubleshooting · facts read on 22 October 2026

Why AI agents get 403 errors when fetching web pages

A 403 is a site saying no. Since 2025 more sites say it to AI agents by default, and since September 2026 Cloudflare blocks agent traffic on many new ad-supported sites. Here is how to tell the causes apart and what you can legitimately do.

Last updated: · 6 min read

Quick answer

Why does my AI agent get a 403 when it fetches a page?

Usually because the site, or its CDN, refuses automated or AI traffic. Cloudflare has blocked AI crawlers by default for new domains since 1 July 2025, and from 15 September 2026 blocks "Agent" traffic on ad-supported pages of new domains. Other causes are rate limits and login walls. The fix is permission, not disguise. WebReaderAPI returns the site's answer, uncharged; no KYC, crypto.

Common causes of a failed web fetch

403 from a CDNBot management blocks AI crawlers or agents by default on many sites
403 or 401 from the siteLogin wall, members area, region rules or a hard block on known agents
429Too many requests in a short time; the site is rate limiting you
402The site asks for payment, for example through Cloudflare pay per crawl
200 but empty textThe page builds its content with JavaScript; not an error, but nothing to read
Refused before fetchingYour own tool honoured robots.txt and skipped the page

What changed on the web in 2025 and 2026?

Large infrastructure providers turned AI blocking into a default. Three dated changes explain most new 403s:

  • 1 July 2025: Cloudflare said it now blocks AI crawlers by default, asking every new domain at sign-up whether to allow them. The same day it launched pay per crawl in private beta, which answers with HTTP 402 and a price.
  • 1 July 2026: Cloudflare introduced three categories of AI traffic, Search, Agent and Training. "Agent" explicitly includes chat fetchers such as ChatGPT-User.
  • 15 September 2026: for new domains, Cloudflare's presets block Training and Agent traffic on pages that display ads; Search stays allowed.

An agent that fetches a page for a user falls in the Agent category. On ad-supported sites onboarded after September 2026, expect refusals.

How do I tell a block from a bug?

Read the status code and the body before changing anything.

What you seeLikely meaningNext step
403 with a challenge or "access denied" pageThe site or its CDN refuses automated trafficRespect it; look for an API or ask for access
402 with price headersThe site sells access per requestDecide whether to pay through its channel
429You sent too many requestsSlow down and retry later with backoff
401, or a login pageThe content needs an accountOut of scope for a public reader
200 with almost no textContent built by JavaScriptRender the page in a browser
Your tool says robots.txt disallowsThe site asked robots to skip itRespect it

Only the 429 and the empty JavaScript page are technical problems you can solve on your side. The others are decisions made by the site owner.

What can an agent builder legitimately do?

Work with the site, not around it. These steps fix many failures and keep your agent on the right side of site owners:

  1. Use the site's own channel. Many sites offer an API, an RSS or Atom feed, or a sitemap with the content you need.
  2. Ask for access. Site owners can allow a named bot in robots.txt or in their CDN settings. A clear User-Agent and a contact page make that easy.
  3. Render pages that are allowed but empty. For JavaScript-only pages, use a reader that runs a headless browser.
  4. Slow down and cache. Read the same page once, store it, and respect Crawl-delay and 429 responses.
  5. Pay where the site sells access. A 402 is an offer; take it through the site's channel or leave the page out.

Each of these leaves the site owner in control, which is also what keeps your agent useful over time.

What should I never do to get past a refusal?

Never disguise the agent or defeat a protection. Faking a browser's User-Agent, rotating IP addresses to escape a block, or solving challenge pages turns a polite client into a tool built to defeat access controls. In 2026, two US courts treated such techniques as circumvention in lawsuits over automated access to search results. The cases are still open and nothing is decided, but the risk is not theoretical.

It also breaks trust with the sites your users depend on. A refusal is information: record it, tell the user the page was not available, and move on to another source.

What do built-in fetch tools do when a site refuses?

Most return the error to the model, which then tells the user it could not read the page. OpenClaw's documentation, read on 22 October 2026, says its built-in web_fetch extracts content with Readability, does not run JavaScript and caps output at 20,000 characters; it can fall back to a fetch provider, and plugins can register new ones. The MCP reference fetch server obeys robots.txt for model-initiated fetches by default.

When these tools fail on pages that allow robots but need JavaScript, a reader that renders pages helps. When they fail because the site refused, no tool should change the answer.

What does WebReaderAPI return when a site refuses?

It returns the refusal clearly, and you are not charged. A page disallowed by robots.txt gives 403 blocked_by_robots. A site declaring ai-input=no gives 403 blocked_by_site_policy. A site that refuses the request in any other way gives 502 target_refused, with the site's own status code in target_status.

If a site refuses our request, we return its answer: we never solve CAPTCHAs, log in to accounts, or try to get around a block or a paywall. Your agent can show the user exactly why a page was skipped. The errors page lists every code with the retry rule for each.

Web fetch errors: common questions

Why does a page open in my browser but fail in my agent?

Because the site treats people and automated clients differently. Bot management can allow browsers and refuse agents, and some sites block AI traffic by default. The page is public to readers, not necessarily to robots.

Will retrying fix a 403?

Rarely. A 403 is a decision, not a glitch. Retry 429, timeouts and network errors with exponential backoff; treat 403 as final unless the site owner changes it.

Can WebReaderAPI read pages my agent cannot?

Only pages that allow robots but need a browser to show their text, because WebReaderAPI renders JavaScript when needed. It cannot read pages a site refuses, and does not try to.

How can my bot get allowed on a site?

Use a stable, descriptive User-Agent with a contact URL, follow robots.txt, keep request rates low, and ask the owner. Signed-agent schemes such as Web Bot Auth let sites verify who you are.

Sources (8)
  1. Press release: AI crawlers blocked by default — Cloudflare (2025-07-01)
  2. Introducing pay per crawl — Cloudflare (2025-07-01)
  3. Blog: Search, Agent and Training traffic options — Cloudflare (2026-07-01)
  4. Blog: new defaults for AI crawlers and agents — Cloudflare (2026-09-15)
  5. Web fetch tool — OpenClaw (read 2026-10-22)
  6. MCP fetch server — Model Context Protocol (read 2026-10-22)
  7. Reddit v. SerpApi LLC — Loeb & Loeb (2026-08)
  8. Google lawsuit against SerpApi dismissed — Search Engine Roundtable (2026-07-22)

From $0.07/1K pages · no KYC

Get an API key