Job Postings Scraper: Company Hiring Signals avatar

Job Postings Scraper: Company Hiring Signals

Pricing

from $2.00 / 1,000 job records

Go to Apify Store
Job Postings Scraper: Company Hiring Signals

Job Postings Scraper: Company Hiring Signals

Returns open job postings and hiring velocity per company from public Greenhouse, Lever and Ashby job boards: title, department, location, remote, salary range, posted date, plus new and closed roles since your last run.

Pricing

from $2.00 / 1,000 job records

Rating

0.0

(0)

Developer

Mike Ross

Mike Ross

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Get every open job at the companies you care about, as clean structured data: one record per job with title, department, team, location(s), remote flag, employment type, posted date, apply link and the salary range where the company publishes one. Add an optional hiring summary per company: open roles, roles by department, roles posted in the last 7 and 30 days, hiring velocity, and how many roles opened or closed since your last run.

It reads each company's own public job board on Greenhouse, Lever or Ashby, the three applicant tracking systems most fast-growing companies use. Give it a list of companies, schedule it daily, and switch on onlyNew to get just the jobs that appeared since the previous run.

What you get

Job records (recordType: "job"), one per open role:

FieldExample
company, companyKey, atsRamp, ashby:ramp, ashby
jobId, titleb7514711-..., Senior Backend Engineer
department, teamEngineering, Backend
location, locations, countryNew York, NY (HQ), all listed places, USA
remote, workplaceTypetrue, hybrid
employmentTypefull-time, part-time, contract, temporary or internship
postedAt, updatedAt, ageDaysISO dates in UTC, days since posting
salaryMin, salaryMax, salaryCurrency, salaryInterval, salaryText204000, 280000, USD, year, USD 204,000 - 280,000 per year
jobUrl, applyUrlLinks to the job page and application form
isNew, firstSeenAtWhether the job is new since the previous run with the same input

Company summaries (recordType: "companySummary"), one per company:

FieldMeaning
openRoles, matchingRoles, rolesOutputAll open roles, roles that match your filters, job records returned
rolesByDepartment, topDepartments, topLocationsWhere the company is hiring
postedLast7Days, postedLast30Days, postedLast90DaysRecent posting activity
hiringVelocityPerWeekRoles posted per week, averaged over the last 30 days
medianRoleAgeDaysHow long roles have typically been open
remoteRoles, remoteShare, rolesWithSalaryRemote and pay transparency mix
newRolesSinceLastRun, closedRolesSinceLastRun, netChangeSinceLastRunChange since the previous run with the same input (empty on the first run)

The Output tab has three views: Jobs, Company summaries and Salaries.

Who it is for

  • Sales and business development teams who treat hiring as a buying signal: a company opening five finance roles is a likely buyer of finance software.
  • Recruiters and staffing firms tracking which companies are growing and in which functions.
  • Investors and analysts watching headcount growth, team mix and expansion into new cities.
  • Job seekers who want one daily list of new roles at their target companies.

Quick start

  1. Click Start with the example input. You get the open roles at five example companies plus a summary for each.
  2. Replace the list with your own companies. Any of these formats works:
    • greenhouse:stripe, lever:spotify, lever-eu:<site>, ashby:ramp (fastest and most reliable)
    • A hosted job board link: https://boards.greenhouse.io/figma, https://jobs.lever.co/zoox, https://jobs.ashbyhq.com/linear
    • A company careers page: https://www.figma.com/careers/ (the Actor looks for the job board behind it)
    • Just a name: openai (the Actor tries Greenhouse, Ashby and Lever in turn)
  3. Add filters if you only care about some roles, for example department Sales, location London, or posted in the last 7 days.
  4. Schedule it daily with Only jobs not seen in previous runs switched on, and connect the dataset to email, Slack, Google Sheets or your CRM with an Apify integration or webhook.

Input

FieldWhat it doesDefault
companiesList of companies (formats above). Empty runs the example listexample list
departmentKeywordsDepartment or team contains any of these wordsall
titleKeywordsJob title contains any of these wordsall
excludeTitleKeywordsDrop jobs whose title contains any of these wordsnone
locationsAny listed location or country contains any of these wordsall
remoteany, remoteOnly or excludeRemoteany
postedWithinDaysOnly jobs first published in the last N days. 0 means any age0
onlyNewOnly return jobs not returned by a previous run with the same companies and filtersfalse
includeCompanySummaryAdd one summary record per companytrue
includeSalaryAdd published salary rangestrue
maxJobsPerCompanyAt most this many jobs per company, newest first. 0 means no limit0
maxItemsAt most this many job records in total. 0 means no limit1000

Example input for a daily sales-signal feed:

{
"companies": ["greenhouse:stripe", "ashby:ramp", "lever:zoox", "https://jobs.ashbyhq.com/notion"],
"departmentKeywords": ["Finance", "Accounting"],
"locations": ["New York", "London", "Remote"],
"onlyNew": true,
"includeCompanySummary": true
}

