SteveSignalsDocs

Event reference

Job posting events

The webhook event for competitor job postings: every key, how updates list their changes and sample bodies for new, updated and removed jobs.

A jobs event fires when a tracked competitor opens a job, changes a key field of it, or closes it. One job is one event per change.

eventType
jobs
subEventType
job_posting
signalType
jobs.new for a new job (action: "new"), jobs.updated when a key field changed (action: "updated"), jobs.removed when the job closed (action: "removed")
Platform field
jobResponse (same value as metadata)
relevance
Always { "status": "unjudged" }: jobs are delivered as found

How to read this page

Every jobs body has the common fields plus one jobResponse object, sent twice (also as metadata). It has the item fields and the job fields below. There is no platform key. itemKey looks like job_postings-<jobId> in a webhook and job_postings|<jobId> in the pull API.

Fields

jobResponse
title
string
The job title.
text
string|null
The body text, when the board gives one. Can be null.
url
string|null
A public link to the job posting.
author
object|null
Usually null for jobs.
media
object[]
{ type: 'image' | 'video' | 'document', url: string }. Usually empty.
metrics
object|null
Usually null for jobs.
status
'open'|'closed'
open on jobs.new and jobs.updated. closed on jobs.removed.
jobId
string
The job's id on its board. Stable across its events.
atsType
string
The board the job was read from, for example greenhouse, lever, careers_page or google_jobs. Treat it as open: new boards appear without a version change.
boardUrl
string|null
The job board's URL.
department
string|null
The department, as the board names it.
team
string|null
The team, as the board names it.
category
string|null
The job category. Signals assigns it from a fixed list of 14: engineering, product, design, data, research, sales, marketing, customer_success, operations, finance, legal, people, it_security or other. It is not the board's own label: an AI classifier picks it from the job's title and department. null when the job could not be classified. Use department for the board's wording.
locations
object[]
Where the job is based: { raw: string, countryCode: string | null }. raw is the text from the board. countryCode is an ISO country code when Signals could tell. Once found, a location keeps its countryCode on later checks. Can be an empty array.
workplaceType
'remote'|'hybrid'|'onsite'|null
Where the work is done.
employmentType
'full_time'|'part_time'|'contract'|'intern'|'temporary'|null
The kind of contract.
postedAt
string|null
When the job was posted, ISO 8601, when the board says so.
applyUrl
string|null
Where candidates apply.
salary
object|null
The pay range: { min: number | null, max: number | null, currency: string | null, period: string | null, raw: string | null }. null when the job shows no pay.
changes
object[]
What changed. Filled only on jobs.updated. [] on jobs.new and jobs.removed.

What counts as an update

jobs.updated fires when one of these fields changes: title, department, team, locations, workplaceType, employmentType or salary. A change to the description, category, the dates (postedAt) or the links (url, applyUrl, boardUrl) does not fire it. Each entry of changes has this shape:

changes[] · one field change
field
'title'|'department'|'team'|'locations'|'workplaceType'|'employmentType'|'salary'
The field that changed.
before
string|null
The value before, as display text. null when it was not set.
after
string|null
The value now, as display text. null when it was removed.

The other fields in jobResponse hold the new values.

New jobs

jobs.new fires for a job that was not open at the last check. The first check sends every job that is open at that moment as jobs.new. A large company can produce thousands of events in one check.

