Skip to main content
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

Payload Structure

All webhook events share this structure:

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.

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

agent.started

Sent when the agent job begins processing.

agent.action

Sent after each tool execution (scrape, search, etc.).
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.