Install
openclaw skills install cloudflare-crawl-skillCrawl websites using Cloudflare's Browser Rendering API. Use when you need to scrape entire sites, build knowledge bases, extract content from multiple pages...
openclaw skills install cloudflare-crawl-skillCrawl entire websites using Cloudflare's Browser Rendering /crawl API. Async job-based crawling with JS rendering.
Get Cloudflare API credentials:
Account.Browser Rendering permissionSet environment variables:
export CLOUDFLARE_API_TOKEN="your_token"
export CLOUDFLARE_ACCOUNT_ID="your_account_id"
# Start a crawl job
node scripts/crawl.js start https://example.com --limit 50
# Check status
node scripts/crawl.js status <job_id>
# Get results as markdown
node scripts/crawl.js results <job_id> --format markdown
curl -X POST "https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/browser-rendering/crawl" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"limit": 50,
"depth": 3,
"formats": ["markdown"]
}'
Returns: { "success": true, "result": "job_id_here" }
curl "https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/browser-rendering/crawl/$JOB_ID?limit=1" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
Status values: running, completed, errored, cancelled_due_to_timeout
curl "https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/browser-rendering/crawl/$JOB_ID" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
| Parameter | Type | Default | Description |
|---|---|---|---|
| url | string | required | Starting URL |
| limit | number | 10 | Max pages to crawl (max 100,000) |
| depth | number | 100000 | Max link depth from start URL |
| source | string | "all" | URL discovery: all, sitemaps, links |
| formats | array | ["html"] | Output: html, markdown, json |
| render | boolean | true | Execute JS (false = fast HTML only) |
{
"url": "https://example.com/page",
"status": "completed",
"markdown": "# Page Title\n\nContent here...",
"metadata": { "title": "Page Title", "status": 200 }
}
Uses Workers AI to extract structured data. Requires jsonOptions.prompt:
{
"formats": ["json"],
"jsonOptions": {
"prompt": "Extract product name, price, and description"
}
}
| Plan | Free Tier | Overage |
|---|---|---|
| Workers Free | 10 min/day | N/A |
| Workers Paid | 10 hrs/month | $0.09/hour |
// Crawl docs site for knowledge base
const job = await startCrawl({
url: 'https://docs.example.com',
limit: 500,
formats: ['markdown'],
source: 'sitemaps' // Use sitemap for efficiency
});
// Wait for completion
const results = await waitForCrawl(job.id);
// Save markdown files for RAG
for (const page of results.records) {
if (page.status === 'completed') {
fs.writeFileSync(`docs/${slugify(page.url)}.md`, page.markdown);
}
}
| Use Case | Cloudflare Crawl | Browserbase |
|---|---|---|
| Full site scrape | ✅ Best | ❌ Manual |
| Interactive (forms) | ❌ No | ✅ Best |
| CF-protected sites | ✅ Native | ⚠️ Cloud bypass |
| AI extraction | ✅ Built-in | ✅ Stagehand |
| Session management | ✅ Async jobs | ❌ Manual |
| Cost | $0.09/hr | Credits |
Use Cloudflare Crawl for bulk content extraction. Use Browserbase for interactive automation.