Event · job_posting, new (Acme)Sample with the exact shape (no real run yet)
json
1{
2 "version": 1,
3 "eventId": "3f1c9a52-6b0e-4c3a-9d41-0a7d2b8e5f10",
4 "eventType": "jobs",
5 "subEventType": "job_posting",
6 "action": "new",
7 "signalType": "jobs.new",
8 "source": "job_postings",
9 "orgId": "org_3KikADUjsyXrUJ4RJhWpwcp98Yf",
10 "trackerId": "b13a7c58-02d4-4e9f-8a61-5f3c9e0d2b74",
11 "projectId": "2738158a-08fd-4fc4-912d-43d4c328bc10",
12 "runId": "5d2f7a14-9c3b-4e68-8f21-b7c4a0e19d36",
13 "competitor": {
14 "name": "Acme",
15 "domain": "acme.com",
16 "subjectKey": "jobs:acme.com"
17 },
18 "occurredAt": "2026-10-27T09:12:00.000Z",
19 "detectedAt": "2026-10-28T06:03:11.482Z",
20 "sequence": 301,
21 "itemKey": "job_postings-7421035",
22 "relevance": {
23 "status": "unjudged"
24 },
25 "jobResponse": {
26 "title": "Senior Product Marketing Manager",
27 "text": "Acme is hiring a Senior Product Marketing Manager to own positioning and launches for our analytics platform. You will work with product, sales and customer success to bring new features to market.",
28 "url": "https://boards.greenhouse.io/acme/jobs/7421035",
29 "author": null,
30 "media": [],
31 "metrics": null,
32 "status": "open",
33 "jobId": "7421035",
34 "atsType": "greenhouse",
35 "boardUrl": "https://boards.greenhouse.io/acme",
36 "department": "Marketing",
37 "team": "Product Marketing",
38 "category": "marketing",
39 "locations": [
40 {
41 "raw": "San Francisco, CA",
42 "countryCode": "US"
43 }
44 ],
45 "workplaceType": "hybrid",
46 "employmentType": "full_time",
47 "postedAt": "2026-10-27T09:12:00.000Z",
48 "applyUrl": "https://boards.greenhouse.io/acme/jobs/7421035",
49 "salary": {
50 "min": 170000,
51 "max": 210000,
52 "currency": "USD",
53 "period": "year",
54 "raw": "$170,000 - $210,000"
55 },
56 "changes": []
57 },
58 "metadata": {
59 "title": "Senior Product Marketing Manager",
60 "text": "Acme is hiring a Senior Product Marketing Manager to own positioning and launches for our analytics platform. You will work with product, sales and customer success to bring new features to market.",
61 "url": "https://boards.greenhouse.io/acme/jobs/7421035",
62 "author": null,
63 "media": [],
64 "metrics": null,
65 "status": "open",
66 "jobId": "7421035",
67 "atsType": "greenhouse",
68 "boardUrl": "https://boards.greenhouse.io/acme",
69 "department": "Marketing",
70 "team": "Product Marketing",
71 "category": "marketing",
72 "locations": [
73 {
74 "raw": "San Francisco, CA",
75 "countryCode": "US"
76 }
77 ],
78 "workplaceType": "hybrid",
79 "employmentType": "full_time",
80 "postedAt": "2026-10-27T09:12:00.000Z",
81 "applyUrl": "https://boards.greenhouse.io/acme/jobs/7421035",
82 "salary": {
83 "min": 170000,
84 "max": 210000,
85 "currency": "USD",
86 "period": "year",
87 "raw": "$170,000 - $210,000"
88 },
89 "changes": []
90 }
91}

Updated jobs

