Job Postings Scraper: Company Hiring Signals
Pricing
from $2.00 / 1,000 job records
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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:
| Field | Example |
|---|---|
company, companyKey, ats | Ramp, ashby:ramp, ashby |
jobId, title | b7514711-..., Senior Backend Engineer |
department, team | Engineering, Backend |
location, locations, country | New York, NY (HQ), all listed places, USA |
remote, workplaceType | true, hybrid |
employmentType | full-time, part-time, contract, temporary or internship |
postedAt, updatedAt, ageDays | ISO dates in UTC, days since posting |
salaryMin, salaryMax, salaryCurrency, salaryInterval, salaryText | 204000, 280000, USD, year, USD 204,000 - 280,000 per year |
jobUrl, applyUrl | Links to the job page and application form |
isNew, firstSeenAt | Whether the job is new since the previous run with the same input |
Company summaries (recordType: "companySummary"), one per company:
| Field | Meaning |
|---|---|
openRoles, matchingRoles, rolesOutput | All open roles, roles that match your filters, job records returned |
rolesByDepartment, topDepartments, topLocations | Where the company is hiring |
postedLast7Days, postedLast30Days, postedLast90Days | Recent posting activity |
hiringVelocityPerWeek | Roles posted per week, averaged over the last 30 days |
medianRoleAgeDays | How long roles have typically been open |
remoteRoles, remoteShare, rolesWithSalary | Remote and pay transparency mix |
newRolesSinceLastRun, closedRolesSinceLastRun, netChangeSinceLastRun | Change 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
- Click Start with the example input. You get the open roles at five example companies plus a summary for each.
- 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)
- Add filters if you only care about some roles, for example department
Sales, locationLondon, or posted in the last 7 days. - 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
| Field | What it does | Default |
|---|---|---|
companies | List of companies (formats above). Empty runs the example list | example list |
departmentKeywords | Department or team contains any of these words | all |
titleKeywords | Job title contains any of these words | all |
excludeTitleKeywords | Drop jobs whose title contains any of these words | none |
locations | Any listed location or country contains any of these words | all |
remote | any, remoteOnly or excludeRemote | any |
postedWithinDays | Only jobs first published in the last N days. 0 means any age | 0 |
onlyNew | Only return jobs not returned by a previous run with the same companies and filters | false |
includeCompanySummary | Add one summary record per company | true |
includeSalary | Add published salary ranges | true |
maxJobsPerCompany | At most this many jobs per company, newest first. 0 means no limit | 0 |
maxItems | At most this many job records in total. 0 means no limit | 1000 |
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-recordevent, $0.003 each) - $0.005 per company summary (
company-summaryevent)
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.