Job-market and company data, in one normalised schema.
Three Apify Actors that read public, unauthenticated APIs and reconcile them into a single set of fields — so you integrate once instead of four times.
3 Actors
Python
No browser automation
No proxies by default
robots.txt respected
Pay per result
What these are
Most scrapers on the Apify Store cover one source. Tracking two hundred companies across four applicant tracking systems therefore means running four Actors and reconciling four different field names, four pagination styles and four ideas of what a location is.
These three do the reconciling. Each takes a mixed list, fetches from the vendors' own public job-board and content APIs, and writes one row per result with identical fields across every source. A field a source does not publish comes back null — never guessed, never inferred, never filled in from somewhere else.
The Actors
ATS Job Board Scraper
Greenhouse · Lever · Ashby · Workable
Hand it a mixed list of company job boards — a careers URL, or greenhouse:stripe — and get one row per open role, with the same fields whichever ATS it came from. Roughly one request per company.
Who it is for
Recruiting and talent intelligence teams tracking hiring across a portfolio; niche job boards that want the source of truth rather than a re-scraped aggregator; sales teams reading job posts as a buying signal.
Honest limitation
Four ATS platforms, not all of them. SmartRecruiters and Recruitee disallow generic clients in robots.txt, so this Actor deliberately does not touch them; Workday, Taleo, iCIMS and SAP SuccessFactors publish no comparable open board API and are out of scope.
One search across five public remote-job feeds, deduplicated into a single schema. When two boards carry the same role it collapses to one row, and alsoSeenOn records which other feeds had it.
Who it is for
Anyone running a niche board or newsletter without maintaining five integrations; labour-market researchers; teams feeding fresh, structured, permissively-sourced job text into a search or RAG index.
Honest limitation
A current-openings tool, not a historical archive — and feed depth varies enormously. Arbeitnow returns 250 jobs in a page where Remotive's entire current list was 17 on the day it was last checked, so the same page setting buys very different amounts of data per feed.
A list of domains in, one clean row per company out: email addresses on the company's own domain, phone numbers, social profiles, the technologies visible in the page, and — less usually — which ATS the company recruits with and its board token.
Who it is for
Lead enrichment from a CRM export; qualifying prospects by tech stack; recruiting-tech mapping. The atsToken it returns is exactly the input the ATS scraper above takes, so the two chain.
Honest limitation
No JavaScript rendering, and most B2B sites do not publish an address. In a 25-domain test 22 loaded, 22 gave a tech stack, 20 a LinkedIn page, 13 an email and 2 a phone number — the rest route contact through a form. It reports what is on the page; it does not pattern-generate addresses or verify deliverability.
Every source here is someone else's free service, so the interesting question is not whether one will change shape — it is whether you find out. These are built so that breakage is loud:
Every run writes a RUN_SUMMARY record with per-source row counts and per-source errors. A source that quietly starts returning nothing shows up as a count that dropped, not as a column of nulls you notice a month later.
One failing source does not fail the run. Fetches retry with backoff; a feed that is down is recorded and the rest still return.
Missing means null. No source's value is ever substituted for another's, and nothing is inferred to make a column look complete.
No proxies, no browser, no login, no captcha solving. These read documented public JSON APIs and plain HTML, which is both cheaper to run and dramatically less to keep working.
robots.txt is honoured by default, and skipped URLs are returned in the output so you can see exactly what was not fetched rather than wondering.
Crawl delays are enforced per host, raised automatically when a site asks for longer. Parallelism happens across domains, never within one.
All sources last verified end to end on 10 September 2026.
Contact
Bug reports, a source that has changed shape, a field you need that is not there, or a question before you buy — all welcome, and the first two are the most useful thing you can send.