Event · job_posting, updated (Acme)Sample with the exact shape (no real run yet)
json
1{
2 "version": 1,
3 "eventId": "a84e2d17-35fb-4b09-b6c2-61e9d07c3a48",
4 "eventType": "jobs",
5 "subEventType": "job_posting",
6 "action": "updated",
7 "signalType": "jobs.updated",
8 "source": "job_postings",
9 "orgId": "org_3KikADUjsyXrUJ4RJhWpwcp98Yf",
10 "trackerId": "b13a7c58-02d4-4e9f-8a61-5f3c9e0d2b74",
11 "projectId": "2738158a-08fd-4fc4-912d-43d4c328bc10",
12 "runId": "e90b13c6-72aa-4d85-a1f4-3c58b9d20e77",
13 "competitor": {
14 "name": "Acme",
15 "domain": "acme.com",
16 "subjectKey": "jobs:acme.com"
17 },
18 "occurredAt": "2026-10-28T06:02:40.215Z",
19 "detectedAt": "2026-10-28T06:02:40.215Z",
20 "sequence": 318,
21 "itemKey": "job_postings-7421035",
22 "relevance": {
23 "status": "unjudged"
24 },
25 "jobResponse": {
26 "title": "Senior Product Marketing Manager",
27 "text": "Acme is hiring a Senior Product Marketing Manager to own positioning and launches for our analytics platform. You will work with product, sales and customer success to bring new features to market.",
28 "url": "https://boards.greenhouse.io/acme/jobs/7421035",
29 "author": null,
30 "media": [],
31 "metrics": null,
32 "status": "open",
33 "jobId": "7421035",
34 "atsType": "greenhouse",
35 "boardUrl": "https://boards.greenhouse.io/acme",
36 "department": "Marketing",
37 "team": "Product Marketing",
38 "category": "marketing",
39 "locations": [
40 {
41 "raw": "San Francisco, CA",
42 "countryCode": "US"
43 },
44 {
45 "raw": "Remote, United States",
46 "countryCode": "US"
47 }
48 ],
49 "workplaceType": "remote",
50 "employmentType": "full_time",
51 "postedAt": "2026-10-27T09:12:00.000Z",
52 "applyUrl": "https://boards.greenhouse.io/acme/jobs/7421035",
53 "salary": {
54 "min": 180000,
55 "max": 220000,
56 "currency": "USD",
57 "period": "year",
58 "raw": "$180,000 - $220,000"
59 },
60 "changes": [
61 {
62 "field": "workplaceType",
63 "before": "hybrid",
64 "after": "remote"
65 },
66 {
67 "field": "locations",
68 "before": "San Francisco, CA",
69 "after": "San Francisco, CA; Remote, United States"
70 },
71 {
72 "field": "salary",
73 "before": "$170,000 - $210,000",
74 "after": "$180,000 - $220,000"
75 }
76 ]
77 },
78 "metadata": {
79 "title": "Senior Product Marketing Manager",
80 "text": "Acme is hiring a Senior Product Marketing Manager to own positioning and launches for our analytics platform. You will work with product, sales and customer success to bring new features to market.",
81 "url": "https://boards.greenhouse.io/acme/jobs/7421035",
82 "author": null,
83 "media": [],
84 "metrics": null,
85 "status": "open",
86 "jobId": "7421035",
87 "atsType": "greenhouse",
88 "boardUrl": "https://boards.greenhouse.io/acme",
89 "department": "Marketing",
90 "team": "Product Marketing",
91 "category": "marketing",
92 "locations": [
93 {
94 "raw": "San Francisco, CA",
95 "countryCode": "US"
96 },
97 {
98 "raw": "Remote, United States",
99 "countryCode": "US"
100 }
101 ],
102 "workplaceType": "remote",
103 "employmentType": "full_time",
104 "postedAt": "2026-10-27T09:12:00.000Z",
105 "applyUrl": "https://boards.greenhouse.io/acme/jobs/7421035",
106 "salary": {
107 "min": 180000,
108 "max": 220000,
109 "currency": "USD",
110 "period": "year",
111 "raw": "$180,000 - $220,000"
112 },
113 "changes": [
114 {
115 "field": "workplaceType",
116 "before": "hybrid",
117 "after": "remote"
118 },
119 {
120 "field": "locations",
121 "before": "San Francisco, CA",
122 "after": "San Francisco, CA; Remote, United States"
123 },
124 {
125 "field": "salary",
126 "before": "$170,000 - $210,000",
127 "after": "$180,000 - $220,000"
128 }
129 ]
130 }
131}

Removed jobs

jobs.removed fires when a job is gone from a complete read of every board. The body carries the job's last known values with status: "closed", and jobResponse is not null. Signals sends no removals when a board could not be read in full.

