SteveSignalsDocs

Event reference

Ads events

The webhook event for Google, Meta and LinkedIn ads: every key, its type and a real event for each network.

An ads event fires when a tracked competitor starts a new ad on Google, Meta (Facebook, Instagram, Messenger) or LinkedIn, and again when that ad stops, resumes or changes its copy. One ad is one event per change.

eventType
ads
subEventType
google_ad · meta_ad · linkedin_ad
signalType
ads.new for a new ad (action: "new"), ads.updated when it stops, resumes or its copy changes (action: "updated"). ads.removed is in the schema but never sent.
Platform field
adsResponse (same value as metadata)
Tracker
Ads
relevance
Always { "status": "unjudged" }: ads are delivered as published

How to read this page

Every ads body has the common fields (eventId, competitor, detectedAt, …) plus one platform object. That object is sent twice, under adsResponse and under metadata, with the same values. Pick one and ignore the other.

Fields every ad has

These keys are in adsResponse for all three networks. platform tells you which network it is.

adsResponse · all networks
platform
'google'|'meta'|'linkedin'
The ad network. Matches subEventType (google → google_ad).
adId
string
The network's own ad id. Google: the creative id (CR…). Meta: the Ad Library id. LinkedIn: the Ad Library id.
title
string|null
The ad headline. null when the network shows no headline (most Google ads).
text
string|null
The ad body copy. null when the network gives none.
url
string|null
A public link to the ad.
author
object|null
Who runs the ad: { name: string, handle: string | null, url: string | null }.
media
object[]
Images and videos: { type: 'image' | 'video' | 'document', url: string }. Can be an empty array.
metrics
object|null
Numbers the network gives, as { [name]: number }. Usually null for ads.
format
string|null
The ad format as the network names it, for example text, video, single_image.
isActive
boolean|null
true while the ad is running, false once it stopped, null when unknown.
startedAt
string|null
When the ad started, ISO 8601 (2025-07-30T14:52:54.000Z).
endedAt
string|null
When the ad stopped. null while it still runs.
previewUrl
string|null
A link that opens the ad in the network's transparency tool.

subEventType: "google_ad". Google adds one key.

adsResponse · google only
daysShown
number|null
How many days Google showed the ad, as of the moment Signals saw it. It grows while the ad runs, so read it as "at least this many days".

Most Google ads have no text

Google's Ads Transparency Center often gives no headline or copy, only an image of the ad. Expect title: null and text: null, and use media[0].url or previewUrl to show the ad.

Event · google_ad (HubSpot)Real event from a Signals run
json
1{
2 "version": 1,
3 "eventId": "617692b7-2c85-499c-bc3b-6810f3673190",
4 "eventType": "ads",
5 "subEventType": "google_ad",
6 "action": "new",
7 "signalType": "ads.new",
8 "source": "ads",
9 "orgId": "org_3KikADUjsyXrUJ4RJhWpwcp98Yf",
10 "trackerId": "3c8918c2-7011-4518-9185-31344c83861f",
11 "projectId": "2738158a-08fd-4fc4-912d-43d4c328bc10",
12 "runId": "b0b5b63b-fc3d-4eef-84ab-879e2335c06d",
13 "competitor": {
14 "name": "HubSpot",
15 "domain": "hubspot.com",
16 "subjectKey": "google:AR10072600183532683265@-|meta:https://www.facebook.com/hubspot|linkedin:hubspot"
17 },
18 "occurredAt": "2025-07-30T14:52:54.000Z",
19 "detectedAt": "2026-10-27T20:28:40.624Z",
20 "sequence": 254,
21 "itemKey": "ads-google-CR00389017023612452865",
22 "relevance": {
23 "status": "unjudged"
24 },
25 "adsResponse": {
26 "platform": "google",
27 "title": null,
28 "text": null,
29 "url": null,
30 "author": {
31 "name": "Hubspot, Inc.",
32 "handle": null,
33 "url": null,
34 "imageUrl": null
35 },
36 "media": [
37 {
38 "type": "image",
39 "url": "https://tpc.googlesyndication.com/archive/simgad/13161062113949559550"
40 }
41 ],
42 "metrics": null,
43 "adId": "CR00389017023612452865",
44 "format": "text",
45 "isActive": true,
46 "startedAt": "2025-07-30T14:52:54.000Z",
47 "endedAt": null,
48 "previewUrl": "https://adstransparency.google.com/advertiser/AR10072600183532683265/creative/CR00389017023612452865?region=anywhere",
49 "daysShown": 455
50 },
51 "metadata": {
52 "platform": "google",
53 "title": null,
54 "text": null,
55 "url": null,
56 "author": {
57 "name": "Hubspot, Inc.",
58 "handle": null,
59 "url": null,
60 "imageUrl": null
61 },
62 "media": [
63 {
64 "type": "image",
65 "url": "https://tpc.googlesyndication.com/archive/simgad/13161062113949559550"
66 }
67 ],
68 "metrics": null,
69 "adId": "CR00389017023612452865",
70 "format": "text",
71 "isActive": true,
72 "startedAt": "2025-07-30T14:52:54.000Z",
73 "endedAt": null,
74 "previewUrl": "https://adstransparency.google.com/advertiser/AR10072600183532683265/creative/CR00389017023612452865?region=anywhere",
75 "daysShown": 455
76 }
77}
A new Google ad in the Signals feed
The same Google ad in the app. Status, running time, format and start date come from the fields above.

