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.

Webhook event--▶Firecrawl scrapes--▶Downstream nodes

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.

Use {{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.

Crawl is asynchronous — the node polls Firecrawl until the crawl completes or the configured timeout is reached (default: 5 minutes).

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

FieldTypeDefaultDescription
namestringDisplay name for the node
modeenumscrapescrape | crawl | search | map
credentialIdObjectIdReference to a stored Firecrawl API key (required)
triggerOnenumsuccesssuccess | always

Scrape / Crawl Fields

FieldTypeDefaultDescription
urlstringTarget URL — supports {{payload.field}} templates
formatsstring[]["markdown"]Output formats: markdown, html, rawHtml, screenshot, links, json, summary
onlyMainContentbooleantrueExclude headers, navs, footers
timeoutnumber60000Scrape timeout in milliseconds
mobilebooleanfalseEmulate a mobile device
blockAdsbooleantrueBlock ads and cookie popups

Crawl-Specific Fields

FieldTypeDefaultDescription
maxDepthnumber2Maximum crawl depth from the starting URL
maxPagesnumber10Maximum number of pages to crawl
crawlTimeoutnumber300000Max wait time for crawl completion (ms). Default: 5 minutes
allowExternalLinksbooleanfalseFollow links to external domains

Search-Specific Fields

FieldTypeDefaultDescription
querystringSearch query — supports {{payload.field}} templates
searchLimitnumber5Maximum number of search results (max 100)
countrystringUSISO country code for geo-targeted results

Map-Specific Fields

FieldTypeDefaultDescription
mapLimitnumber5000Maximum number of URLs to discover (max 100,000)
includeSubdomainsbooleantrueInclude 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.

FieldTypeDescription
extractPromptstringNatural language prompt describing what to extract
extractSchemaJSON SchemaOptional JSON Schema defining the output structure

Output Payload

Scrape Output

Returns a single object with the scraped content. Not iterable.

jsonScrape output
{
  "_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.

jsonCrawl output
{
  "_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" } }
  ]
}

Returns an array of search results with scraped content. iterable.

jsonSearch output
{
  "_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.

jsonMap output
{
  "_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

textPipeline
Webhook (product URL) --> Firecrawl (scrape) --> Transform (extract price) --> Google Sheets (save)

Competitor Monitoring

textPipeline
Scheduled Workflow (daily) --> Firecrawl (crawl competitor site) --> Filter (changed pages) --> Email (report)
textPipeline
Webhook (search query) --> Firecrawl (search) --> AI Node (summarize) --> Notification (Discord)

Site Discovery + Selective Scraping

textPipeline
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

bashCreate a Firecrawl action
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

bashTest execution
curl -X POST /api/firecrawl-actions/:id/test \
  -H "Authorization: Bearer hwk_..." \
  -d '{ "payload": { "url": "https://example.com" } }'