ATS Hiring Signals — Greenhouse, Lever & Ashby
Pricing
from $4.00 / 1,000 job results
ATS Hiring Signals — Greenhouse, Lever & Ashby
Monitor new job postings from Greenhouse, Lever, and Ashby across up to 100 companies. Detect recent hiring signals, filter by title, department, location, or remote status, and export normalized job data to your CRM, Slack, spreadsheet, or API.
Pricing
from $4.00 / 1,000 job results
Rating
0.0
(0)
Developer
Johnn Mottin
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 days ago
Last modified
Categories
Share
Turn new job postings into B2B hiring signals
A company opening new roles can reveal where it is investing next.
A company hiring developers may be expanding its product or infrastructure.
A company hiring SDRs may be increasing its sales investment.
A company rapidly adding new roles may be entering a growth phase.
This Actor monitors the official public job-board APIs of Greenhouse, Lever, and Ashby across your target companies and returns the jobs published within your chosen time window — normalized into one consistent dataset.
Instead of manually checking dozens of careers pages, run your account list automatically and turn new job postings into actionable signals for sales, recruiting, competitive intelligence, and market research.
Key features
- Monitor up to 100 companies per run
- Greenhouse, Lever & Ashby support
- Automatic ATS detection
- Only return jobs published in the last N days
- Filter by job title, department, location, or remote status
- Full job-board export mode when needed
- Normalized output across all three ATS platforms
- Built-in run health checks
- CRM, Slack, spreadsheet, webhook, and API workflows
- No ATS account or API key required
- No login, browser automation, or LinkedIn required
- Pay only for jobs actually written to the dataset
Not affiliated with, sponsored by, or endorsed by Greenhouse, Lever, Ashby, or any company whose job board is queried. All data comes from the official public job-board APIs those companies expose and remains subject to their terms.
Why hiring signals matter
Job postings are more than recruiting data — they can indicate where a company is allocating resources.
Examples:
- New engineering roles can signal product, infrastructure, or technical expansion.
- New sales roles can signal increased go-to-market investment.
- New marketing roles can indicate upcoming demand-generation initiatives.
- New specialist roles can reveal emerging operational or technology needs.
- Rapid changes in hiring activity can help track company expansion or strategic shifts.
Hiring signals do not prove that a company will purchase a specific product or service, but they can help prioritize accounts and identify better timing for outreach.
Who it's for
B2B sales and outbound teams
Monitor your target accounts and identify companies that recently started hiring in departments relevant to what you sell.
Example:
"Which of my 80 target accounts opened new engineering positions this week?"
Route those signals automatically to your CRM, Slack, spreadsheet, or workflow.
Recruiting agencies
Track client and prospect job boards for new openings and identify potential recruiting mandates earlier.
Competitive intelligence
Track competitor hiring activity by company and use new job postings as one signal of expansion, investment, or organizational change.
Founders and analysts
Monitor hiring activity across companies or market segments without manually visiting every careers page.
How it works
You provide company board slugs.
Example:
stripegitlabspotify
The slug is the company identifier found in its public careers URL.
Examples:
boards.greenhouse.io/<slug>jobs.lever.co/<slug>jobs.ashbyhq.com/<slug>
For every company, the Actor queries the official API of its ATS.
You can specify the ATS manually or let the Actor auto-detect it by trying:
- Greenhouse
- Lever
- Ashby
Unknown slugs do not break the entire batch. They become controlled NOT_FOUND results in STATS.companySummary.
Two operating modes
Hiring Signal mode
This is the default and recommended mode for recurring monitoring.
Set:
{"newWithinDays": 7}
The Actor returns only jobs first published within the last 7 days.
The window is calculated again at runtime, so a saved Apify Task never becomes stale.
If you schedule the Actor every Monday with:
{"newWithinDays": 7}
each Monday's run automatically checks the previous seven days.
Ideal for:
- B2B sales signals
- Weekly account monitoring
- Recruiting
- Competitive intelligence
- Market monitoring
Full Dump mode
Set:
{"fullDump": true}
The Actor returns every job currently available on the selected company boards and ignores the recent-job date window.
Ideal for:
- One-time exports
- Job-market research
- Recruiting datasets
- Company hiring analysis
- Building an initial dataset
Input
Weekly hiring-signal example
{"companies": [{ "slug": "stripe" },{ "slug": "gitlab", "ats": "greenhouse" },{ "slug": "spotify", "ats": "lever" }],"newWithinDays": 7,"titleKeywords": ["engineer", "developer", "data"],"remoteOnly": false}
Input fields
| Field | Type | Default | Description |
|---|---|---|---|
companies | array | required | 1–100 {slug, ats?} objects. ats: greenhouse, lever, ashby, or auto (default). Unknown slugs become controlled NOT_FOUND results. Duplicates are skipped. |
newWithinDays | int 1–365 | 7 | Only jobs first published within the last N days. Greenhouse uses first_published, Lever uses createdAt, and Ashby uses publishedAt. Ignored when fullDump is enabled. |
fullDump | boolean | false | Return every job currently available on each board instead of only recent postings. |
titleKeywords | string[] | [] | Match any keyword against the job title, case-insensitive. |
departments | string[] | [] | Filter by department or team substring. Greenhouse automatically performs the heavier content fetch when required. |
locations | string[] | [] | Filter by location substring, e.g. "london", "remote", "brazil". |
remoteOnly | boolean | false | Return only explicitly remote jobs. Ashby and Lever provide native signals; Greenhouse uses location text on a best-effort basis. |
includeDescription | boolean | false | Include the full job description. Produces larger records. |
maxJobsPerCompany | int 1–2000 | 500 | Maximum jobs processed per company, newest first. |
maxResults | int 1–5000 | 1000 | Hard result limit for the entire run. |
Filter before you pay
Jobs removed because of your:
- date window,
- title filters,
- department filters,
- location filters,
- remote filter,
- or result caps
are not written to the dataset and are not billed as job results.
You are charged only for jobs that are actually written to the dataset.
This makes newWithinDays especially useful for recurring monitoring because a weekly signal run typically returns only the new jobs relevant to that period.
Output
The Actor writes one normalized record per job, using the same key structure across Greenhouse, Lever, and Ashby.
Missing values are returned as null or [] rather than invented.
Example output
Real Greenhouse public job-board record:
{"atsSource": "greenhouse","companyIndex": 1,"companySlug": "gitlab","jobId": "8115023002","title": "Account Executive - Italy","department": null,"team": null,"employmentType": null,"location": "Remote, Italy","secondaryLocations": [],"isRemote": true,"workplaceType": null,"url": "https://job-boards.greenhouse.io/gitlab/jobs/8115023002","publishedAt": "2026-06-11T20:23:44.000Z","publishedAtRaw": "2026-06-11T16:23:44-04:00","updatedAt": "2026-07-17T12:48:22.000Z","compensation": null,"description": null,"scrapedAt": "2026-07-30T12:00:00.000Z"}
Output fields
| Field group | Fields | Notes |
|---|---|---|
| Correlation | atsSource, companyIndex, companySlug | Connects every job back to your input company list. |
| Job | jobId, title, department, team, employmentType, url | Core job information. |
| Location | location, secondaryLocations[], isRemote, workplaceType | Remote status is native on Ashby and Lever; Greenhouse uses a text heuristic. |
| Dates | publishedAt, publishedAtRaw, updatedAt | Normalized ISO timestamps. updatedAt is Greenhouse-only. |
| Extras | compensation, description | Compensation is available from Ashby when exposed by the company. Description is opt-in. |
Built-in data quality checks
The Actor monitors essential fields so broken upstream data does not silently enter your workflow.
Core fields include:
titleurlpublishedAtatsSourcecompanySlug
If more than 50% of returned records are missing a monitored core field, the run fails explicitly with:
DEAD_FIELDS
and identifies the affected field.
This helps detect upstream API or extraction changes instead of silently producing a damaged dataset.
Run health and diagnostics
The default key-value store includes STATS with per-company outcomes.
Possible company statuses include:
OKNO_JOBSNOT_FOUNDFAILEDINVALID_COMPANYDUPLICATE_SKIPPEDSKIPPED_MAX_RESULTS
When ATS auto-detection is used, detectedAts is also recorded.
STATS contains:
- company summaries
- HTTP counters
- retries
- jobs discarded by date
- jobs discarded by filters
- jobs discarded by limits
- jobs discarded because no publication date was available
ERRORS uses stable error codes such as:
INVALID_INPUTNOT_FOUNDHTTP_UNAVAILABLEHTTP_TIMEOUTHTTP_RATE_LIMITEDAPI_CONTRACT_CHANGEDDEAD_FIELDSALL_COMPANIES_FAILED
A week with no new jobs on a quiet company board is a valid monitoring result and is recorded through:
STATS.legitimateNoNewJobs
If no company in the entire batch completes successfully, the run fails explicitly with:
ALL_COMPANIES_FAILED
Availability by ATS
Some fields are exposed differently by each ATS.
| Field | Greenhouse | Lever | Ashby |
|---|---|---|---|
| Job title | Yes | Yes | Yes |
| Job URL | Yes | Yes | Yes |
| Publication date | Yes | Yes | Yes |
| Department/team | Available with content fetch | Yes | Yes |
| Remote signal | Best-effort from location text | Native | Native |
| Compensation | No | No | When exposed by company |
| Updated date | Yes | No | No |
The Actor preserves the original publication-date semantics used by each ATS while normalizing them into publishedAt.
Recruiting mandate radar example
Track sales and marketing openings at selected companies:
{"companies": [{ "slug": "ramp" },{ "slug": "linear" }],"newWithinDays": 14,"departments": ["sales", "marketing"]}
Weekly target-account monitoring
A typical B2B workflow might contain 50–100 target companies.
Save them as an Apify Task:
{"companies": [{ "slug": "company-one" },{ "slug": "company-two" },{ "slug": "company-three" }],"newWithinDays": 7}
Schedule the Task weekly.
Each execution recalculates the relative date window automatically and returns only the newest hiring activity.
You can then route the dataset into:
- Slack
- Google Sheets
- CRM systems
- Webhooks
- automation workflows
- internal data pipelines
using Apify integrations or the API.
Schedule it
Recurring monitoring is one of the main intended uses of this Actor.
Use Apify Schedules, not a local scheduler.
The Actor runs in the cloud whether your computer is on or off.
Example weekly setup
- Save your target-company input as a Task.
- Go to Console → Schedules → Create schedule.
- Add the Task.
- Run it every Monday morning.
Example cron:
0 6 * * 1
With:
{"newWithinDays": 7}
the date range is recalculated automatically on every execution.
API usage
Run the Actor and retrieve dataset items in one request:
curl -s "https://api.apify.com/v2/acts/<YOUR_USERNAME>~ats-hiring-signals-monitor/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"companies":[{"slug":"stripe"}],"newWithinDays":7}'
This makes the Actor suitable for integration into:
- CRM enrichment workflows
- account-prioritization systems
- sales-intelligence pipelines
- recruiting workflows
- dashboards
- internal applications
- automated alerts
Pricing
This Actor uses Pay Per Event pricing.
You are billed per job written to the dataset.
Jobs discarded by:
- the date window,
- filters,
- or result caps
are not billed as job results.
The Pricing tab on this Actor page is always the authoritative source for current pricing and any per-run fee.
Cost-control options
Use:
newWithinDays
to control how much recent activity is returned.
You can also control output using:
maxJobsPerCompanymaxResultstitleKeywordsdepartmentslocationsremoteOnly
Signal mode usually produces far fewer results than a full job-board export.
Honest limits
You provide the company list
The Actor does not discover every company using Greenhouse, Lever, or Ashby.
You provide the board slugs from your own target-account list.
Example URLs:
boards.greenhouse.io/<slug>jobs.lever.co/<slug>jobs.ashbyhq.com/<slug>
No ATS provides a complete public directory of all customer job boards.
Coverage is currently Greenhouse, Lever, and Ashby
Companies using platforms such as:
- Workday
- SmartRecruiters
- iCIMS
- other unsupported ATS platforms
will return NOT_FOUND when auto-detection is used.
Additional ATS integrations are a possible future expansion.
Publication dates differ slightly by ATS
The Actor uses:
- Greenhouse → first publication
- Lever → creation timestamp
- Ashby → publication timestamp
The original values are preserved.
Greenhouse department filtering requires additional data
Greenhouse requires a heavier content fetch for department information.
The Actor triggers it automatically only when needed, such as when:
- filtering by department;
- or requesting descriptions.
Greenhouse remote detection is best-effort
Lever and Ashby expose native remote information.
Greenhouse remote detection uses the location text and therefore remains best-effort.
API-friendly request behavior
The Actor intentionally uses conservative API behavior:
- 2 concurrent requests
- pacing
- exponential backoff on
429and5xx - maximum 100 companies per run
FAQ
Do I need an account or API key for Greenhouse, Lever, or Ashby?
No.
The Actor reads the official public job-board APIs exposed by those platforms without logging in.
Does it use LinkedIn?
No.
The Actor does not require or access LinkedIn.
Does it use browser automation?
No.
It queries the public job-board APIs directly.
Where do I find a company's slug?
Look at the company's public careers URL.
Examples:
boards.greenhouse.io/<slug>jobs.lever.co/<slug>jobs.ashbyhq.com/<slug>
The <slug> portion is the value you provide to the Actor.
Can the Actor automatically detect the ATS?
Yes.
When ats is set to auto, the Actor attempts:
Greenhouse → Lever → Ashby
What happens if one company is invalid?
It does not kill the entire batch.
The company receives an appropriate status such as:
NOT_FOUNDINVALID_COMPANYFAILED
while valid companies continue processing.
Can I retrieve every current job instead of only new jobs?
Yes.
Use:
{"fullDump": true}
This ignores the recent-job window and returns all currently available jobs from the company board.
Can I monitor only remote jobs?
Yes.
Set:
{"remoteOnly": true}
Remote detection is native for Lever and Ashby and best-effort for Greenhouse.
Can I monitor specific departments?
Yes.
Example:
{"departments": ["engineering", "sales"]}
Can I search specific job titles?
Yes.
Example:
{"titleKeywords": ["engineer", "developer", "data"]}
Any supplied keyword may match the job title.
What exactly am I charged for?
Jobs actually written to the dataset.
Jobs discarded by date windows, filters, or caps are not billed as job results.
Check the Pricing tab for current rates and any run-start fee.
Can I schedule it?
Yes.
Recurring monitoring is one of the primary use cases.
Save your input as an Apify Task and run it through Apify Schedules.
Data source and affiliation
This Actor uses the official public job-board APIs exposed by:
- Greenhouse
- Lever
- Ashby
It is an unofficial community Actor and is not affiliated with, sponsored by, or endorsed by Greenhouse, Lever, Ashby, or any company whose board is queried.
All source data remains subject to the respective platform and publisher terms.
Part of the JM Forge suite
Also from the same developer:
-
Company Tech Stack Monitor — Change Events + Firmographics — Monitor company domains for technology-stack changes, including tools adopted or removed and email-provider switches.
-
Google Maps Business Scraper — Extract public Google Maps business leads including names, categories, addresses, phone numbers, websites, and ratings.
-
Consulta CNPJ Brasil e Empresas por CNAE — Look up Brazilian company registry data by CNPJ in bulk and discover companies by CNAE, state, and city.
Support
Report issues in the Issues tab of this actor — I respond within 24h. Feature requests welcome.