Meta ads

subEventType: "meta_ad". One Meta ad covers Facebook, Instagram and Messenger. Meta has no extra keys beyond the shared list.

Event · meta_ad (HubSpot)Real event from a Signals run
json
1{
2 "version": 1,
3 "eventId": "8d8d8e1f-149d-4cbd-aee3-3e88b0d7d301",
4 "eventType": "ads",
5 "subEventType": "meta_ad",
6 "action": "new",
7 "signalType": "ads.new",
8 "source": "ads",
9 "orgId": "org_3KikADUjsyXrUJ4RJhWpwcp98Yf",
10 "trackerId": "3c8918c2-7011-4518-9185-31344c83861f",
11 "projectId": "2738158a-08fd-4fc4-912d-43d4c328bc10",
12 "runId": "b0b5b63b-fc3d-4eef-84ab-879e2335c06d",
13 "competitor": {
14 "name": "HubSpot",
15 "domain": "hubspot.com",
16 "subjectKey": "google:AR10072600183532683265@-|meta:https://www.facebook.com/hubspot|linkedin:hubspot"
17 },
18 "occurredAt": "2026-10-27T07:00:00.000Z",
19 "detectedAt": "2026-10-27T20:28:40.624Z",
20 "sequence": 294,
21 "itemKey": "ads-meta-1629444768536489",
22 "relevance": {
23 "status": "unjudged"
24 },
25 "adsResponse": {
26 "platform": "meta",
27 "title": "Top bei der KI-Suche",
28 "text": "Top bei der KI-Suche",
29 "url": "https://www.hubspot.de/products/aeo?utm_source=facebook&utm_medium=paid_brandstrategy&utm_campaign=BrandStrategy_VideoViews_DE_EMEA_DACH_GBC_AnnoyinglyGood-Q4-2026_FB_Downmarket-Founder_AEO-15",
30 "author": {
31 "name": "HubSpot",
32 "handle": null,
33 "url": null,
34 "imageUrl": null
35 },
36 "media": [
37 {
38 "type": "video",
39 "url": "https://video.fbaq13-1.fna.fbcdn.net/o1/v/t2/f2/m366/AQP1LJAF5-nhG0Rw4NgyVCXkevByhn2-Y8taPwow9GIv4XbWHuu8ZmCS8_XZLtW2A-prpHTzQLmPBe0cgeBKS19w1zDNpv5ybTNbcjdtvNJ76w.mp4?_nc_cat=111&_nc_oc=AdpXGVNNLxQUcFFtGGzDKhLmEoED9-eYZlBjz2rzLlx-JmFhJKw6aEnNX9OhBfZv2Hw&_nc_sid=b66105&_nc_ht=video.fbaq13-1.fna.fbcdn.net&_nc_ohc=ST2GJvVZG6AQ7kNvwHS0NUW&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5WSV9VU0VDQVNFX1BST0RVQ1RfVFlQRS4uQzMuNzIwLmRhc2hfaDI2NC1iYXNpYy1nZW4yXzcyMHAiLCJ4cHZfYXNzZXRfaWQiOjE0ODU0NzQ5NTAwODE3NDMsImFzc2V0X2FnZV9kYXlzIjoyMSwidmlfdXNlY2FzZV9pZCI6MTAxMzksImR1cmF0aW9uX3MiOjE1LCJ1cmxnZW5fc291cmNlIjoid3d3In0%3D&ccb=17-1&vs=3def2f9c4e6a0c28&_nc_vs=HBksFQIYRWZiX2VwaGVtZXJhbC84OTgyN0JFMzgyQkM0Q0NFQjE5QUFGNDhFNTZFMjQyNV9tdF8xX3ZpZGVvX2Rhc2hpbml0Lm1wNBUAAsgBEgAVAhhAZmJfcGVybWFuZW50LzQxNEI2MUFFMjJCMDQzRTE5QkRGQ0VCQjQwOTQ1Qzk0X2F1ZGlvX2Rhc2hpbml0Lm1wNBUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACaes8frgsKjBRUCKAJDMywXQC4AAAAAAAAYGWRhc2hfaDI2NC1iYXNpYy1nZW4yXzcyMHARAHUAZbaeAQA&_nc_gid=sukKoLaJq1J9isAkMo9EDA&_nc_ss=78180&_nc_map=urlgen_bucketless&_nc_zt=28&oh=00_AQP3-WzimxnCTMWnwqONrEKnCBjF8kFq4xqPGwo4K1y9uQ&oe=6AE6C03D"
40 }
41 ],
42 "metrics": null,
43 "adId": "1629444768536489",
44 "format": "video",
45 "isActive": true,
46 "startedAt": "2026-10-27T07:00:00.000Z",
47 "endedAt": null,
48 "previewUrl": "https://www.facebook.com/ads/library/?id=1629444768536489"
49 },
50 "metadata": {
51 "platform": "meta",
52 "title": "Top bei der KI-Suche",
53 "text": "Top bei der KI-Suche",
54 "url": "https://www.hubspot.de/products/aeo?utm_source=facebook&utm_medium=paid_brandstrategy&utm_campaign=BrandStrategy_VideoViews_DE_EMEA_DACH_GBC_AnnoyinglyGood-Q4-2026_FB_Downmarket-Founder_AEO-15",
55 "author": {
56 "name": "HubSpot",
57 "handle": null,
58 "url": null,
59 "imageUrl": null
60 },
61 "media": [
62 {
63 "type": "video",
64 "url": "https://video.fbaq13-1.fna.fbcdn.net/o1/v/t2/f2/m366/AQP1LJAF5-nhG0Rw4NgyVCXkevByhn2-Y8taPwow9GIv4XbWHuu8ZmCS8_XZLtW2A-prpHTzQLmPBe0cgeBKS19w1zDNpv5ybTNbcjdtvNJ76w.mp4?_nc_cat=111&_nc_oc=AdpXGVNNLxQUcFFtGGzDKhLmEoED9-eYZlBjz2rzLlx-JmFhJKw6aEnNX9OhBfZv2Hw&_nc_sid=b66105&_nc_ht=video.fbaq13-1.fna.fbcdn.net&_nc_ohc=ST2GJvVZG6AQ7kNvwHS0NUW&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5WSV9VU0VDQVNFX1BST0RVQ1RfVFlQRS4uQzMuNzIwLmRhc2hfaDI2NC1iYXNpYy1nZW4yXzcyMHAiLCJ4cHZfYXNzZXRfaWQiOjE0ODU0NzQ5NTAwODE3NDMsImFzc2V0X2FnZV9kYXlzIjoyMSwidmlfdXNlY2FzZV9pZCI6MTAxMzksImR1cmF0aW9uX3MiOjE1LCJ1cmxnZW5fc291cmNlIjoid3d3In0%3D&ccb=17-1&vs=3def2f9c4e6a0c28&_nc_vs=HBksFQIYRWZiX2VwaGVtZXJhbC84OTgyN0JFMzgyQkM0Q0NFQjE5QUFGNDhFNTZFMjQyNV9tdF8xX3ZpZGVvX2Rhc2hpbml0Lm1wNBUAAsgBEgAVAhhAZmJfcGVybWFuZW50LzQxNEI2MUFFMjJCMDQzRTE5QkRGQ0VCQjQwOTQ1Qzk0X2F1ZGlvX2Rhc2hpbml0Lm1wNBUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACaes8frgsKjBRUCKAJDMywXQC4AAAAAAAAYGWRhc2hfaDI2NC1iYXNpYy1nZW4yXzcyMHARAHUAZbaeAQA&_nc_gid=sukKoLaJq1J9isAkMo9EDA&_nc_ss=78180&_nc_map=urlgen_bucketless&_nc_zt=28&oh=00_AQP3-WzimxnCTMWnwqONrEKnCBjF8kFq4xqPGwo4K1y9uQ&oe=6AE6C03D"
65 }
66 ],
67 "metrics": null,
68 "adId": "1629444768536489",
69 "format": "video",
70 "isActive": true,
71 "startedAt": "2026-10-27T07:00:00.000Z",
72 "endedAt": null,
73 "previewUrl": "https://www.facebook.com/ads/library/?id=1629444768536489"
74 }
75}
A new Meta ad in the Signals feed
A real Meta video ad. The title and text are the ad's own copy.

