# Blog: Website Scraper Webhooks Guide — Event-Driven Pipelines

**URL:** `/blogs/guides/website-scraper-webhooks-guide/`  
**Series:** Website Scraper Playbook — Supporting Guide #2  
**Pillar:** [Extract Emails & Social Profiles at Scale](/blogs/guides/extract-emails-social-links-website-scraper-api/)

---

## Purpose

Explains *why* polling is fragile at scale and teaches readers how to set up event-driven pipelines using the Bolt Scraper webhook system. Covers registration, payload structure, HMAC signature verification, delivery logs, and replay.

## Content Structure

1. **Problem** — Polling loops break at scale: timeout risk, wasted compute, no retry on failure
2. **Education** — How webhooks work: register once → receive `website_job.completed` POST on completion
3. **Implementation** — Register endpoint (API), verify HMAC signature (Python example)
4. **Bolt Scraper Example** — Full `website_job.completed` payload, including `download_csv_url` and inline `results[]`
5. **Docs link** — Webhook replay endpoint
6. **CTA** — Free trial

## Key API Accuracy Notes

| Claim | Status |
|---|---|
| Register endpoint: `POST /api/v1/website/webhooks` | ✅ |
| Max 5 webhook endpoints per account | ✅ |
| Event name: `website_job.completed` | ✅ |
| Payload includes `download_csv_url` (signed, 24h) | ✅ |
| Payload includes first 100 results inline (`is_truncated: true`) | ✅ |
| HMAC-SHA256 signature in `X-Bolt-Signature` header | ✅ |
| Replay endpoint: `POST /api/v1/website/webhooks/:webhookId/replay/:jobId` | ✅ |
| Replay identified by `X-Bolt-Webhook-Replay: true` header | ✅ |

## Language Rules (Critical for this blog)

- ✅ "automated webhook callback" — the POST is dispatched after job completion, not in real-time
- ✅ "webhook delivers" / "receives a callback"
- ❌ "instant callback" — implies zero latency; delivery may be delayed by network or retries
- ❌ "fires instantly" / "real-time" — avoid
- ❌ Real emails/phones in payload examples (use `example-co.com`, `+15550100192`)
- ❌ Bare `Bearer YOUR_API_KEY` (use `Bearer <YOUR_API_KEY>`)

## Code Example Data

All payload/code examples use:
- `https://example-co.com` for URL
- `hello@example-co.com` for email
- `+15550100192` for phone (555 fictional range)

## Cross-links Out

- [Pillar guide](/blogs/guides/extract-emails-social-links-website-scraper-api/)
- [Lead enrichment guide](/blogs/guides/enrich-lead-lists-website-scraper-api/)
- [Google Sheets integration](/blogs/guides/connect-website-scraper-api-google-sheets-airtable/)
- [Competitor monitoring](/blogs/guides/competitor-website-monitoring-scraper-api/)

## Last Audited

2026-09-19 — Inline `border-left` styles removed; synthetic payload data; bearer token sanitised to `<YOUR_API_KEY>`; "instant callback" → "automated webhook callback"; webhook language throughout corrected.
