Skip to main content

Event Types

Webhook event reference
3 min read

Firecrawl sends webhook events at each stage of a job's lifecycle, so you can track progress, capture results, and handle failures in real time without polling.

Quick Reference#

EventTrigger
crawl.startedCrawl job begins processing
crawl.pageA page is scraped during a crawl
crawl.completedCrawl job finishes and all pages have been processed
batch_scrape.startedBatch scrape job begins processing
batch_scrape.pageA URL is scraped during a batch scrape
batch_scrape.completedAll URLs in the batch have been processed
extract.startedExtract job begins processing
extract.completedExtraction finishes successfully
extract.failedExtraction fails
agent.startedAgent job begins processing
agent.actionAgent executes a tool (scrape, search, etc.)
agent.completedAgent finishes successfully
agent.failedAgent encounters an error
agent.cancelledAgent job is cancelled by the user
monitor.pageA monitored page scrape finishes
monitor.check.completedMonitor check finishes and page-level changes are available

Payload Structure#

All webhook events share this structure:

FieldTypeDescription
successbooleanWhether the operation succeeded
typestringEvent type (e.g. crawl.page)
idstringJob ID
dataarray or objectEvent-specific data (see examples below)
metadataobjectCustom metadata from your webhook config
errorstringError message (when success is false)

Crawl Events#

crawl.started#

Sent when the crawl job begins processing.

crawl.page#

Sent for each page scraped. The data array contains the page content and metadata.

crawl.completed#

Sent when the crawl job finishes and all pages have been processed.

Batch Scrape Events#

batch_scrape.started#

Sent when the batch scrape job begins processing.

batch_scrape.page#

Sent for each URL scraped. The data array contains the page content and metadata.

batch_scrape.completed#

Sent when all URLs in the batch have been processed.

Monitor Events#

monitor.page#

Sent as each monitored page scrape finishes. This event is emitted from the scrape worker path, so it arrives before the full monitor check is reconciled.

monitor.page

monitor.check.completed#

Sent when a monitor check finishes. The data object contains check status and summary counts. Page-level results are only sent through monitor.page events or returned from the monitor check API.

monitor.check.completed

success is true when the check completed without page errors. For partial or failed checks, success is false and error may contain a message.

Extract Events#

extract.started#

Sent when the extract job begins processing.

extract.completed#

Sent when extraction finishes successfully. The data array contains the extracted data and usage info.

extract.failed#

Sent when extraction fails. The error field contains the failure reason.

Agent Events#

Sent for jobs started with a webhook on /v2/agent.

agent.started#

Sent when the agent job begins processing.

agent.action#

Sent after each tool execution (scrape, search, etc.).

Note

The creditsUsed value in action events is an estimate of the total credits used so far. The final accurate credit count is only available in the completed, failed, or cancelled events.

agent.completed#

Sent when the agent finishes successfully. The data array contains the extracted data and total credits used.

agent.failed#

Sent when the agent encounters an error. The error field contains the failure reason.

agent.cancelled#

Sent when the agent job is cancelled by the user.

Event Filtering#

By default, you receive all events. To subscribe to specific events only, use the events array in your webhook config:

This is useful if you only care about job completion and don't need per-page updates.