decodo · web-fetch skill
Setup guide one-time setup
Give Claude a backup key

Teach Claude to read the web that blocks it.

When a page blocks a normal fetch — a 403, a Cloudflare wall, a JavaScript shell — this skill routes Claude through Decodo and gets it back as clean Markdown.

⬇ Download the skill See it in action → decodo-web-fetch-skill.zip · ~5 KB
Free Decodo Web Scraping API plan: up to 2,000 requests, no credit card. Get your free token →
When you're ready to scale, use code AILUKE for 5% off Web Scraping API plans.Sponsored by Decodo · affiliate link
01

How it works

01
Claude fetches a page
normal direct fetch
→
02
Blocked or thin?
403 · "Just a moment" · empty shell
→
03
Decodo scrapes it
same repeatable API call
→
04
Clean Markdown → Claude
cached + timestamped
02

Set it up

1

Download the skill

Unzip it and drop the decodo-web-fetch folder into ~/.claude/skills/ for Claude Code, or ~/.codex/skills/ for Codex (then point the script path in SKILL.md at that folder). That's the whole install.

⬇ Download the skill SKILL.md + decodo_fetch.mjs
2

Add your Decodo token

Grab the Web Scraping API token from Decodo (free plan, no credit card), then save it as an environment variable:

echo 'export DECODO_AUTH_TOKEN="your-token-here"' >> ~/.zshrc
source ~/.zshrc
On camera: the token is a password — set it before you record, or blur the paste.
3

Test it

Ask Claude to fetch a page that blocks a plain fetch — you'll watch the direct attempt fail and Decodo return the full page:

Use the decodo-web-fetch skill to fetch
npmjs.com/package/ai with --compare.

Done. Claude now reaches for it on its own whenever a fetch looks blocked. ✅

+

Make it fully automatic optional

Want it hands-off? Paste this once. It adds a hook so Decodo fires the instant Claude's own fetch hits a wall — no decision needed.

the only prompt you need
Add an automatic Decodo fallback to my Claude Code settings. Create a PostToolUse hook on the WebFetch tool that: - reads the tool result from stdin - if it looks blocked or low-quality (HTTP 403/429/5xx, under ~1000 chars, or matches /just a moment|captcha|cloudflare|forbidden|access denied/i) - runs my skill on that URL: node ~/.claude/skills/decodo-web-fetch/scripts/decodo_fetch.mjs "<url>" --force-decodo --out ~/.decodo-cache - then returns a message telling you to read the resulting decodo.md as the page content Add it to this project's .claude/settings.json so I can test it before going global.
03

When Claude reaches for it

✓A fetch returns 403 / 429 / 5xx, or errors out
✓The page comes back under ~1,000 characters
✓The text screams blocked: Just a moment, captcha, cloudflare, forbidden
✓It's an npm /package/ page
✓You force it with --compare or --force-decodo
Try Decodo's Web Scraping API free: up to 2,000 requests, no credit card. Start on the free plan → Use code AILUKE for 5% off Web Scraping API plans.Sponsored by Decodo · affiliate link