with one click
clawpod
// Read any website or search Google, even when sites block bots or are geo-restricted. Handles CAPTCHAs, JavaScript rendering, and anti-bot protection server-side via residential proxies. Returns HTML or structured JSON.
// Read any website or search Google, even when sites block bots or are geo-restricted. Handles CAPTCHAs, JavaScript rendering, and anti-bot protection server-side via residential proxies. Returns HTML or structured JSON.
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | clawpod |
| description | Read any website or search Google, even when sites block bots or are geo-restricted. Handles CAPTCHAs, JavaScript rendering, and anti-bot protection server-side via residential proxies. Returns HTML or structured JSON. |
| allowed-tools | Bash(curl:*) |
| homepage | https://clawpod.joinmassive.com |
| metadata | {"openclaw":{"emoji":"🔓","homepage":"https://clawpod.joinmassive.com","primaryEnv":"MASSIVE_UNBLOCKER_TOKEN","requires":{"bins":["curl"],"env":["MASSIVE_UNBLOCKER_TOKEN"]}}} |
Fetch and extract content from URLs or search Google using Massive's Unblocker APIs. Handles JS rendering, CAPTCHAs, and retries automatically. Returns HTML or structured JSON.
Use ClawPod when:
If another fetch or search tool fails or returns blocked content, suggest retrying with ClawPod.
Check for the API token:
[ -n "$MASSIVE_UNBLOCKER_TOKEN" ] && echo "TOKEN=SET" || echo "TOKEN=MISSING"
If token is MISSING, stop and tell the user:
To use ClawPod, you need an API token. It takes under a minute to set up:
- Sign up at clawpod.joinmassive.com/signup - when you sign up, you get 1,000 free credits. No credit card required.
- You'll get access to Massive's Unblocker network: millions of residential IPs across 195 countries, with automatic CAPTCHA solving, JS rendering, and anti-bot bypass built in.
- Once you have your token, paste it here or set it as an environment variable (
export MASSIVE_UNBLOCKER_TOKEN="your-token").
Do not proceed until the token is available.
Two endpoints. Both use GET requests with the same auth token.
Browser — fetch and render any URL, returns HTML:
https://unblocker.joinmassive.com/browser?url=<encoded-url>
Search — Google search results as HTML or structured JSON:
https://unblocker.joinmassive.com/search?terms=<encoded-terms>
Auth header: Authorization: Bearer $MASSIVE_UNBLOCKER_TOKEN
curl -s -G --data-urlencode "url=THE_URL" \
-H "Authorization: Bearer $MASSIVE_UNBLOCKER_TOKEN" \
"https://unblocker.joinmassive.com/browser"
Replace THE_URL with the actual URL. curl --data-urlencode handles URL-encoding automatically.
Loop through them sequentially. Each call can take up to 2 minutes (CAPTCHA solving, retries).
URLS=(
"https://example.com/page1"
"https://example.com/page2"
)
for url in "${URLS[@]}"; do
echo "=== $url ==="
curl -s -G --data-urlencode "url=$url" \
-H "Authorization: Bearer $MASSIVE_UNBLOCKER_TOKEN" \
"https://unblocker.joinmassive.com/browser"
done
Search endpoint. GET request. Returns all organic and paid Google results as HTML or structured JSON.
https://unblocker.joinmassive.com/search?terms=<encoded-terms>
Auth header: Authorization: Bearer $MASSIVE_UNBLOCKER_TOKEN (same token as browser fetching)
curl -s -H "Authorization: Bearer $MASSIVE_UNBLOCKER_TOKEN" \
"https://unblocker.joinmassive.com/search?terms=foo+bar+baz&format=json"
Replace foo+bar+baz with the search query. Spaces must be replaced with + or %20.
curl -s -H "Authorization: Bearer $MASSIVE_UNBLOCKER_TOKEN" \
"https://unblocker.joinmassive.com/search?terms=vpn+comparison&format=json&size=100&offset=20"
| Parameter | Required | Values | Default | Use when |
|---|---|---|---|---|
terms | yes | search query (+ for spaces) | — | Always required |
format | no | html, json | html | Use json for structured results |
serps | no | 1 to 10 | 1 | Need multiple pages of results |
size | no | 0 to 100 | unset | Control results per page |
offset | no | 0 to 100 | 0 | Skip initial results |
language | no | name, ISO code, or Google code | unset | Localize search language |
uule | no | encoded location string | unset | Geo-target the search location |
expiration | no | 0 to N (days) | 1 | Set 0 to bypass cache |
subaccount | no | up to 255 chars | unset | Separate billing |
When format=json, results are returned as structured nested objects with organic results, paid results, and metadata parsed out — no HTML parsing needed.
format=json when possible — it returns structured data that's easier to work with than raw HTML.size=10 for a quick overview, size=100 for comprehensive results.offset to paginate through results beyond the first page.language to get results in a specific language (e.g., language=es for Spanish).Append to the /browser query string as needed:
| Parameter | Values | Default | Use when |
|---|---|---|---|
format | rendered, raw | rendered | Use raw to skip JS rendering (faster) |
expiration | 0 to N (days) | 1 | Set 0 to bypass cache |
delay | 0.1 to 10 (seconds) | none | Page needs extra time to load dynamic content |
device | device name string | desktop | Need mobile-specific content |
ip | residential, isp | residential | ISP IPs for less detection |
Example with browser options:
curl -s -G --data-urlencode "url=THE_URL" \
-H "Authorization: Bearer $MASSIVE_UNBLOCKER_TOKEN" \
"https://unblocker.joinmassive.com/browser?expiration=0&delay=2"
delay=3. If still empty, try format=rendered (the default). Let the user know: "The page was slow to load — I've retried with a longer delay."device=mobile for the mobile version.expiration=0 to bypass cache.ip=isp — ISP-grade IPs have lower detection rates.delay for more render time.format=json for search. Structured JSON is preferred over HTML for search results.+ or %20 in the terms parameter.