Output example

{
"company": "Ramp",
"companyKey": "ashby:ramp",
"ats": "ashby",
"boardToken": "ramp",
"jobId": "b7514711-8a29-4bd2-a97a-967be14e336f",
"title": "Senior Backend Engineer | Token Spend Management",
"department": "Engineering",
"team": "Backend",
"location": "New York, NY (HQ)",
"locations": ["New York, NY (HQ)", "Remote (Canada)", "Remote (US)"],
"country": "USA",
"remote": true,
"workplaceType": "hybrid",
"employmentType": "full-time",
"employmentTypeRaw": "FullTime",
"postedAt": "2026-10-20T13:40:20Z",
"updatedAt": null,
"ageDays": 0,
"salaryMin": 204000,
"salaryMax": 280000,
"salaryCurrency": "USD",
"salaryInterval": "year",
"salaryText": "USD 204,000 - 280,000 per year",
"jobUrl": "https://jobs.ashbyhq.com/ramp/b7514711-8a29-4bd2-a97a-967be14e336f",
"applyUrl": "https://jobs.ashbyhq.com/ramp/b7514711-8a29-4bd2-a97a-967be14e336f/application",
"isNew": true,
"firstSeenAt": "2026-10-20T14:11:22Z",
"source": "api.ashbyhq.com",
"recordType": "job",
"scrapedAt": "2026-10-20T14:11:22Z",
"schemaVersion": 1
}
{
"recordType": "companySummary",
"company": "Ramp",
"companyKey": "ashby:ramp",
"boardUrl": "https://jobs.ashbyhq.com/ramp",
"openRoles": 168,
"matchingRoles": 168,
"rolesOutput": 168,
"topDepartments": "Sales (67), Engineering (38), People & Talent (15), Marketing (8), Product (7)",
"remoteShare": 0.899,
"rolesWithSalary": 161,
"postedLast7Days": 15,
"postedLast30Days": 51,
"hiringVelocityPerWeek": 11.9,
"medianRoleAgeDays": 49,
"newRolesSinceLastRun": null,
"closedRolesSinceLastRun": null
}

A run report is saved in the key-value store as RUN_SUMMARY: records returned, companies read, and any company that could not be found.

Pricing

This Actor uses pay per event pricing:

  • $3 per 1,000 job records (job-record event, $0.003 each)
  • $0.005 per company summary (company-summary event)

You only pay for records saved to your dataset, so filters, onlyNew and maxItems keep costs down. For example, a daily onlyNew run over 50 companies returns only the jobs posted since the previous day plus 50 summaries: $0.25 for the summaries plus $0.003 per new job. Set a maximum cost per run in the run options and the Actor stops cleanly when it is reached.

How "only new jobs" works

When onlyNew is on, the Actor remembers which job ids it has already returned for this exact input (companies plus filters) in a key-value store in your account called hiring-signals-feed-state. The next run only returns jobs that are not on that list. The first run returns everything that matches. Changing the companies or filters starts a fresh history, and you can keep separate histories by changing History store name. The store holds job ids and counts only.

The company summary's "since last run" numbers use the same history, so they work whether onlyNew is on or off.

Data source and privacy

All data comes from the official public job board endpoints that Greenhouse, Lever and Ashby provide so companies can show their open roles on their own careers sites. The Actor reads only published, publicly listed jobs and uses no login.

The Actor does not collect personal data. It never returns job descriptions, recruiter or hiring manager names, contact details, or custom job fields (some companies use those to name recruiting teams). Company and job information is all it outputs.

FAQ

My company is not found. What can I do? Open the company's careers page, click a job, and look at the link. boards.greenhouse.io/<name> or job-boards.greenhouse.io/<name> means greenhouse:<name>, jobs.lever.co/<name> means lever:<name>, and jobs.ashbyhq.com/<name> means ashby:<name>. Companies on other systems (Workday, SmartRecruiters, iCIMS and so on) are not supported yet.

Why are department or employment type empty for some companies? They are only filled when the company fills them on its job board. Ashby and Lever boards usually have both. Greenhouse boards always have a department but rarely an employment type.

Why is salary empty for many jobs? Salary is only included when the company publishes it on the job board, which is common for US roles because of pay transparency laws and less common elsewhere.

What does remote: true mean? The job can be done remotely from at least one of its listed locations. A hybrid job with a "Remote (US)" option is remote: true with workplaceType: "hybrid".

How fresh is the data? Live. Each run reads the job boards directly, so jobs appear as soon as the company publishes them.

Something looks wrong. What should I do? Open an issue on the Actor's Issues tab with the run link and the company entry.

Disclaimer

This Actor is independent and is not affiliated with, endorsed by or sponsored by Greenhouse, Lever, Ashby or any company whose jobs it returns. Product and company names are used only to describe compatibility and belong to their owners. Job data belongs to the companies that publish it; check the original posting before acting on it.