Company Hiring Signals API - New Jobs, Closed Jobs, History avatar

Company Hiring Signals API - New Jobs, Closed Jobs, History

Pricing

from $1.40 / 1,000 results

Go to Apify Store
Company Hiring Signals API - New Jobs, Closed Jobs, History

Company Hiring Signals API - New Jobs, Closed Jobs, History

Company hiring signals from our own daily archive of public job boards (Greenhouse, Lever and Ashby) for 813 tech and startup companies. Per company and day: open jobs, new postings, closed postings (missing two days in a row) with days open, departments and remote share. Ask which companies are hir

Pricing

from $1.40 / 1,000 results

Rating

0.0

(0)

Developer

Martin Petrov

Martin Petrov

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

Which companies are hiring fast right now, which teams are they growing, and which roles just closed? Job boards only show today. This actor answers from our own daily archive of public job boards (Greenhouse, Lever and Ashby) for 813 tech and startup companies and returns clean JSON rows.

No login, no proxies, no scraping on your run: the actor reads our archive, so results come back in seconds. Company data only, no recruiter names or other personal data.

Use cases

  • B2B sales intent signals. A company that adds 40 sales roles or 20 engineers is growing and buying tools. Rank companies by new jobs and reach out while the budget is fresh.
  • Recruiters and agencies. See which companies open many roles in a department, and which roles closed (filled or pulled) and after how many days.
  • Investors and analysts. Track startup growth through open-job counts per day, hiring velocity and remote share.
  • Job seekers. Alert feed: new jobs matching your keywords, location or remote preference at the companies you care about.

What makes this one different

  • Daily history, not a live snapshot. Scrapers show job boards as they are right now. Our archive stores open jobs per company per day since 2026-11-03 and grows every day. A clone cannot backfill the days it did not record.
  • New and closed detection. New = first seen after the baseline. Closed = missing from the board 2 days in a row, with days open for each closed posting.
  • Hiring velocity per company: change in open jobs, percent change, new and closed jobs, top departments and remote share.
  • One call for 813 companies instead of crawling hundreds of job boards yourself.

Honest limits: coverage is 813 companies on Greenhouse, Lever and Ashby (mostly tech and startups, many in the US), not the whole market. Closed postings and days open become meaningful after a few days of history, so closed_jobs can be empty in the first days (the run still succeeds). For any company that is not in the archive use the live ATS Jobs Aggregator.

Modes

ModeWhat you get
top_hiring (default)Companies ranked by new jobs, open jobs, change in open jobs or closed jobs over lookbackDays
companiesCurrent numbers plus the daily history (open, new, closed jobs) of the companies you list
new_jobsJob feed of postings first seen after the baseline, with filters
closed_jobsPostings that disappeared, with daysOpen
open_jobsCurrently open postings, with filters

How to use it (step by step)

  1. Click Try for free.
  2. Keep the default (top 50 companies by new jobs) or choose a mode.
  3. Click Start and download JSON, CSV or Excel, or call it by API.

API example (copy and paste)

Replace MY_APIFY_TOKEN with your token from Apify Console, Settings, Integrations.

curl -s -X POST "https://api.apify.com/v2/acts/martin10291~company-hiring-signals-history/run-sync-get-dataset-items?token=MY_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"top_hiring","sortBy":"newJobs","limit":20}'

New engineering and sales jobs at target companies:

curl -s -X POST "https://api.apify.com/v2/acts/martin10291~company-hiring-signals-history/run-sync-get-dataset-items?token=MY_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"new_jobs","companies":["stripe","writer"],"keywords":["engineer","sales"],"limit":50}'

Use it from AI agents (MCP)

Add the actor to Claude, Cursor or any MCP-capable agent with the Apify MCP server:

https://mcp.apify.com?tools=martin10291/company-hiring-signals-history

Then ask: "Which companies added the most sales roles this month?" The output is flat, documented JSON.

Alerts: new jobs at my target companies

Set onlyNew to true and a monitorId. In the job modes (new_jobs, closed_jobs, open_jobs) you get each posting once. In top_hiring and companies modes you get only rows whose open, new or closed job counts changed since the last run with the same Monitor ID (change is new or changed). The first run reports everything. Schedule it daily and connect a webhook, Slack or email. Each result is paid for once.

Input

FieldDefaultDescription
modetop_hiringtop_hiring, companies, new_jobs, closed_jobs or open_jobs
sortBynewJobsRanking for top_hiring: newJobs, openJobs, openJobsDelta, closedJobs
minOpenJobs5Skip tiny boards (top_hiring)
lookbackDays30Compare with this many days ago (top_hiring)
companiesemptyBoard slugs or names (required for companies mode, filter in job modes)
keywordsemptyJob title contains any of these (job modes)
locationemptyLocation contains any of these (job modes)
departmentemptyDepartments to keep (job modes)
remoteOnlyfalseOnly remote postings (job modes)
atsemptygreenhouse, lever, ashby
sinceemptyYYYY-MM-DD (job modes)
limit50Max rows (1-1000)
onlyNewfalseOnly new or changed rows since last run
monitorIddefaultSeparate memory per watch list

Output example (top_hiring mode, real data from 2026-11-04)

{
"company": "Writer",
"companySlug": "writer",
"ats": "ashby",
"openJobs": 91,
"openJobsThen": 46,
"openJobsDelta": 45,
"openJobsDeltaPct": 97.8,
"newJobs": 45,
"closedJobs": 0,
"remoteSharePct": 100.0,
"topDepartments": [
{"department": "Engineering, product & design", "openJobs": 36},
{"department": "Delivery & customer success", "openJobs": 28},
{"department": "Sales", "openJobs": 15}
],
"lastChecked": "2026-11-04",
"comparedWith": "2026-11-03",
"day": "2026-11-04",
"archiveFrom": "2026-11-03",
"archiveSnapshots": 2
}

Job modes return one posting per row, for example from new_jobs:

{
"company": "Censys",
"companySlug": "censys",
"ats": "greenhouse",
"jobId": "8846269002",
"title": "Software Engineer II (Backend)",
"department": null,
"location": "Remote (US/Canada)",
"remote": true,
"url": "https://job-boards.greenhouse.io/censys/jobs/8846269002",
"firstSeen": "2026-11-04",
"lastSeen": "2026-11-04",
"closedAt": null
}

closed_jobs rows also contain daysOpen and daysOpenNote. Fields the job board does not provide (for example department) are null.

Pricing

Pay per result, $2 per 1,000 results. The Run summary record (RUN_SUMMARY) reports counts, the archive range and lastError.

FAQ

Where does the data come from? From our own daily snapshots of public company job boards on Greenhouse, Lever and Ashby, not from your run.

Which companies are covered? 813 tech and startup companies, many in the US. Use the ATS Jobs Aggregator for any other company.

How far back does history go? To 2026-11-03. Each day adds one snapshot, so lookbacks get more meaningful over time.

Why is closed_jobs empty? A posting counts as closed after it is missing 2 days in a row, so this is normal in the first days. The run still succeeds and RUN_SUMMARY explains it.

Is personal data included? No. Only company and job posting data, no recruiter or candidate names.