145 lines
4.4 KiB
Markdown
145 lines
4.4 KiB
Markdown
|
|
# Firecrawl
|
|||
|
|
|
|||
|
|
Web scraping API that turns single pages or full sites into clean LLM-ready markdown. Handles JS rendering, anti-bot defenses, and proxy rotation so you can extract structured data from individual public business sites.
|
|||
|
|
|
|||
|
|
## Capabilities
|
|||
|
|
|
|||
|
|
| Integration | Available | Notes |
|
|||
|
|
|-------------|-----------|-------|
|
|||
|
|
| API | ✓ | REST API + Python/Node SDKs |
|
|||
|
|
| MCP | ✓ | Official Firecrawl MCP server |
|
|||
|
|
| CLI | - | None official |
|
|||
|
|
| SDK | ✓ | Node, Python, Go, Rust |
|
|||
|
|
|
|||
|
|
## Authentication
|
|||
|
|
|
|||
|
|
- **Type**: API Key
|
|||
|
|
- **Header**: `Authorization: Bearer fc-YOUR_API_KEY`
|
|||
|
|
- **Get key**: https://www.firecrawl.dev/app/api-keys
|
|||
|
|
- **Env var**: `FIRECRAWL_API_KEY`
|
|||
|
|
- **Base URL**: `https://api.firecrawl.dev`
|
|||
|
|
|
|||
|
|
## Core Operations
|
|||
|
|
|
|||
|
|
### Scrape a single page
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
POST https://api.firecrawl.dev/v1/scrape
|
|||
|
|
Authorization: Bearer fc-YOUR_API_KEY
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
"url": "https://joescoffeeshop.com",
|
|||
|
|
"formats": ["markdown", "html"]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Returns the page as clean markdown (LLM-ready, no nav cruft) plus optional raw HTML.
|
|||
|
|
|
|||
|
|
### Map a site (discover all URLs)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
POST https://api.firecrawl.dev/v1/map
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
"url": "https://example.com",
|
|||
|
|
"limit": 100
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Returns a list of URLs found on the site. Use this to identify key pages (`/pricing`, `/about`, `/contact`, `/team`) before scraping individually.
|
|||
|
|
|
|||
|
|
### Crawl multiple pages
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
POST https://api.firecrawl.dev/v1/crawl
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
"url": "https://example.com",
|
|||
|
|
"limit": 20,
|
|||
|
|
"scrapeOptions": {
|
|||
|
|
"formats": ["markdown"]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Crawls multiple pages from a single site. **Use sparingly** — costs scale with pages. Set `limit` and `includePaths` to target specific URL patterns.
|
|||
|
|
|
|||
|
|
### Extract structured data
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
POST https://api.firecrawl.dev/v1/extract
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
"urls": ["https://joescoffeeshop.com"],
|
|||
|
|
"schema": {
|
|||
|
|
"phone": "string",
|
|||
|
|
"address": "string",
|
|||
|
|
"hours": "string",
|
|||
|
|
"email": "string"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Returns data matching the schema — useful when you want consistent fields across many sites rather than raw markdown.
|
|||
|
|
|
|||
|
|
### Search the web
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
POST https://api.firecrawl.dev/v1/search
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
"query": "\"Joe's Coffee Shop\" Boulder Colorado",
|
|||
|
|
"limit": 10
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Web search + scrape of top results. Useful for cross-source verification (find a business's official site when you only have a name + location).
|
|||
|
|
|
|||
|
|
## MCP Tools (when used via MCP server)
|
|||
|
|
|
|||
|
|
| Tool | Purpose |
|
|||
|
|
|------|---------|
|
|||
|
|
| `firecrawl_scrape` | Single-page extraction |
|
|||
|
|
| `firecrawl_map` | URL discovery on a site |
|
|||
|
|
| `firecrawl_crawl` | Multi-page crawl |
|
|||
|
|
| `firecrawl_extract` | Schema-driven structured data |
|
|||
|
|
| `firecrawl_search` | Web search + scrape |
|
|||
|
|
|
|||
|
|
## When to Use
|
|||
|
|
|
|||
|
|
- **Local SMB prospecting**: verify a business's website status (live, weak, missing) at the URL level after manual Maps/Yelp discovery
|
|||
|
|
- **Single-target enrichment**: pull contact info, hours, services from a business's own site
|
|||
|
|
- **Competitor research**: scrape competitor pricing, features, customer pages (this is the primary use in `competitor-profiling` skill)
|
|||
|
|
- **Programmatic page extraction**: when you need many sites' homepages or about pages in a consistent format
|
|||
|
|
- **JS-heavy sites**: when the page won't render with a simple `curl` because content loads after page load
|
|||
|
|
|
|||
|
|
## When NOT to Use
|
|||
|
|
|
|||
|
|
**Critical — do not use Firecrawl to scrape platforms hosting prospects:**
|
|||
|
|
|
|||
|
|
- ✗ **Google Maps / Google search results** — Google ToS prohibits bulk extraction
|
|||
|
|
- ✗ **LinkedIn** — explicit ToS violation, will get scraper accounts banned and risks legal exposure
|
|||
|
|
- ✗ **Yelp** — ToS prohibits commercial scraping
|
|||
|
|
- ✗ **Apollo / ZoomInfo / Clearbit listings** — their ToS prohibits using competing data extracts
|
|||
|
|
- ✗ **Any platform you don't have a legitimate basis to extract from at scale**
|
|||
|
|
|
|||
|
|
**Use Firecrawl for**: the *business's own website* (which you found via manual discovery on those platforms). That's the line — discovery happens on platforms, extraction happens on individual public business sites.
|
|||
|
|
|
|||
|
|
## Pricing
|
|||
|
|
|
|||
|
|
- Free tier: limited monthly credits
|
|||
|
|
- Paid tiers scale by request volume + concurrency
|
|||
|
|
- Confirm at https://www.firecrawl.dev/pricing
|
|||
|
|
|
|||
|
|
## Rate Limits
|
|||
|
|
|
|||
|
|
- Default: tier-dependent (typically 5–20 concurrent requests on paid plans)
|
|||
|
|
- Per-page cost varies by content type and rendering needs
|
|||
|
|
|
|||
|
|
## Relevant Skills
|
|||
|
|
|
|||
|
|
- prospecting (site enrichment for individual business URLs)
|
|||
|
|
- competitor-profiling (primary use: full-site competitor analysis)
|
|||
|
|
- ai-seo (scrape your own content for AI search optimization)
|
|||
|
|
- content-strategy (scrape industry sites for content gap analysis)
|