
Firecrawl
- 284 installs
- 76 repo stars
- Updated August 4, 2026
- vm0-ai/vm0-skills
firecrawl is an agent skill that calls the Firecrawl v1 REST API to scrape single pages or crawl sites into markdown and other formats for developers who need reliable web extraction inside coding workflows.
About
firecrawl is a vm0-ai/vm0-skills agent skill that documents how to authenticate with FIRECRAWL_TOKEN and POST scrape or crawl jobs to https://api.firecrawl.dev/v1. Developers write JSON payloads (for example url plus formats like markdown) to files such as /tmp/firecrawl_request.json and invoke the connector through shell examples in the skill. The skill includes zero doctor troubleshooting commands like check-connector for FIRECRAWL_TOKEN and direct POST probes against the scrape endpoint. Reach for firecrawl when an agent must pull readable page content, batch site text, or debug failing Firecrawl requests during backend or agent integrations. It assumes network access and a valid API token rather than local HTML parsing libraries.
- firecrawl
Firecrawl by the numbers
- 284 all-time installs (skills.sh)
- Ranked #1,391 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/vm0-ai/vm0-skills --skill firecrawlAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 284 |
|---|---|
| repo stars | ★ 76 |
| Last updated | August 4, 2026 |
| Repository | vm0-ai/vm0-skills ↗ |
How do you scrape a webpage to markdown via API?
Use firecrawl for development tasks
Who is it for?
Backend or agent developers integrating Firecrawl for programmatic page extraction and crawl jobs.
Skip if: Developers who only need one-off browser copy-paste or who cannot store a FIRECRAWL_TOKEN secret.
When should I use this skill?
User mentions Firecrawl, crawl website, scrape site, web extraction, or api.firecrawl.dev failures.
What you get
Firecrawl v1 scrape/crawl responses, markdown extracts, JSON request files, and verified connector diagnostics.
- markdown page extracts
- crawl job responses
- connector diagnostic output
By the numbers
- Uses Firecrawl API base URL https://api.firecrawl.dev/v1
- Basic scrape example requests markdown format in the formats array
Files
Troubleshooting
If requests fail, run zero doctor check-connector --env-name FIRECRAWL_TOKEN or zero doctor check-connector --url https://api.firecrawl.dev/v1/scrape --method POST
How to Use
All examples below assume you have FIRECRAWL_TOKEN set.
Base URL: https://api.firecrawl.dev/v1
1. Scrape - Single Page
Extract content from a single webpage.
Basic Scrape
Write to /tmp/firecrawl_request.json:
{
"url": "https://example.com",
"formats": ["markdown"]
}Then run:
curl -s -X POST "https://api.firecrawl.dev/v1/scrape" -H "Authorization: Bearer $FIRECRAWL_TOKEN" -H "Content-Type: application/json" -d @/tmp/firecrawl_request.jsonScrape with Options
Write to /tmp/firecrawl_request.json:
{
"url": "https://docs.example.com/api",
"formats": ["markdown"],
"onlyMainContent": true,
"timeout": 30000
}Then run:
curl -s -X POST "https://api.firecrawl.dev/v1/scrape" -H "Authorization: Bearer $FIRECRAWL_TOKEN" -H "Content-Type: application/json" -d @/tmp/firecrawl_request.json | jq '.data.markdown'Get HTML Instead
Write to /tmp/firecrawl_request.json:
{
"url": "https://example.com",
"formats": ["html"]
}Then run:
curl -s -X POST "https://api.firecrawl.dev/v1/scrape" -H "Authorization: Bearer $FIRECRAWL_TOKEN" -H "Content-Type: application/json" -d @/tmp/firecrawl_request.json | jq '.data.html'Get Screenshot
Write to /tmp/firecrawl_request.json:
{
"url": "https://example.com",
"formats": ["screenshot"]
}Then run:
curl -s -X POST "https://api.firecrawl.dev/v1/scrape" -H "Authorization: Bearer $FIRECRAWL_TOKEN" -H "Content-Type: application/json" -d @/tmp/firecrawl_request.json | jq '.data.screenshot'Scrape Parameters:
| Parameter | Type | Description |
|---|---|---|
url | string | URL to scrape (required) |
formats | array | markdown, html, rawHtml, screenshot, links |
onlyMainContent | boolean | Skip headers/footers |
timeout | number | Timeout in milliseconds |
2. Crawl - Entire Website
Crawl all pages of a website (async operation).
Start a Crawl
Write to /tmp/firecrawl_request.json:
{
"url": "https://example.com",
"limit": 50,
"maxDepth": 2
}Then run:
curl -s -X POST "https://api.firecrawl.dev/v1/crawl" -H "Authorization: Bearer $FIRECRAWL_TOKEN" -H "Content-Type: application/json" -d @/tmp/firecrawl_request.jsonResponse:
{
"success": true,
"id": "crawl-job-id-here"
}Check Crawl Status
Replace <job-id> with the actual job ID returned from the crawl request:
curl -s "https://api.firecrawl.dev/v1/crawl/<job-id>" -H "Authorization: Bearer $FIRECRAWL_TOKEN" | jq '{status, completed, total}'Get Crawl Results
Replace <job-id> with the actual job ID:
curl -s "https://api.firecrawl.dev/v1/crawl/<job-id>" -H "Authorization: Bearer $FIRECRAWL_TOKEN" | jq '.data[] | {url: .metadata.url, title: .metadata.title}'Crawl with Path Filters
Write to /tmp/firecrawl_request.json:
{
"url": "https://blog.example.com",
"limit": 20,
"maxDepth": 3,
"includePaths": ["/posts/*"],
"excludePaths": ["/admin/*", "/login"]
}Then run:
curl -s -X POST "https://api.firecrawl.dev/v1/crawl" -H "Authorization: Bearer $FIRECRAWL_TOKEN" -H "Content-Type: application/json" -d @/tmp/firecrawl_request.jsonCrawl Parameters:
| Parameter | Type | Description |
|---|---|---|
url | string | Starting URL (required) |
limit | number | Max pages to crawl (default: 100) |
maxDepth | number | Max crawl depth (default: 3) |
includePaths | array | Paths to include (e.g., /blog/*) |
excludePaths | array | Paths to exclude |
3. Map - URL Discovery
Get all URLs from a website quickly.
Basic Map
Write to /tmp/firecrawl_request.json:
{
"url": "https://example.com"
}Then run:
curl -s -X POST "https://api.firecrawl.dev/v1/map" -H "Authorization: Bearer $FIRECRAWL_TOKEN" -H "Content-Type: application/json" -d @/tmp/firecrawl_request.json | jq '.links[:10]'Map with Search Filter
Write to /tmp/firecrawl_request.json:
{
"url": "https://shop.example.com",
"search": "product",
"limit": 500
}Then run:
curl -s -X POST "https://api.firecrawl.dev/v1/map" -H "Authorization: Bearer $FIRECRAWL_TOKEN" -H "Content-Type: application/json" -d @/tmp/firecrawl_request.json | jq '.links'Map Parameters:
| Parameter | Type | Description |
|---|---|---|
url | string | Website URL (required) |
search | string | Filter URLs containing keyword |
limit | number | Max URLs to return (default: 1000) |
4. Search - Web Search
Search the web and get full page content.
Basic Search
Write to /tmp/firecrawl_request.json:
{
"query": "AI news 2024",
"limit": 5
}Then run:
curl -s -X POST "https://api.firecrawl.dev/v1/search" -H "Authorization: Bearer $FIRECRAWL_TOKEN" -H "Content-Type: application/json" -d @/tmp/firecrawl_request.json | jq '.data[] | {title: .metadata.title, url: .url}'Search with Full Content
Write to /tmp/firecrawl_request.json:
{
"query": "machine learning tutorials",
"limit": 3,
"scrapeOptions": {
"formats": ["markdown"]
}
}Then run:
curl -s -X POST "https://api.firecrawl.dev/v1/search" -H "Authorization: Bearer $FIRECRAWL_TOKEN" -H "Content-Type: application/json" -d @/tmp/firecrawl_request.json | jq '.data[] | {title: .metadata.title, content: .markdown[:500]}'Search Parameters:
| Parameter | Type | Description |
|---|---|---|
query | string | Search query (required) |
limit | number | Number of results (default: 10) |
scrapeOptions | object | Options for scraping results |
5. Extract - AI Data Extraction
Extract structured data from pages using AI.
Basic Extract
Write to /tmp/firecrawl_request.json:
{
"urls": ["https://example.com/product/123"],
"prompt": "Extract the product name, price, and description"
}Then run:
curl -s -X POST "https://api.firecrawl.dev/v1/extract" -H "Authorization: Bearer $FIRECRAWL_TOKEN" -H "Content-Type: application/json" -d @/tmp/firecrawl_request.json | jq '.data'Extract with Schema
Write to /tmp/firecrawl_request.json:
{
"urls": ["https://example.com/product/123"],
"prompt": "Extract product information",
"schema": {
"type": "object",
"properties": {
"name": {"type": "string"},
"price": {"type": "number"},
"currency": {"type": "string"},
"inStock": {"type": "boolean"}
}
}
}Then run:
curl -s -X POST "https://api.firecrawl.dev/v1/extract" -H "Authorization: Bearer $FIRECRAWL_TOKEN" -H "Content-Type: application/json" -d @/tmp/firecrawl_request.json | jq '.data'Extract from Multiple URLs
Write to /tmp/firecrawl_request.json:
{
"urls": [
"https://example.com/product/1",
"https://example.com/product/2"
],
"prompt": "Extract product name and price"
}Then run:
curl -s -X POST "https://api.firecrawl.dev/v1/extract" -H "Authorization: Bearer $FIRECRAWL_TOKEN" -H "Content-Type: application/json" -d @/tmp/firecrawl_request.json | jq '.data'Extract Parameters:
| Parameter | Type | Description |
|---|---|---|
urls | array | URLs to extract from (required) |
prompt | string | Description of data to extract (required) |
schema | object | JSON schema for structured output |
Practical Examples
Scrape Documentation
Write to /tmp/firecrawl_request.json:
{
"url": "https://docs.python.org/3/tutorial/",
"formats": ["markdown"],
"onlyMainContent": true
}Then run:
curl -s -X POST "https://api.firecrawl.dev/v1/scrape" -H "Authorization: Bearer $FIRECRAWL_TOKEN" -H "Content-Type: application/json" -d @/tmp/firecrawl_request.json | jq -r '.data.markdown' > python-tutorial.mdFind All Blog Posts
Write to /tmp/firecrawl_request.json:
{
"url": "https://blog.example.com",
"search": "post"
}Then run:
curl -s -X POST "https://api.firecrawl.dev/v1/map" -H "Authorization: Bearer $FIRECRAWL_TOKEN" -H "Content-Type: application/json" -d @/tmp/firecrawl_request.json | jq -r '.links[]'Research a Topic
Write to /tmp/firecrawl_request.json:
{
"query": "best practices REST API design 2024",
"limit": 5,
"scrapeOptions": {"formats": ["markdown"]}
}Then run:
curl -s -X POST "https://api.firecrawl.dev/v1/search" -H "Authorization: Bearer $FIRECRAWL_TOKEN" -H "Content-Type: application/json" -d @/tmp/firecrawl_request.json | jq '.data[] | {title: .metadata.title, url: .url}'Extract Pricing Data
Write to /tmp/firecrawl_request.json:
{
"urls": ["https://example.com/pricing"],
"prompt": "Extract all pricing tiers with name, price, and features"
}Then run:
curl -s -X POST "https://api.firecrawl.dev/v1/extract" -H "Authorization: Bearer $FIRECRAWL_TOKEN" -H "Content-Type: application/json" -d @/tmp/firecrawl_request.json | jq '.data'Poll Crawl Until Complete
Replace <job-id> with the actual job ID:
while true; do
STATUS="$(curl -s "https://api.firecrawl.dev/v1/crawl/<job-id>" -H "Authorization: Bearer $FIRECRAWL_TOKEN" | jq -r '.status')"
echo "Status: $STATUS"
[ "$STATUS" = "completed" ] && break
sleep 5
doneResponse Format
Scrape Response
{
"success": true,
"data": {
"markdown": "# Page Title\n\nContent...",
"metadata": {
"title": "Page Title",
"description": "...",
"url": "https://..."
}
}
}Crawl Status Response
{
"success": true,
"status": "completed",
"completed": 50,
"total": 50,
"data": [...]
}Guidelines
1. Rate limits: Add delays between requests to avoid 429 errors 2. Crawl limits: Set reasonable limit values to control API usage 3. Main content: Use onlyMainContent: true for cleaner output 4. Async crawls: Large crawls are async; poll /crawl/{id} for status 5. Extract prompts: Be specific for better AI extraction results 6. Check success: Always check success field in responses
Related skills
How it compares
Choose firecrawl when you want a hosted crawl/scrape API with token auth instead of maintaining custom headless browser scrapers.
FAQ
What auth does firecrawl require?
The firecrawl skill assumes FIRECRAWL_TOKEN is set in the environment. Troubleshooting uses zero doctor check-connector --env-name FIRECRAWL_TOKEN or a POST probe to https://api.firecrawl.dev/v1/scrape.
What output formats does Firecrawl scrape support?
The firecrawl skill’s basic scrape example requests formats: ["markdown"] in JSON alongside a url field, sent to the Firecrawl v1 scrape endpoint for agent-readable page text.