Hiring Signals Job Feed (multi-ATS) avatar

Hiring Signals Job Feed (multi-ATS)

Pricing

from $1.50 / 1,000 job saveds

Go to Apify Store
Hiring Signals Job Feed (multi-ATS)

Hiring Signals Job Feed (multi-ATS)

Paste company domains, get every open job from Greenhouse, Lever, Ashby, Workable and SmartRecruiters in one normalized feed, with new-since-last-run flags. Public feeds only: no login, no proxies.

Pricing

from $1.50 / 1,000 job saveds

Rating

0.0

(0)

Developer

Adam Small

Adam Small

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

Hiring Signals Job Feed: Greenhouse, Lever, Ashby, Workable and SmartRecruiters

By SignalRoute: data feeds that route buying signals to your team.

Turn a list of company domains into one clean, normalized job feed, and see which roles are new since your last run.

Paste stripe.com, linear.app or huggingface.co. The Actor finds which applicant tracking system (ATS) each company uses and pulls every open role from that ATS's public JSON job feed. Each job comes back in one consistent schema. Use it for sales triggers ("they just opened 5 RevOps roles"), investor or competitor monitoring, recruiting research, or job alerts.

  • ✅ Auto-detects the ATS: Greenhouse, Lever, Ashby, Workable and SmartRecruiters
  • ✅ Public feeds only: no login, no cookies, no residential proxies, and a low memory footprint (256–512 MB)
  • ✅ New-since-last-run: jobs are flagged is_new, and you can output only new jobs on a schedule
  • ✅ Fails soft: a company that can't be resolved becomes an error row with a reason code, and the rest of the run continues
  • ✅ Run summary: success rate, per-platform counts and error counts are saved to RUN_SUMMARY

⚡ Start in one click: ready-made example tasks

Example taskWhat it does
AI startups hiring: daily new rolesOpenAI, Anthropic, Hugging Face, Linear, Ramp, Mistral, Perplexity and Cursor. Set to onlyNew, so after the first run you see only roles that were just opened.
Fintech sales & GTM hiringStripe, Ramp, Brex, Plaid, Affirm, Chime and SoFi. Use it to spot new sales, RevOps and GTM roles as buying signals.
Competitor hiring tracker (5 domains)A 5-company template. Swap in your competitors, add a daily schedule, and get a feed of their new roles.

Open a task, press Try for free, and change the domains to your own list.

Who uses it, and for what

  • Sales and RevOps teams: "Acme just opened 4 SDR roles and a Head of RevOps" is a strong outbound trigger. Push new jobs to a CRM, Slack or Clay with an Apify integration or webhook.
  • Investors and analysts: track headcount growth by department across a portfolio or a watchlist of startups, every day.
  • Competitive intelligence: see which teams your competitors are building (AI, enterprise sales, new regions) before they announce anything.
  • Recruiters and agencies: get one clean feed of new roles at your target accounts, instead of checking dozens of career pages by hand.
  • Job seekers and job boards: build alerts or a niche job board from companies' own ATS feeds.

💰 Pricing: pay only for results

This Actor uses pay per event. You pay for companies found and jobs delivered, not for compute time.