LinkedIn ads

subEventType: "linkedin_ad". LinkedIn adds five keys.

adsResponse · linkedin only
cta
string|null
The button text, for example Learn more.
landingUrl
string|null
Where the ad sends people, with its tracking parameters.
paidBy
string|null
The legal name that paid for the ad.
postedBy
object|null
For thought-leader ads, the person it is posted as: { name: string, title: string | null, imageUrl: string | null, profileUrl: string | null }. null for company ads.
logoUrl
string|null
The advertiser's logo.
Event · linkedin_ad (HubSpot)Real event from a Signals run
json
1{
2 "version": 1,
3 "eventId": "156a24cb-28b1-4923-a5ec-75a5939634fb",
4 "eventType": "ads",
5 "subEventType": "linkedin_ad",
6 "action": "new",
7 "signalType": "ads.new",
8 "source": "ads",
9 "orgId": "org_3KikADUjsyXrUJ4RJhWpwcp98Yf",
10 "trackerId": "3c8918c2-7011-4518-9185-31344c83861f",
11 "projectId": "2738158a-08fd-4fc4-912d-43d4c328bc10",
12 "runId": "b0b5b63b-fc3d-4eef-84ab-879e2335c06d",
13 "competitor": {
14 "name": "HubSpot",
15 "domain": "hubspot.com",
16 "subjectKey": "google:AR10072600183532683265@-|meta:https://www.facebook.com/hubspot|linkedin:hubspot"
17 },
18 "occurredAt": "2026-10-22T00:00:00.000Z",
19 "detectedAt": "2026-10-27T20:28:40.624Z",
20 "sequence": 574,
21 "itemKey": "ads-linkedin-1605968824",
22 "relevance": {
23 "status": "unjudged"
24 },
25 "adsResponse": {
26 "platform": "linkedin",
27 "title": "Ein CRM – clever und selbst aktualisierend.",
28 "text": "Dein CRM ist nur so gut wie seine Daten. Das HubSpot Smart CRM aktualisiert sich selbst; d. h. für dein Team: weniger Admin-Aufwand – für vollen Fokus auf das Closing.",
29 "url": "https://www.linkedin.com/ad-library/detail/1605968824",
30 "author": {
31 "name": "HubSpot",
32 "handle": null,
33 "url": null,
34 "imageUrl": null
35 },
36 "media": [
37 {
38 "type": "video",
39 "url": "https://dms.licdn.com/playlist/vid/v2/D4E10AQF4aZ8Jii5OlQ/progressive-servable-video/B4EaFfZt56HoAc-/0/1792601942543?e=2147483647&v=beta&t=hAVp3eJnt7dNuLBvGRM701Y9_Fgq1zV789apgWdkwqQ"
40 }
41 ],
42 "metrics": null,
43 "adId": "1605968824",
44 "format": "video",
45 "isActive": true,
46 "startedAt": "2026-10-22T00:00:00.000Z",
47 "endedAt": null,
48 "previewUrl": null,
49 "cta": "Mehr erfahren",
50 "landingUrl": "https://www.hubspot.de/products/crm/ai-crm-lp?wfuid=311b3a3a0a.1790602582&wfsid=1790695501-99a0-9a79-371940b034b9?utm_source=linkedin&utm_medium=paid_brandstrategy&utm_campaign=BrandStrategy_VideoViews_DE_EMEA_DACH_GBC_AnnoyinglyGood-Q4-2026_InFeed-LAN_Downmarket-Founder_AI-CRM-30&trk=ad_library_ad_preview_headline_content",
51 "paidBy": "HubSpot, Inc.",
52 "postedBy": null,
53 "logoUrl": "https://media.licdn.com/dms/image/v2/C4D0BAQF8H-SLmMDZlA/company-logo_100_100/company-logo_100_100/0/1646683330132/hubspot_logo?e=1794441600&v=beta&t=ELYp0k9E4bEV_1FSDO-u7QRhufw2uo1tOCRnlNYT9lg"
54 },
55 "metadata": {
56 "platform": "linkedin",
57 "title": "Ein CRM – clever und selbst aktualisierend.",
58 "text": "Dein CRM ist nur so gut wie seine Daten. Das HubSpot Smart CRM aktualisiert sich selbst; d. h. für dein Team: weniger Admin-Aufwand – für vollen Fokus auf das Closing.",
59 "url": "https://www.linkedin.com/ad-library/detail/1605968824",
60 "author": {
61 "name": "HubSpot",
62 "handle": null,
63 "url": null,
64 "imageUrl": null
65 },
66 "media": [
67 {
68 "type": "video",
69 "url": "https://dms.licdn.com/playlist/vid/v2/D4E10AQF4aZ8Jii5OlQ/progressive-servable-video/B4EaFfZt56HoAc-/0/1792601942543?e=2147483647&v=beta&t=hAVp3eJnt7dNuLBvGRM701Y9_Fgq1zV789apgWdkwqQ"
70 }
71 ],
72 "metrics": null,
73 "adId": "1605968824",
74 "format": "video",
75 "isActive": true,
76 "startedAt": "2026-10-22T00:00:00.000Z",
77 "endedAt": null,
78 "previewUrl": null,
79 "cta": "Mehr erfahren",
80 "landingUrl": "https://www.hubspot.de/products/crm/ai-crm-lp?wfuid=311b3a3a0a.1790602582&wfsid=1790695501-99a0-9a79-371940b034b9?utm_source=linkedin&utm_medium=paid_brandstrategy&utm_campaign=BrandStrategy_VideoViews_DE_EMEA_DACH_GBC_AnnoyinglyGood-Q4-2026_InFeed-LAN_Downmarket-Founder_AI-CRM-30&trk=ad_library_ad_preview_headline_content",
81 "paidBy": "HubSpot, Inc.",
82 "postedBy": null,
83 "logoUrl": "https://media.licdn.com/dms/image/v2/C4D0BAQF8H-SLmMDZlA/company-logo_100_100/company-logo_100_100/0/1646683330132/hubspot_logo?e=1794441600&v=beta&t=ELYp0k9E4bEV_1FSDO-u7QRhufw2uo1tOCRnlNYT9lg"
84 }
85}
A new LinkedIn ad in the Signals feed
A real LinkedIn ad. Button, landing page and paid by come from cta, landingUrl and paidBy.

Removed ads

The schema allows action: "removed" (signalType: "ads.removed"). Today Signals does not send it for ads. If it ever arrives, adsResponse and metadata are null, and occurredAt is null. See Event shape → removed events.