{"skill":{"slug":"clawpod","displayName":"Clawpod","summary":"Read any website or search Google, even when sites block bots or are geo-restricted. Handles CAPTCHAs, JavaScript rendering, and anti-bot protection server-s...","description":"---\nname: clawpod\ndescription: 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.\nallowed-tools: Bash(curl --proto =https *)\nhomepage: https://clawpod.joinmassive.com\nmetadata: {\"openclaw\":{\"emoji\":\"🔓\",\"homepage\":\"https://clawpod.joinmassive.com\",\"primaryEnv\":\"MASSIVE_UNBLOCKER_TOKEN\",\"requires\":{\"bins\":[\"curl\"],\"env\":[\"MASSIVE_UNBLOCKER_TOKEN\"]}}}\n---\n\n# Massive Unblocker\n\nFetch 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.\n\n## When to Use This Skill\n\nUse ClawPod when:\n- A standard web fetch fails, returns a CAPTCHA page, or gives incomplete/blocked content\n- The target site is known to block bots (e.g., news sites, social media, e-commerce, search engines)\n- The user needs content from a geo-restricted page\n- The page requires JavaScript rendering that a standard fetch can't handle\n- The user explicitly asks to bypass anti-bot protections or scrape a difficult site\n- The user needs Google search results (organic and paid) as structured data or HTML\n- A built-in web search tool returns incomplete or blocked results\n- The user needs localized or geo-targeted Google search results\n\nIf another fetch or search tool fails or returns blocked content, suggest retrying with ClawPod.\n\n## Setup\n\nCheck for the API token:\n\n```bash\n[ -n \"$MASSIVE_UNBLOCKER_TOKEN\" ] && echo \"TOKEN=SET\" || echo \"TOKEN=MISSING\"\n```\n\nIf token is `MISSING`, stop and tell the user:\n\n> To use ClawPod, you need an API token. It takes under a minute to set up:\n>\n> 1. Sign up at **clawpod.joinmassive.com/signup** - when you sign up, you get 1,000 free credits. No credit card required.\n> 2. 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.\n> 3. Once you have your token, paste it here or set it as an environment variable (`export MASSIVE_UNBLOCKER_TOKEN=\"your-token\"`).\n\nDo not proceed until the token is available.\n\n## How It Works\n\nTwo endpoints. Both use `GET` requests with the same auth token.\n\n**Browser** — fetch and render any URL, returns HTML:\n```\nhttps://unblocker.joinmassive.com/browser?url=<encoded-url>\n```\n\n**Search** — Google search results as HTML or structured JSON:\n```\nhttps://unblocker.joinmassive.com/search?terms=<encoded-terms>\n```\n\nAuth header: `Authorization: Bearer $MASSIVE_UNBLOCKER_TOKEN`\n\n## Fetching a URL\n\n```bash\ncurl --proto =https -s -G --data-urlencode \"url=THE_URL\" \\\n  -H \"Authorization: Bearer $MASSIVE_UNBLOCKER_TOKEN\" \\\n  \"https://unblocker.joinmassive.com/browser\"\n```\n\nReplace `THE_URL` with the actual URL. `curl --data-urlencode` handles URL-encoding automatically.\n\n## Fetching Multiple URLs\n\nLoop through them sequentially. Each call can take up to 2 minutes (CAPTCHA solving, retries).\n\n```bash\nURLS=(\n  \"https://example.com/page1\"\n  \"https://example.com/page2\"\n)\n\nfor url in \"${URLS[@]}\"; do\n  echo \"=== $url ===\"\n  curl --proto =https -s -G --data-urlencode \"url=$url\" \\\n    -H \"Authorization: Bearer $MASSIVE_UNBLOCKER_TOKEN\" \\\n    \"https://unblocker.joinmassive.com/browser\"\ndone\n```\n\n## Searching Google\n\nSearch endpoint. `GET` request. Returns all organic and paid Google results as HTML or structured JSON.\n\n```\nhttps://unblocker.joinmassive.com/search?terms=<encoded-terms>\n```\n\nAuth header: `Authorization: Bearer $MASSIVE_UNBLOCKER_TOKEN` (same token as browser fetching)\n\n### Basic Search\n\n```bash\ncurl --proto =https -s -H \"Authorization: Bearer $MASSIVE_UNBLOCKER_TOKEN\" \\\n  \"https://unblocker.joinmassive.com/search?terms=foo+bar+baz&format=json\"\n```\n\nReplace `foo+bar+baz` with the search query. Spaces must be replaced with `+` or `%20`.\n\n### Search with Options\n\n```bash\ncurl --proto =https -s -H \"Authorization: Bearer $MASSIVE_UNBLOCKER_TOKEN\" \\\n  \"https://unblocker.joinmassive.com/search?terms=vpn+comparison&format=json&size=100&offset=20\"\n```\n\n### Search Parameters\n\n| Parameter | Required | Values | Default | Use when |\n|-----------|----------|--------|---------|----------|\n| `terms` | yes | search query (`+` for spaces) | — | Always required |\n| `format` | no | `html`, `json` | `html` | Use `json` for structured results |\n| `serps` | no | `1` to `10` | `1` | Need multiple pages of results |\n| `size` | no | `0` to `100` | unset | Control results per page |\n| `offset` | no | `0` to `100` | `0` | Skip initial results |\n| `language` | no | name, ISO code, or Google code | unset | Localize search language |\n| `uule` | no | encoded location string | unset | Geo-target the search location |\n| `expiration` | no | `0` to N (days) | `1` | Set `0` to bypass cache |\n| `subaccount` | no | up to 255 chars | unset | Separate billing |\n\n### JSON Output\n\nWhen `format=json`, results are returned as structured nested objects with organic results, paid results, and metadata parsed out — no HTML parsing needed.\n\n### Search Tips\n\n- **Always use `format=json`** when possible — it returns structured data that's easier to work with than raw HTML.\n- **Use `size=10`** for a quick overview, `size=100` for comprehensive results.\n- **Use `offset`** to paginate through results beyond the first page.\n- **Use `language`** to get results in a specific language (e.g., `language=es` for Spanish).\n- **Live searches take a few seconds** on average but may take up to 120 seconds if retries are needed.\n\n## Browser Parameters\n\nAppend to the `/browser` query string as needed:\n\n| Parameter | Values | Default | Use when |\n|-----------|--------|---------|----------|\n| `format` | `rendered`, `raw` | `rendered` | Use `raw` to skip JS rendering (faster) |\n| `expiration` | `0` to N (days) | `1` | Set `0` to bypass cache |\n| `delay` | `0.1` to `10` (seconds) | none | Page needs extra time to load dynamic content |\n| `device` | device name string | desktop | Need mobile-specific content |\n| `ip` | `residential`, `isp` | `residential` | ISP IPs for less detection |\n\nExample with browser options:\n\n```bash\ncurl --proto =https -s -G --data-urlencode \"url=THE_URL\" \\\n  -H \"Authorization: Bearer $MASSIVE_UNBLOCKER_TOKEN\" \\\n  \"https://unblocker.joinmassive.com/browser?expiration=0&delay=2\"\n```\n\n## Error Handling\n\n- **401 Unauthorized** — Token is invalid or missing. Tell the user: \"Your ClawPod API token appears to be invalid or expired. You can get a new one at **clawpod.joinmassive.com**.\"\n- **Empty response** — The page may need more time to render. Retry with `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.\"\n- **Timeout or connection error** — Some pages are very slow. Let the user know the request timed out and offer to retry. Do not silently fail.\n\n## Tips\n\n- If content looks different from expected, try `device=mobile` for the mobile version.\n- For fresh results on a previously fetched URL, use `expiration=0` to bypass cache.\n- If still blocked, try `ip=isp` — ISP-grade IPs have lower detection rates.\n- For heavy dynamic content (SPAs, infinite scroll), increase `delay` for more render time.\n\n## Rules\n\n- **One fetch = one result.** The content is in the output. Do not re-fetch the same URL.\n- **URL-encode the target URL.** Always.\n- **Sequential for multiple URLs.** No parallel requests.\n- **2 minute timeout per request.** If a page or search is slow, it's the API handling retries/CAPTCHAs.\n- **Use `format=json` for search.** Structured JSON is preferred over HTML for search results.\n- **Form-encode search terms.** Replace spaces with `+` or `%20` in the `terms` parameter.\n","tags":{"latest":"0.1.7"},"stats":{"comments":0,"downloads":2055,"installsAllTime":5,"installsCurrent":5,"stars":21,"versions":7},"createdAt":1770904741327,"updatedAt":1779077005479},"latestVersion":{"version":"0.1.7","createdAt":1771581245795,"changelog":"- All Bash/curl usage updated to require HTTPS via `curl --proto =https`.\n- `allowed-tools` updated to enforce the HTTPS protocol in curl commands.\n- Documentation and usage examples now explicitly show HTTPS enforcement for improved security.","license":null},"metadata":{"setup":[{"key":"MASSIVE_UNBLOCKER_TOKEN","required":true}],"os":null,"systems":null},"owner":{"handle":"codeninja23","userId":"s173w4sv23s5bb8w4kjv1t143n842den","displayName":"codeninja23","image":"https://avatars.githubusercontent.com/u/34013241?v=4"},"moderation":null}