EventPriceWhen it's charged
Actor start$0.001Once per run (per GB of memory; the default 512 MB counts as one)
Company resolved$0.01Once per company whose job board was found and fetched
Job saved$0.0015Per job row in the dataset (that's $1.50 per 1,000 jobs)
  • Error rows are free. If a company can't be resolved, you get an error row with a reason code and you pay nothing for it.
  • Examples: 10 companies × 30 jobs ≈ $0.55. 50 companies × 40 jobs ≈ $3.50 for a full run. A daily onlyNew watch of 20 companies costs about $0.20 a day plus $0.0015 per new job.
  • Set a spending cap: use Max cost per run in the run options. The Actor stops cleanly when the cap is reached and marks skipped companies BUDGET_REACHED.
  • Apify's free plan credit covers your first test runs.

Input

FieldTypeDefaultDescription
domainsarray of strings(required)Company domains or URLs. Optional per-line override: domain|platform:boardToken
platformsarrayallLimit detection to greenhouse, lever, ashby, workable or smartrecruiters
maxJobsPerCompanyinteger200Cap per company. Newest first for Greenhouse, Ashby and Workable. 0 means no cap
onlyNewbooleanfalseOutput only jobs not seen in earlier runs
stateStoreNamestringhiring-signals-stateNamed key-value store that remembers seen jobs. Use one name per watchlist
includeDescriptionbooleantrueAdd a plain-text description_snippet
snippetLengthinteger300Snippet length in characters
scanCareersPagebooleantrueRead the homepage and /careers to find the exact board link. When off, the Actor only guesses from the domain
maxConcurrencyinteger5Companies processed in parallel
requestTimeoutSecsinteger20Timeout for each HTTP request
{
"domains": ["stripe.com", "linear.app", "huggingface.co", "ubisoft.com|smartrecruiters:Ubisoft2"],
"maxJobsPerCompany": 100,
"onlyNew": false
}

Overrides. When a company's board token differs from its domain, or it uses a career page the Actor can't detect, pin it like this: doordash.com|greenhouse:doordashusa or bosch.com|smartrecruiters:BoschGroup.

Output (dataset)

One row per job (illustrative values):

{
"company": "Stripe",
"domain": "stripe.com",
"platform": "greenhouse",
"job_id": "7212345",
"title": "Account Executive, Enterprise",
"location": "San Francisco, CA",
"department": "Sales",
"url": "https://stripe.com/jobs/search?gh_jid=7212345",
"posted_at": "2026-10-28T17:02:11Z",
"description_snippet": "Stripe is a financial infrastructure platform...",
"is_new": true
}

When a company fails, it produces one error row with domain, error_code, error and scraped_at. Error rows are never charged.

error_codeMeaning
INVALID_INPUTThe line couldn't be parsed as a domain or override
ATS_NOT_FOUNDNo supported ATS board was found. The company may self-host or use Workday or iCIMS
BOARD_NOT_FOUNDThe board token from an override or a careers link returned 404
FETCH_FAILEDNetwork errors or timeouts while fetching. Retry the run
BUDGET_REACHEDThe run's maximum charge was reached, so this company was skipped
INTERNAL_ERRORAn unexpected parsing error. Please report it

The RUN_SUMMARY record in the default key-value store holds the input count, resolved count, success rate, jobs found, saved and new, per-platform and per-error counts, and a status for each company.

Scheduled monitoring (new jobs only)

  1. Set onlyNew: true and choose a stateStoreName, for example my-watchlist.
  2. Create a daily Apify Schedule.
  3. Each run outputs only roles that weren't there last time. Jobs that disappear are dropped from the state, so a role that gets reposted shows up as new again.

The state is saved only for companies that were fully fetched. If a company was cut short by maxJobsPerCompany or the budget, its earlier state is merged in rather than replaced.

How detection works

  1. If you give an override, the Actor uses it.
  2. Otherwise it scans the homepage, /careers and /jobs for embedded board links (boards.greenhouse.io/x, jobs.lever.co/x, jobs.ashbyhq.com/x, apply.workable.com/x, jobs.smartrecruiters.com/x).
  3. If no link is found, it guesses the slug from the domain (stripe, then stripeai, stripehq and so on) on each ATS's public API. Guessed boards with 0 open jobs are ignored, because placeholder accounts are common.

Memory and speed

WorkloadPeak memory (measured)Time
Small watchlist (baseline: runtime + SDK)~130 MBunder 1 min on a normal network
16 companies, up to 1,000 jobs each, concurrency 10 (5,034 jobs)198 MB~2 min

The 512 MB default leaves plenty of headroom. 256 MB works for small watchlists with maxConcurrency ≤ 5. The Actor uses plain HTTP only, with no browser, so it costs very little to run.

Limits and roadmap

  • Supported: Greenhouse, Lever, Ashby, Workable and SmartRecruiters.
  • Not yet supported: Workday, iCIMS, Taleo, Teamtailor and self-hosted careers pages. These companies return ATS_NOT_FOUND. Workday support is next on the roadmap. Many large enterprises use it, and its public /wday/cxs/ job-search endpoint needs per-tenant discovery.
  • SmartRecruiters descriptions come from one extra public request per job, which makes these runs slower. Turn off includeDescription for the fastest runs.
  • Caps: Lever and SmartRecruiters caps follow the API's order instead of strict newest-first.
  • Accuracy: auto-detection resolved 83% of a 30-company benchmark with no overrides. Add domain|platform:token overrides to fix the rest.

Support

Found a company that should resolve but doesn't? Open an issue on the Actor's Issues tab and include the domain. SignalRoute usually adds the fix or an override hint within a few days.

This Actor reads only public, unauthenticated job-board APIs that the ATS vendors publish for embedding job listings. It does not collect personal data.