Firecrawl Action
Scrape, crawl, search, and map web pages as part of your webhook pipelines. Extract structured data, convert pages to markdown, discover URLs, or search the web — all powered by the Firecrawl API. You provide your own Firecrawl API key.
Overview
The Firecrawl Action node connects to the Firecrawl API to perform web scraping operations. It supports four modes, each suited for different use cases. The node appears on the canvas with an orange color.
Modes
Scrape
Extracts content from a single URL. Returns markdown, HTML, screenshots, or structured JSON. Best for extracting data from a specific page — product prices, article content, form data, etc.
{{payload.url}} in the URL field to dynamically scrape whatever URL your webhook receives.Crawl
Recursively crawls an entire website starting from a base URL. Discovers and scrapes multiple pages following links. Returns an array of scraped pages — the output is marked as iterable so downstream nodes process each page individually.
Search
Searches the web for a query and returns scraped content from the results. Combines web search with page scraping in one step. Returns an array of results — also iterable.
Map
Discovers all URLs on a website without scraping them. Returns a list of links with titles and descriptions. Useful for discovering pages before selectively scraping them with a downstream Firecrawl node. Output is iterable.
Configuration
Common Fields
| Field | Type | Default | Description |
|---|---|---|---|
| name | string | — | Display name for the node |
| mode | enum | scrape | scrape | crawl | search | map |
| credentialId | ObjectId | — | Reference to a stored Firecrawl API key (required) |
| triggerOn | enum | success | success | always |
Scrape / Crawl Fields
| Field | Type | Default | Description |
|---|---|---|---|
| url | string | — | Target URL — supports {{payload.field}} templates |
| formats | string[] | ["markdown"] | Output formats: markdown, html, rawHtml, screenshot, links, json, summary |
| onlyMainContent | boolean | true | Exclude headers, navs, footers |
| timeout | number | 60000 | Scrape timeout in milliseconds |
| mobile | boolean | false | Emulate a mobile device |
| blockAds | boolean | true | Block ads and cookie popups |
Crawl-Specific Fields
| Field | Type | Default | Description |
|---|---|---|---|
| maxDepth | number | 2 | Maximum crawl depth from the starting URL |
| maxPages | number | 10 | Maximum number of pages to crawl |
| crawlTimeout | number | 300000 | Max wait time for crawl completion (ms). Default: 5 minutes |
| allowExternalLinks | boolean | false | Follow links to external domains |
Search-Specific Fields
| Field | Type | Default | Description |
|---|---|---|---|
| query | string | — | Search query — supports {{payload.field}} templates |
| searchLimit | number | 5 | Maximum number of search results (max 100) |
| country | string | US | ISO country code for geo-targeted results |
Map-Specific Fields
| Field | Type | Default | Description |
|---|---|---|---|
| mapLimit | number | 5000 | Maximum number of URLs to discover (max 100,000) |
| includeSubdomains | boolean | true | Include subdomains in URL discovery |
Structured Extraction (Scrape / Search)
Optionally extract structured data from scraped pages by providing a prompt. Firecrawl uses AI to extract the requested fields.
| Field | Type | Description |
|---|---|---|
| extractPrompt | string | Natural language prompt describing what to extract |
| extractSchema | JSON Schema | Optional JSON Schema defining the output structure |
Output Payload
Scrape Output
Returns a single object with the scraped content. Not iterable.
{
"_meta": { "iterable": false, "count": 1 },
"markdown": "# Page Title\n\nPage content...",
"metadata": {
"title": "Page Title",
"url": "https://example.com",
"statusCode": 200
}
}Crawl Output
Returns an array of pages. Marked as iterable — downstream nodes process each page individually.
{
"_meta": { "iterable": true, "iterateField": "pages", "count": 5 },
"pages": [
{ "markdown": "# Page 1...", "metadata": { "sourceURL": "https://example.com/" } },
{ "markdown": "# Page 2...", "metadata": { "sourceURL": "https://example.com/about" } }
]
}Search Output
Returns an array of search results with scraped content. iterable.
{
"_meta": { "iterable": true, "iterateField": "results", "count": 5 },
"results": [
{ "url": "https://example.com", "title": "Example", "markdown": "..." },
{ "url": "https://other.com", "title": "Other", "markdown": "..." }
]
}Map Output
Returns an array of discovered URLs. iterable.
{
"_meta": { "iterable": true, "iterateField": "links", "count": 150 },
"links": [
{ "url": "https://example.com/", "title": "Home", "description": "..." },
{ "url": "https://example.com/about", "title": "About Us" }
]
}Use Cases
Price Tracking
Webhook (product URL) --> Firecrawl (scrape) --> Transform (extract price) --> Google Sheets (save)Competitor Monitoring
Scheduled Workflow (daily) --> Firecrawl (crawl competitor site) --> Filter (changed pages) --> Email (report)Web Search + AI Summary
Webhook (search query) --> Firecrawl (search) --> AI Node (summarize) --> Notification (Discord)Site Discovery + Selective Scraping
Webhook (URL) --> Firecrawl (map) --> Split (per URL) --> Firecrawl (scrape each) --> MongoDB (save)API Key Setup
The Firecrawl node requires a Firecrawl API key. Get one at firecrawl.dev. In the node's detail page, click "Add Firecrawl API Key" to store it securely in the credentials system. The key is encrypted at rest and never exposed in API responses.
API Reference
Create
curl -X POST /api/firecrawl-actions \
-H "Authorization: Bearer hwk_..." \
-d '{
"name": "Scrape Product",
"mode": "scrape",
"url": "{{payload.url}}",
"formats": ["markdown"],
"onlyMainContent": true,
"credentialId": "..."
}'Test
curl -X POST /api/firecrawl-actions/:id/test \
-H "Authorization: Bearer hwk_..." \
-d '{ "payload": { "url": "https://example.com" } }'