firecrawl-scraper
Skill14 starsChanged 3 months agoMITView on GitHub
Use this skill when users need to scrape web pages, extract structured page data, take website screenshots, parse PDFs, batch-scrape URLs, or crawl a site with Firecrawl.
- Reads credentials
3 other projects use a version of this.
Adopted by
Most recently taken up by
- davidanthonyn/claude-skillstheir own version, first seen Oct 20, 2026
- xfstudio/skillstheir own version, first seen Oct 13, 2026
- ai4brands-design/claude-skillstheir own version, first seen Mar 22, 2026
Other versions3 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 3
- xfstudio/skills★ 9same name
- ai4brands-design/claude-skills★ 2same name
- davidanthonyn/claude-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository5 other files it gives its agents.
- codex-reviewSkill
- context7-auto-researchSkill
- exa-searchSkill
- gpt-image-2-apiSkill
- tavily-webSkill
The file
We split this skill into the rules it gives an agent
5 rules. 0 are common, 4 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 3 edited versions we read keep these.
4
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 32
Sub-skill (fork context): Only responsible for HTTP call execution, avoiding conversation history token waste
- Very specific: line 36
Use Task tool to invoke firecrawl-fetcher sub-skill, passing command and JSON (stdin):
- Distinctive: line 235
links: All links on page
- Distinctive: line 236
images: All images on page
- Distinctive: line 273
All endpoints return JSON with:
“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Firecrawl Scraper Skill
Trigger Conditions & Endpoint Selection
Choose Firecrawl endpoint based on user intent:
- scrape: Need to extract content from a single web page (markdown, html, json, screenshot, pdf)
- crawl: Need to crawl entire website with depth control and path filtering
- map: Need to quickly get a list of all URLs on a website
- batch-scrape: Need to scrape multiple URLs in parallel
- crawl-status: Given crawl job ID, check crawl progress/results (optional
--wait) - batch-status: Given batch job ID, check batch scrape progress/results (optional
--wait) - batch-errors: Given batch job ID, retrieve batch scrape errors
Recommended Architecture (Main Skill + Sub-skill)
This skill uses a two-phase architecture:
- Main skill (current context): Understand user question → Choose endpoint → Assemble JSON payload
- Sub-skill (fork context): Only responsible for HTTP call execution, avoiding conversation history token waste
Execution Method
Use Task tool to invoke firecrawl-fetcher sub-skill, passing command and JSON (stdin):
Task parameters:
- subagent_type: Bash
- description: "Call Firecrawl API"
- prompt: cat <<'JSON' | node scripts/firecrawl-api.cjs <scrape|crawl|map|batch-scrape|crawl-status|batch-status|batch-errors> [--wait]
{ ...payload... }
JSONPayload Examples
1) Scrape Single Page
cat <<'JSON' | node scripts/firecrawl-api.cjs scrape
{
"url": "https://example.com",
"formats": ["markdown", "links"],
"onlyMainContent": true,
"includeTags": [],
"excludeTags": ["nav", "footer"],
"waitFor": 0,
"timeout": 30000
}
JSONAvailable formats:
"markdown","html","rawHtml","links","images","summary"{"type": "json", "prompt": "Extract product info", "schema": {...}}{"type": "screenshot", "fullPage": true, "quality": 85}
2) Scrape with Actions (Page Interaction)
cat <<'JSON' | node scripts/firecrawl-api.cjs scrape
{
"url": "https://example.com",
"formats": ["markdown"],
"actions": [
{"type": "wait", "milliseconds": 2000},
{"type": "click", "selector": "#load-more"},
{"type": "wait", "milliseconds": 1000},
{"type": "scroll", "direction": "down", "amount": 500}
]
}
JSONAvailable actions:
wait,click,write,press,scroll,screenshot,scrape,executeJavascript
3) Parse PDF
cat <<'JSON' | node scripts/firecrawl-api.cjs scrape
{
"url": "https://example.com/document.pdf",
"formats": ["markdown"],
"parsers": ["pdf"]
}
JSON4) Extract Structured JSON
cat <<'JSON' | node scripts/firecrawl-api.cjs scrape
{
"url": "https://example.com/product",
"formats": [
{
"type": "json",
"prompt": "Extract product information",
"schema": {
"type": "object",
"properties": {
"name": {"type": "string"},
"price": {"type": "number"},
"description": {"type": "string"}
},
"required": ["name", "price"]
}
}
]
}
JSON5) Crawl Entire Website
cat <<'JSON' | node scripts/firecrawl-api.cjs crawl
{
"url": "https://docs.example.com",
"formats": ["markdown"],
"includePaths": ["^/docs/.*"],
"excludePaths": ["^/blog/.*"],
"maxDiscoveryDepth": 3,
"limit": 100,
"allowExternalLinks": false,
"allowSubdomains": false
}
JSON5.1) Crawl + Wait for Completion
cat <<'JSON' | node scripts/firecrawl-api.cjs crawl --wait
{
"url": "https://docs.example.com",
"formats": ["markdown"],
"limit": 100
}
JSON6) Map Website URLs
cat <<'JSON' | node scripts/firecrawl-api.cjs map
{
"url": "https://example.com",
"search": "documentation",
"limit": 5000
}
JSON7) Batch Scrape Multiple URLs
cat <<'JSON' | node scripts/firecrawl-api.cjs batch-scrape
{
"urls": [
"https://example.com/page1",
"https://example.com/page2",
"https://example.com/page3"
],
"formats": ["markdown"]
}
JSONReturns async job response: { "success": true, "id": "<batch-id>", "url": "..." }
7.1) Batch Scrape + Wait for Completion
cat <<'JSON' | node scripts/firecrawl-api.cjs batch-scrape --wait
{
"urls": [
"https://example.com/page1",
"https://example.com/page2"
],
"formats": ["markdown"]
}
JSON7.2) Check Batch Scrape Status
node scripts/firecrawl-api.cjs batch-status <batch-id>Wait for completion:
node scripts/firecrawl-api.cjs batch-status <batch-id> --wait7.3) Get Batch Scrape Errors
node scripts/firecrawl-api.cjs batch-errors <batch-id>8) Check Crawl Status
node scripts/firecrawl-api.cjs crawl-status <crawl-id>Wait for completion:
node scripts/firecrawl-api.cjs crawl-status <crawl-id> --waitKey Features
Formats
- markdown: Clean markdown content
- html: Parsed HTML
- rawHtml: Original HTML
- links: All links on page
- images: All images on page
- summary: AI-generated summary
- json: Structured data extraction with schema
- screenshot: Page screenshot (PNG)
Content Control
onlyMainContent: Extract only main content (default: true)includeTags: CSS selectors to includeexcludeTags: CSS selectors to excludewaitFor: Wait time before scraping (ms)maxAge: Cache duration (default: 48 hours)
Actions (Browser Automation)
wait: Wait for specified timeclick: Click element by selectorwrite: Input text into fieldpress: Press keyboard keyscroll: Scroll pageexecuteJavascript: Run custom JS
Crawl Options
includePaths: Regex patterns to includeexcludePaths: Regex patterns to excludemaxDiscoveryDepth: Maximum crawl depthlimit: Maximum pages to crawlallowExternalLinks: Follow external linksallowSubdomains: Follow subdomains
Environment Variables & API Key
Two ways to configure API Key (priority: environment variable > .env):
- Environment variable:
FIRECRAWL_API_KEY .envfile: Place in.env, can copy from.env.example
Response Format
All endpoints return JSON with:
success: Boolean indicating successdata: Extracted content (format depends on endpoint)- For crawl: Returns job ID, use
crawl-status(or GET /v2/crawl/{id}) to check status - For batch-scrape: Returns async job response (
{ success, id, url }), usebatch-status(or GET /v2/batch/scrape/{id}) to poll status - Batch status response includes
status,total,completed,creditsUsed,expiresAt,next,data[]next: pagination URL for large/incomplete results (script returns raw response; follow manually if needed)
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

