DEV Community

Kristian Ponsford
Kristian Ponsford

Posted on

I built a hiring-signals tracker because job scrapers keep breaking

Every job scraper I've tried does the same thing: parse careers-page HTML,
break two weeks later, return mush. But here's the thing — most companies
don't host their own job boards. They use an ATS: Greenhouse, Lever, Ashby,
Workable, Recruitee, SmartRecruiters. And every one of those exposes a public
JSON API for its boards.

So instead of scraping HTML, my actor calls the APIs directly:

  • Stripe -> Greenhouse API -> 502 open roles, structured JSON, ~1 second
  • Ramp -> Ashby API -> 128 roles
  • Give it just "anthropic.com" and it auto-detects the Greenhouse board (404 roles)

Listings are commodity. Signals are the product.

The actor keeps a snapshot between runs and diffs:

  • HIRING_SURGE — new-role velocity >=20% (a department is expanding: sales trigger)
  • HIRING_FREEZE — >=25% of postings pulled (often precedes news by weeks)
  • NEW_ROLES — every new job since last check, with title/location/URL

Schedule it daily against a watchlist and pipe the diff to Slack. A 100-company
watchlist costs about $2/day.

Who actually uses this

B2B sales (hiring in your buyer's department = budget exists), recruiters
(req velocity across target accounts), analysts (freezes as leading
indicators), and job seekers who want first-mover advantage on target companies.

Try it: https://apify.com/Bythonic_API/hiring-signals-monitor. First runs are cheap; failed lookups are never charged.
Missing an ATS you need (Workday, iCIMS)? Open an issue — I'm actively adding.

Top comments (0)