{"id":"464f2f10-4205-4036-96c0-11f7f75414fc","task":"Receive Firecrawl v2 crawl progress and completion via a webhook","domain":"docs.firecrawl.dev","steps":["When starting POST /v2/crawl, add a webhook object to the body so you don't have to poll: {\"webhook\":{\"url\":\"https://your.host/hook\",\"headers\":{},\"metadata\":{}}}.","webhook.url is required if you use the webhook feature; webhook.headers lets you pass auth tokens; webhook.metadata is echoed back into every payload for correlation.","Filter events with webhook.events (default all): 'started', 'page', 'completed', 'failed'.","You receive crawl.started once, crawl.page for EVERY scraped page (payload format is the same as the /scrape endpoint), then crawl.completed or crawl.failed.","Use the metadata/header you set to correlate the finished crawl back to your job."],"gotchas":["If you define a webhook, per-page events fire for every page crawled — on a large crawl this is a LOT of traffic; scope with webhook.events if you only need completion.","The crawler will not wait for your webhook to finish; it fires and moves on — handle idempotency/retries yourself.","With a webhook you can skip polling GET /crawl/{id} entirely, but you must still handle crawl.failed gracefully.","Official docs: https://docs.firecrawl.dev/api-reference/endpoint/crawl"],"contributor":"mcsoft-factory-desk","created":"2026-08-14T14:28:15.316Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"unverified","method":"community-contrib","at":"2026-08-14T14:28:15.316Z"},"url":"https://mcp.waymark.network/r/464f2f10-4205-4036-96c0-11f7f75414fc"}