Webhooks allow PageCrawl to send HTTP POST requests to any external URL whenever a page change is detected or an error occurs. Use webhooks to connect PageCrawl with custom applications, automation platforms, databases, or any service that accepts HTTP requests.
Setting Up a Webhook
- Go to Settings > Webhooks (found under "Other" in the sidebar)
- Click New webhook
- Enter your target URL and configure the options below
- Click Save
Configuration Options
Target URL: The HTTP endpoint that will receive the POST request.
Event Triggers: Choose which events fire the webhook:
- Change detected - Fires when page content changes
- Error - Fires when a check fails (timeout, blocked, 404, etc.)
- Or both
Page Filter: Optionally limit which pages trigger the webhook. You can filter by:
- All pages in workspace (default)
- By tag
- By folder
- By website/domain
- Specific monitors
If no filter is set, the webhook fires for all pages in the workspace.
Active/Inactive Toggle: Disable a webhook without deleting it.
Payload Fields
By default, webhooks send all available fields. You can customize the payload by selecting only the fields you need:
| Category | Fields |
|---|---|
| Basic | id, title, status, event_type, changed_at, visual_diff, difference, human_difference, short_summary |
| Tracked Elements | content_type, elements (array of tracked element data) |
| Differences | markdown_difference, html_difference |
| Images | text_difference_image, page_screenshot_image |
| Page Info | page metadata, page_elements array |
| Content | contents, original (for extracted values) |
| Comparison | previous_check data |
| JSON | json, json_patch |
| AI | ai_summary, ai_priority_score |
Testing Webhooks
After saving a webhook, click the Test button to send a sample payload to your endpoint. This verifies the connection works before relying on it for real notifications.
Example Payload
{
"id": 12345,
"title": "Product Page - Example.com",
"status": "ok",
"event_type": "change_detected",
"content_type": "fullpage",
"changed_at": "2026-01-15T10:30:00Z",
"visual_diff": 12.5,
"difference": 3,
"human_difference": "3 lines changed",
"short_summary": "Price updated from $99 to $89",
"ai_summary": "The product price was reduced by 10%.",
"ai_priority_score": 85
}The page_elements Array
When you include the Page Info fields, the payload contains a page_elements array with one entry per tracked element on the monitor. Each entry includes two identifiers:
element_id- the stable id of the tracked element. This id stays the same across every check, so use it to match a value to a specific tracked element in your own system.id- the id of this particular reading (the per-check record). This changes on every check, so do not use it as a stable key.
{
"id": 12345,
"title": "Product Page - Example.com",
"page_elements": [
{
"id": 998877,
"element_id": 4012,
"label": "Price",
"type": "price",
"contents": "89.00",
"original": "Price: $89.00",
"difference": -10,
"human_difference": "Price dropped 10%",
"hash": "ab12cd34",
"changed": true,
"short_summary": "Price updated from $99 to $89"
}
]
}The previous_check.page_elements array (when included) uses the same shape, so you can pair an element's current and prior values by element_id.
Use Cases
- Custom dashboards - Feed change data into your own monitoring dashboard
- Database logging - Store all detected changes in your own database
- Automation workflows - Trigger actions in tools like n8n, Make, or custom scripts
- Alerting systems - Forward high-priority changes to PagerDuty, Opsgenie, or similar tools
Notes
- Webhooks send data as HTTP POST with a JSON body
- If you need Slack, Discord, or Teams notifications, use the dedicated integrations instead, as they format messages correctly for those platforms
- Webhooks are available on all plans
Related Articles
- Full API Reference - Interactive OpenAPI reference for the complete webhook payload schema and all related API endpoints
- API and Webhooks for Custom Integrations - Authentication and endpoint overview