Event · job_posting, removed (Acme)Sample with the exact shape (no real run yet)
json
1{
2 "version": 1,
3 "eventId": "c27d5b90-18ea-4f36-a0d3-94b6e1f72c05",
4 "eventType": "jobs",
5 "subEventType": "job_posting",
6 "action": "removed",
7 "signalType": "jobs.removed",
8 "source": "job_postings",
9 "orgId": "org_3KikADUjsyXrUJ4RJhWpwcp98Yf",
10 "trackerId": "b13a7c58-02d4-4e9f-8a61-5f3c9e0d2b74",
11 "projectId": "2738158a-08fd-4fc4-912d-43d4c328bc10",
12 "runId": "0b6e48d2-a5c7-4139-9e8f-d2a71c35b690",
13 "competitor": {
14 "name": "Acme",
15 "domain": "acme.com",
16 "subjectKey": "jobs:acme.com"
17 },
18 "occurredAt": "2026-10-29T06:01:52.903Z",
19 "detectedAt": "2026-10-29T06:01:52.903Z",
20 "sequence": 341,
21 "itemKey": "job_postings-7421035",
22 "relevance": {
23 "status": "unjudged"
24 },
25 "jobResponse": {
26 "title": "Senior Product Marketing Manager",
27 "text": null,
28 "url": "https://boards.greenhouse.io/acme/jobs/7421035",
29 "author": null,
30 "media": [],
31 "metrics": null,
32 "status": "closed",
33 "jobId": "7421035",
34 "atsType": "greenhouse",
35 "boardUrl": "https://boards.greenhouse.io/acme",
36 "department": "Marketing",
37 "team": "Product Marketing",
38 "category": "marketing",
39 "locations": [
40 {
41 "raw": "San Francisco, CA",
42 "countryCode": "US"
43 },
44 {
45 "raw": "Remote, United States",
46 "countryCode": "US"
47 }
48 ],
49 "workplaceType": "remote",
50 "employmentType": "full_time",
51 "postedAt": "2026-10-27T09:12:00.000Z",
52 "applyUrl": "https://boards.greenhouse.io/acme/jobs/7421035",
53 "salary": {
54 "min": 180000,
55 "max": 220000,
56 "currency": "USD",
57 "period": "year",
58 "raw": "$180,000 - $220,000"
59 },
60 "changes": []
61 },
62 "metadata": {
63 "title": "Senior Product Marketing Manager",
64 "text": null,
65 "url": "https://boards.greenhouse.io/acme/jobs/7421035",
66 "author": null,
67 "media": [],
68 "metrics": null,
69 "status": "closed",
70 "jobId": "7421035",
71 "atsType": "greenhouse",
72 "boardUrl": "https://boards.greenhouse.io/acme",
73 "department": "Marketing",
74 "team": "Product Marketing",
75 "category": "marketing",
76 "locations": [
77 {
78 "raw": "San Francisco, CA",
79 "countryCode": "US"
80 },
81 {
82 "raw": "Remote, United States",
83 "countryCode": "US"
84 }
85 ],
86 "workplaceType": "remote",
87 "employmentType": "full_time",
88 "postedAt": "2026-10-27T09:12:00.000Z",
89 "applyUrl": "https://boards.greenhouse.io/acme/jobs/7421035",
90 "salary": {
91 "min": 180000,
92 "max": 220000,
93 "currency": "USD",
94 "period": "year",
95 "raw": "$180,000 - $220,000"
96 },
97 "changes": []
98 }
99}

For the pull API, the same events have source: "job_postings" and detail holds the job fields. See the pull API.

signal.v1 · jobs.newSample with the exact shape (no real run yet)
json
1{
2 "schema": "signal.v1",
3 "type": "jobs.new",
4 "id": "3f1c9a52-6b0e-4c3a-9d41-0a7d2b8e5f10",
5 "orgId": "org_3KikADUjsyXrUJ4RJhWpwcp98Yf",
6 "trackerId": "b13a7c58-02d4-4e9f-8a61-5f3c9e0d2b74",
7 "runId": "5d2f7a14-9c3b-4e68-8f21-b7c4a0e19d36",
8 "source": "job_postings",
9 "subject": {
10 "key": "jobs:acme.com",
11 "display": "Acme"
12 },
13 "change": "added",
14 "changeSeq": 301,
15 "itemKey": "job_postings|7421035",
16 "observedAt": "2026-10-27T09:12:00.000Z",
17 "detectedAt": "2026-10-28T06:03:11.482Z",
18 "item": {
19 "title": "Senior Product Marketing Manager",
20 "text": "Acme is hiring a Senior Product Marketing Manager to own positioning and launches for our analytics platform. You will work with product, sales and customer success to bring new features to market.",
21 "url": "https://boards.greenhouse.io/acme/jobs/7421035",
22 "author": null,
23 "metrics": null,
24 "media": []
25 },
26 "detail": {
27 "source": "job_postings",
28 "kind": "job",
29 "status": "open",
30 "jobId": "7421035",
31 "atsType": "greenhouse",
32 "boardUrl": "https://boards.greenhouse.io/acme",
33 "title": "Senior Product Marketing Manager",
34 "department": "Marketing",
35 "team": "Product Marketing",
36 "category": "marketing",
37 "locations": [
38 {
39 "raw": "San Francisco, CA",
40 "countryCode": "US"
41 }
42 ],
43 "workplaceType": "hybrid",
44 "employmentType": "full_time",
45 "postedAt": "2026-10-27T09:12:00.000Z",
46 "applyUrl": "https://boards.greenhouse.io/acme/jobs/7421035",
47 "salary": {
48 "min": 170000,
49 "max": 210000,
50 "currency": "USD",
51 "period": "year",
52 "raw": "$170,000 - $210,000"
53 },
54 "changes": []
55 },
56 "relevance": {
57 "status": "unjudged"
58 }
59}