Skip to content

Events Reference

This page lists the events that ScrapeNest can send to your webhook endpoints. Endpoints subscribe to any of: job.created, job.completed, artifact.ready, schedule.run_skipped, schedule.auto_paused, schedule.change_detected, and schedule.monitor_activated.

Monitors emit schedule.* events

Monitoring events use the schedule. prefix for backward compatibility. In their payloads, schedule_id is the monitor id and schedule_name is the monitor name - they refer to the same resource you manage under /v1/monitors.

Envelope

Every webhook event is wrapped in a standard envelope.

{
  "event_id": "2b1f0e63-2c4b-4c40-9cb1-5d1466e9f6da",
  "event_type": "job.completed",
  "version": "1.0.0",
  "schema_ref": "schemas/webhooks/v1/job.completed.json",
  "occurred_at": "2024-01-01T12:03:10Z",
  "org_id": "b3c0b88f-...",
  "org_slug": "acme",
  "data": { ... }
}
Field Description
event_id Unique identifier for this specific event occurrence.
event_type The type of event (e.g., job.completed).
version Event schema version.
schema_ref Schema reference for this event type.
occurred_at Timestamp when the event happened.
org_id Organization identifier for the event.
org_slug Organization slug for the event.
data The event-specific payload.

job.created

Fired when a job is successfully accepted and queued.

{
  "event_id": "2b1f0e63-2c4b-4c40-9cb1-5d1466e9f6da",
  "event_type": "job.created",
  "occurred_at": "2024-01-01T12:03:10Z",
  "org_id": "b3c0b88f-...",
  "org_slug": "acme",
  "data": {
    "job_id": "b3c0b88f-...",
    "job_type": "light",
    "status": "queued",
    "target_url": "https://example.com",
    "created_at": "2024-01-01T12:03:10Z"
  }
}

job.completed

Fired when a job finishes successfully.

{
  "event_id": "2b1f0e63-2c4b-4c40-9cb1-5d1466e9f6da",
  "event_type": "job.completed",
  "occurred_at": "2024-01-01T12:03:10Z",
  "org_id": "b3c0b88f-...",
  "org_slug": "acme",
  "data": {
    "job_id": "b3c0b88f-...",
    "status": "succeeded",
    "artifact_count": 1,
    "duration_ms": 1250,
    "completed_at": "2024-01-01T12:00:05Z"
  }
}

job.completed (failed)

Fired when a job fails after all retries (status is failed).

{
  "event_id": "2b1f0e63-2c4b-4c40-9cb1-5d1466e9f6da",
  "event_type": "job.completed",
  "occurred_at": "2024-01-01T12:03:10Z",
  "org_id": "b3c0b88f-...",
  "org_slug": "acme",
  "data": {
    "job_id": "b3c0b88f-...",
    "status": "failed",
    "failure_reason": "timeout",
    "duration_ms": 30000,
    "completed_at": "2024-01-01T12:00:05Z"
  }
}

artifact.ready

Fired when a specific artifact (e.g., screenshot, HTML) is uploaded and ready for download.

{
  "event_id": "2b1f0e63-2c4b-4c40-9cb1-5d1466e9f6da",
  "event_type": "artifact.ready",
  "occurred_at": "2024-01-01T12:03:10Z",
  "org_id": "b3c0b88f-...",
  "org_slug": "acme",
  "data": {
    "job_id": "b3c0b88f-...",
    "artifact_id": "9e8e64d4-...",
    "artifact_type": "screenshot",
    "byte_size": 204800,
    "content_hash": "sha256:...",
    "created_at": "2024-01-01T12:00:05Z",
    "download_url": "https://api.scrapenest.com/v1/artifacts/...",
    "expires_at": "2024-01-01T12:15:05Z"
  }
}

schedule.run_skipped

Fired when a scheduled run was intentionally not created - you were out of credits (skipped_quota) or the engine is no longer included in your plan (skipped_not_allowed). A skipped run costs nothing. Successful scheduled runs emit the normal job.created and job.completed events.

