SteveSignalsDocs

Event reference

Website change events

The webhook event for competitor website changes: every key, the shape of each change and a sample body.

A website event fires when a tracked page changes in a way the judge keeps. One page change is one event. The event lists every change on the page in changes.

eventType
website
subEventType
website_change
signalType
website.changed for a changed page. website.page_added and website.page_removed exist in the schema but are never sent
Platform field
websiteResponse (same value as metadata)
relevance
Judged: { "status": "relevant", … }

How to read this page

Every website body has the common fields plus one websiteResponse object, sent twice (also as metadata). It has the item fields and two keys of its own. There is no platform key.

Fields

websiteResponse
title
string|null
The page title.
text
string|null
The first 2,000 characters of the page's Markdown after the change. The whole page is not sent.
url
string|null
The page URL. Same as pageUrl.
author
object|null
null for pages.
media
object[]
{ type: 'image' | 'video' | 'document', url: string }. Usually empty.
metrics
object|null
null for pages.
pageUrl
string
The page that changed.
changes
object[]
What changed, one entry per change. See below.

Each entry of changes has this shape:

changes[] · one change
type
'minor'|'major'
How big the judge rated the change.
title
string
A short name for the change (Breeze AI Credits Added).
description
string
One or two sentences on what changed.
previous
string
The excerpt that changed, before the change, as Markdown. A short snippet, not the whole page. When the section is new it reads like … was not present in the previous version.
current
string
The same excerpt after the change, as Markdown.
categories
string[]
Labels for the change (feature_update, product_launch). Free-form, treat as open.
Event · website_change (HubSpot)Sample with the exact shape (no real run yet)
json
1{
2 "version": 1,
3 "eventId": "df38433d-cc67-4467-ba3a-8892f7a50702",
4 "eventType": "website",
5 "subEventType": "website_change",
6 "action": "updated",
7 "signalType": "website.changed",
8 "source": "website",
9 "orgId": "org_3KikADUjsyXrUJ4RJhWpwcp98Yf",
10 "trackerId": "440b3b16-2000-484a-aa8b-7481d482f1dd",
11 "projectId": "2738158a-08fd-4fc4-912d-43d4c328bc10",
12 "runId": "8ba8ccfa-e9e5-4764-9feb-4b0e88a2ba4a",
13 "competitor": {
14 "name": "HubSpot",
15 "domain": "hubspot.com",
16 "subjectKey": "https://www.hubspot.com/pricing"
17 },
18 "occurredAt": "2026-10-27T15:08:27.064Z",
19 "detectedAt": "2026-10-27T15:08:27.064Z",
20 "sequence": 5,
21 "itemKey": "website-https://www.hubspot.com/pricing",
22 "relevance": {
23 "status": "relevant",
24 "confidence": 1,
25 "reasoning": "HubSpot added HubSpot Credits for Breeze AI agents to its Professional plan. No price changes were detected.",
26 "summary": "HubSpot added HubSpot Credits for Breeze AI agents to its Professional plan. No price changes were detected.",
27 "shortSummary": "Breeze AI Credits Added",
28 "categories": [
29 "feature_update",
30 "pricing_strategy"
31 ]
32 },
33 "websiteResponse": {
34 "title": "HubSpot Pricing",
35 "text": "Title: HubSpot Pricing\n\nURL Source: https://www.hubspot.com/pricing\n\nMarkdown Content:\n# Choose your plan\n\n## Professional\n\nEverything in Starter, plus marketing automation, custom reporting, omni-channel campaigns and HubSpot Credits for Breeze AI agents. …",
36 "url": "https://www.hubspot.com/pricing",
37 "author": null,
38 "media": [],
39 "metrics": null,
40 "pageUrl": "https://www.hubspot.com/pricing",
41 "changes": [
42 {
43 "type": "major",
44 "title": "Breeze AI Credits Added",
45 "description": "Added HubSpot Credits for Breeze AI agents to the Professional plan feature list.",
46 "previous": "# Choose your plan\n\n## Professional\n\nEverything in Starter, plus marketing automation, custom reporting and omni-channel campaigns. …",
47 "current": "# Choose your plan\n\n## Professional\n\nEverything in Starter, plus marketing automation, custom reporting, omni-channel campaigns and HubSpot Credits for Breeze AI agents. …",
48 "categories": [
49 "feature_update",
50 "pricing_strategy"
51 ]
52 }
53 ]
54 },
55 "metadata": {
56 "title": "HubSpot Pricing",
57 "text": "Title: HubSpot Pricing\n\nURL Source: https://www.hubspot.com/pricing\n\nMarkdown Content:\n# Choose your plan\n\n## Professional\n\nEverything in Starter, plus marketing automation, custom reporting, omni-channel campaigns and HubSpot Credits for Breeze AI agents. …",
58 "url": "https://www.hubspot.com/pricing",
59 "author": null,
60 "media": [],
61 "metrics": null,
62 "pageUrl": "https://www.hubspot.com/pricing",
63 "changes": [
64 {
65 "type": "major",
66 "title": "Breeze AI Credits Added",
67 "description": "Added HubSpot Credits for Breeze AI agents to the Professional plan feature list.",
68 "previous": "# Choose your plan\n\n## Professional\n\nEverything in Starter, plus marketing automation, custom reporting and omni-channel campaigns. …",
69 "current": "# Choose your plan\n\n## Professional\n\nEverything in Starter, plus marketing automation, custom reporting, omni-channel campaigns and HubSpot Credits for Breeze AI agents. …",
70 "categories": [
71 "feature_update",
72 "pricing_strategy"
73 ]
74 }
75 ]
76 }
77}

Long text values are shortened here with “ …”. Your endpoint gets the full text.

A website change in the Signals feed
The same kind of event in the app. The title and description come from changes[].