Jobs, hiring signals
Hiring signals from your target accounts' own career sites
List the companies you sell to, invest in or compete with. Each morning you get the jobs they opened and the jobs they closed since yesterday, read from their own career sites, with department, location and dates. The first run costs $0.0015 per open job; after that you pay only for the changes.
- $1.50 per 1,000 jobs
- New and closed jobs daily
- First-party career sites
- 12 applicant tracking systems
What counts as a hiring signal
- New roles. A first data engineer, a sales team opening in a new country, a security lead before an audit.
- Bursts. Ten new jobs in one department in a week says more than any press release.
- Closures. Jobs disappearing in bulk, or a role closed and reposted.
Career sites are the best source for these because they are first-party: the employer's own board, with the apply link, and a job leaves it when the role is closed. Job boards can copy postings late, keep them after they close and mix in agency reposts.
The setup
- List the companies in
companies: names (a directory of about 1,400 large employers resolves them, for example the 40 Canadian employers on Workday), board URLs or careers pages, on any of the 12 supported systems. - Turn on
monitorModeand give the list amonitorKey, so several watchlists keep separate histories. - Add filters if only some jobs matter.
- Schedule it daily in Apify (Schedules, then pick the saved task). Changing the company list or a filter starts a new baseline.
{
"companies": [
"Stripe",
"https://jobs.lever.co/palantir"
],
"monitorMode": true,
"monitorKey": "target-accounts",
"departments": [
"engineering",
"sales"
],
"countries": [
"US",
"CA"
]
}What a change row looks like
monitorMode turns a scheduled run into a change feed: the first run saves every current job as new (the baseline), and later runs save only jobs that appeared (new, with firstSeenAt) or closed (removed, with removedDetectedAt). A job is reported as removed only after its board was read completely and the job itself is gone, so a temporary outage never looks like a wave of closed jobs. Every row also carries the normal job fields: company, title, department, location, country, workplace type, posting date and the apply link.
changeType | Means | Extra fields |
|---|---|---|
new | The job appeared since the last run (on the first run: every current job) | firstSeenAt |
removed | The job was on the board last time and is gone now | firstSeenAt, removedDetectedAt |
Turn on includeUnchanged if you also want the jobs that didn't change in every run.
Filters that keep it relevant
departments, keywords (with searchInDescription to match the text too), excludeKeywords, locations, countries, workplaceTypes, employmentTypes and postedWithinDays are all case-insensitive. Jobs they filter out are never saved or charged, and the run log lists the departments and locations each board really uses when a filter matches nothing.
Where it goes
Each run's rows are in an Apify dataset you can pull over the API as JSON, CSV or Excel. Apify's own integrations send them to Slack, Gmail or Google Drive, or to Google Sheets and your CRM through Make, Zapier or n8n; a webhook can call your own endpoint when a run finishes. Clay users can run Apify Actors from a Clay table with their own Apify API token: Clay's documentation describes launching actors and retrieving run results in Clay (Clay docs, read October 6, 2026).
What it costs
The first run is the baseline: every open job at your accounts, $0.0015 each. Fifty target accounts with about 200 open jobs each is 10,000 rows, $15.00. After that the bill depends on how much your accounts hire. As an assumption, not a measurement: if 2% of jobs change on a given day, those 50 accounts produce about 200 change rows a day, $0.30 a day or about $9.00 per 30 days. The README puts it simply: most daily runs save just a handful of rows.
For investors and analysts
Keep each day's change rows and you build your own hiring time series per company: openings by department, closures, net change. It starts on your first run; there is no history before it, and a company's history restarts if you change its filters.
Limits
- Supported systems only. Employers on Oracle, SuccessFactors, iCIMS, Taleo and Avature or their own sites are named in the run and skipped, free.
- No history before your first run. For years of past postings, a job-data provider is the better buy; the provider comparison has dated prices.
- Signals, not scores. You get the jobs and the changes; deciding what they mean is up to you.
Ask for it from ChatGPT, Claude or Cursor
The ATS Jobs Scraper works as a tool in ChatGPT, Claude, Cursor and VS Code through Apify's hosted MCP server. Add this URL as a custom connector and sign in with your Apify account; runs bill to that account. Then ask in plain English, for example "which of these 20 companies opened new sales jobs in Canada this week?".
https://mcp.apify.com/?tools=fetch-actor-details,yugenox/ats-jobs-scraperclaude mcp add --transport http yugenox-jobs "https://mcp.apify.com/?tools=fetch-actor-details,yugenox/ats-jobs-scraper"The AI setup guide walks through each client.
Run it from code
The input above as code. The first run saves every matching open job; scheduled runs after it save only new and removed ones.
// Save as run.mjs, then: npm i apify-client && APIFY_TOKEN=... node run.mjs
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('yugenox/ats-jobs-scraper').call({
companies: [
"Stripe",
"https://jobs.lever.co/palantir"
],
monitorMode: true,
monitorKey: "target-accounts",
departments: [
"engineering",
"sales"
],
countries: [
"US",
"CA"
]
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) console.log(item.changeType, item.company, item.title, item.firstSeenAt);import os
from apify_client import ApifyClient # pip install apify-client
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("yugenox/ats-jobs-scraper").call(run_input={
"companies": ["Stripe", "https://jobs.lever.co/palantir"],
"monitorMode": True,
"monitorKey": "target-accounts",
"departments": ["engineering", "sales"],
"countries": ["US", "CA"],
})
if run is None:
raise RuntimeError("Run did not finish")
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item.get("changeType"), item.get("company"), item.get("title"), item.get("firstSeenAt"))# Small jobs: runs the Actor and returns the rows in one call (up to 5 minutes).
curl -X POST "https://api.apify.com/v2/acts/yugenox~ats-jobs-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"companies":["Stripe","https://jobs.lever.co/palantir"],"monitorMode":true,"monitorKey":"target-accounts","departments":["engineering","sales"],"countries":["US","CA"]}'Not affiliated with Workday, Inc., Greenhouse, Lever, Ashby or any other applicant tracking system vendor, or with any employer named on this page. Workday is a trademark of Workday, Inc.
Questions people ask
How do I get only new jobs each day?
Turn on monitorMode, give the list a monitorKey and schedule the run daily. The first run saves every current job; later runs save only jobs that appeared or closed since the previous run.
How do I know a removed job really closed?
A job is reported as removed only after its whole board was read successfully and the job no longer exists. A board that failed to load is never read as closed jobs.
Does it work with Clay?
Clay's Apify integration lets you run an Apify Actor from a Clay table with your own Apify API token, per Clay's documentation. Paste this Actor's input JSON there.
Can I see hiring history from before I started?
No. The history is what your scheduled runs collect from the first run on. For historical job data, a job-posting database is the better fit.
What does a daily run cost?
$0.0015 per saved row. The baseline is every open job; daily runs after it save only changes, often a handful of rows per company.
Run it on your own data
Open the ATS Jobs Scraper on Apify, list your target companies, turn on monitor mode and schedule it. You pay per saved job from your own Apify account.
Last updated 2026-10-06.