{
  "event_id": "7d2c0e1a-9b3f-4a21-8c77-0f1e2d3c4b5a",
  "event_type": "schedule.run_skipped",
  "occurred_at": "2024-01-01T13:00:00Z",
  "org_id": "b3c0b88f-...",
  "org_slug": "acme",
  "data": {
    "schedule_id": "aaaaaaaa-bbbb-4ccc-8ddd-eeeeeeeeeeee",
    "schedule_name": "hourly-homepage",
    "run_status": "skipped_quota",
    "reason": "Monthly job quota reached.",
    "fired_at": "2024-01-01T13:00:00Z"
  }
}

schedule.auto_paused

Fired when ScrapeNest automatically paused a monitor for you. The reason tells you why:

  • monitor_blocked - the monitor's scrapes did not deliver content for 3 consecutive runs (the target kept blocking or the scrapes failed), so it was paused to stop running checks that cannot succeed. Try a higher engine tier (stealth) or adjust the target, then resume it.
  • interval_too_frequent, engine_not_available, schedule_limit, monitoring_not_available - a plan downgrade left the monitor outside what your new plan permits. Re-enable it after upgrading, or edit it to fit the new plan.
{
  "event_id": "5f1a2b3c-4d5e-6f70-8a9b-0c1d2e3f4a5b",
  "event_type": "schedule.auto_paused",
  "occurred_at": "2024-01-01T14:00:00Z",
  "org_id": "b3c0b88f-...",
  "org_slug": "acme",
  "data": {
    "schedule_id": "aaaaaaaa-bbbb-4ccc-8ddd-eeeeeeeeeeee",
    "schedule_name": "every-minute-stealth",
    "reason": "monitor_blocked",
    "paused_at": "2024-01-01T14:00:00Z"
  }
}

schedule.change_detected

Fired when a monitor with change detection enabled finds that the watched page (or the selected part of it) changed since the previous run. change_ratio is the fraction of the watched content that changed (0-1). diff_download_url is a short-lived signed link to the before/after diff. Sub-threshold or debounced changes are still recorded in the change history but do not fire this event.

{
  "event_id": "9a8b7c6d-5e4f-4a3b-9c2d-1e0f2a3b4c5d",
  "event_type": "schedule.change_detected",
  "occurred_at": "2024-01-01T15:00:00Z",
  "org_id": "b3c0b88f-...",
  "org_slug": "acme",
  "data": {
    "schedule_id": "aaaaaaaa-bbbb-4ccc-8ddd-eeeeeeeeeeee",
    "schedule_name": "competitor-pricing",
    "change_id": "16bb99ce-796d-4de6-8885-01a7ac3a6f1b",
    "job_id": "0922ddfc-69b0-4306-bbb0-5fe503148593",
    "old_fingerprint": "sha256:aaa1",
    "new_fingerprint": "sha256:bbb2",
    "change_ratio": 0.25,
    "diff_download_url": "https://.../16bb99ce....diff?...",
    "detected_at": "2024-01-01T15:00:00Z"
  }
}

schedule.monitor_activated

Fired once when a monitor captures its reference version on the first evaluated run. This confirms monitoring is live - it is not a change alert. Subsequent changes fire schedule.change_detected.

{
  "event_id": "1f2e3d4c-5b6a-4978-8c6d-5e4f3a2b1c0d",
  "event_type": "schedule.monitor_activated",
  "occurred_at": "2024-01-01T13:00:00Z",
  "org_id": "b3c0b88f-...",
  "org_slug": "acme",
  "data": {
    "schedule_id": "aaaaaaaa-bbbb-4ccc-8ddd-eeeeeeeeeeee",
    "schedule_name": "competitor-pricing",
    "job_id": "0922ddfc-69b0-4306-bbb0-5fe503148593",
    "captured_at": "2024-01-01T13:00:00Z"
  }
}