Browse the docs

Webhooks

Send competitor alerts to your own endpoint or to a Discord, Microsoft Teams or Slack channel, and build on the alert payload.


Use a webhook when alerts need to land somewhere other than email or the Slack app: your own system, an automation tool that accepts incoming webhooks, or a Discord or Microsoft Teams channel.

Webhooks are available on Pro, Growth and Teams.

Add a webhook

  1. Open your account menu (your avatar) and choose Integrations.
  2. On the Webhooks card, click Connect. If you already have a webhook, click Manage.
  3. Click Add Webhook.
  4. Enter a Name you will recognise, the URL to send to, and a Format.
  5. Click Add Webhook.

The URL must be a public http or https address. Use https. Addresses on private or internal networks are refused.

You can add more than one webhook. Every webhook receives the same alerts.

Webhooks belong to your own login. On a team, alerts for a competitor go to the webhooks of the teammate who added that competitor.

Formats

FormatUse it for
Generic JSONYour own code or an automation tool. The payload is described below.
Slack-compatibleA Slack incoming webhook URL
Discord-compatibleA Discord channel webhook URL
Teams-compatibleA Microsoft Teams incoming webhook URL

The chat formats post a short message with the competitor, the kind of change, its importance, a summary and a link back to SpyGlow. For Slack, the Slack integration gives fuller messages and lets you pick the channel from a list.

Test it

Each webhook in the list has a send button (the paper plane icon). Click it to send a test payload. You see "Test payload sent!" when your endpoint accepts it, or "Failed to send test payload" when it does not. The test uses a sample competitor called "Test Competitor" on example.com, so you can tell it apart from real alerts.

Which alerts are sent

A webhook gets an alert when all three are true:

  • Webhook is on for that competitor, either directly or through Use global alert defaults. Webhook starts off for every new competitor. Change it in the competitor's Settings tab, under Alert Preferences. See Alerts and notifications.
  • The change passes that competitor's alert level.
  • The change scores 5 or more out of 10.

The payload

SpyGlow sends an HTTP POST with a JSON body and these headers:

  • Content-Type: application/json
  • User-Agent: SpyGlow-Webhook/1.0

A Generic JSON alert looks like this:

{
  "event": "competitor_change",
  "timestamp": "2026-10-27T14:05:12.481Z",
  "competitor": {
    "id": "66f1c0a2b9e4d81c2a7f3b10",
    "name": "Example Co",
    "domain": "example.com"
  },
  "change": {
    "id": "6721f0c2a9b4e81d3c5f7a10",
    "type": "content_change",
    "importance": 8,
    "page": {
      "title": "Pricing",
      "path": "/pricing",
      "url": "https://example.com/pricing"
    },
    "summary": "Example Co added an annual plan and raised the price of its Team tier.",
    "detected_at": "2026-10-27T14:04:58.903Z",
    "view_url": "https://www.spyglow.com/changes/consolidated/6721f0c2a9b4e81d3c5f7a10"
  }
}
FieldWhat it holds
eventAlways competitor_change
timestampWhen SpyGlow sent the alert, in UTC
competitor.id, name, domainThe competitor as it appears in SpyGlow
change.idAn ID for this alert
change.typeThe kind of change, for example content_change. Treat it as a label, since new values can appear.
change.importanceThe score, from 1 to 10
change.page.title, pathThe page that changed. When an alert covers several pages, this is the first one.
change.page.urlThe full page address. It can be missing.
change.summaryA plain-text summary of the change
change.detected_atWhen SpyGlow found the change, in UTC
change.view_urlA link to the change in SpyGlow

Write your code so a missing field does not break it.

If a delivery fails

SpyGlow sends each alert once and does not retry. If your endpoint is down, does not reply within 10 seconds, or replies with a status outside the 2xx range, that alert does not reach the webhook. SpyGlow does not list failed deliveries.

Plan for this:

  • Reply with a 2xx status right away, then do any slow work afterwards.
  • Treat the Changes page as the full record. Every change SpyGlow finds is kept there, whether or not a webhook received it.

Keep your URL private

SpyGlow does not sign webhook requests, so anyone who knows the URL could post to it. Use a long, hard-to-guess URL, keep it out of shared documents, and check that incoming data matches the payload above.

Stop or remove a webhook

  • To stop alerts from one competitor, turn off Webhook in that competitor's Alert Preferences.
  • To remove a webhook, open Integrations, click Manage on the Webhooks card, and click the trash icon next to it. Deliveries stop at once.

There is no pause switch. To pause a webhook, remove it and add it again later.