# Webhook Integration: Send Change Data to Any External Service

Source: PageCrawl.io Help Center
URL: https://pagecrawl.io/help/integrations/article/webhook-integration

---

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

1. Go to **Settings** > **Webhooks** (found under "Other" in the sidebar)
2. Click **New webhook**
3. Enter your target URL and configure the options below
4. Click **Save**

  [Image: Webhooks settings page with the Configured Webhooks list and the New webhook button]

### 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

```json
{
  "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.

```json
{
  "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](/developers) - Interactive OpenAPI reference for the complete webhook payload schema and all related API endpoints
- [API and Webhooks for Custom Integrations](/help/features/article/api-webhooks-for-custom-integrations.md) - Authentication and endpoint overview

---

Need more? The complete PageCrawl.io help center, with every article, is available as a single document at https://pagecrawl.io/llms-full.txt. Read it for context on anything this page does not cover.
