Hiring signals from company career pages: new, removed and changed roles per company, plus normalized job postings from Greenhouse, Lever, Ashby, SmartRecruiters, Workable, 7 more ATSs, USAJOBS and any careers page with JobPosting markup. Pay per job and signal.
Company job boards to scrape, one per line. Use provider:boardId (greenhouse:stripe, lever:spotify, ashby:openai, smartrecruiters:Visa, workable:acme, rippling:acme, gem:acme, breezy:acme, teamtailor:acme, personio:acme, manatal:acme, jobscore:acme), paste the public board URL (boards.greenhouse.io/, job-boards.greenhouse.io/, jobs.lever.co/, jobs.ashbyhq.com/, careers.smartrecruiters.com/, apply.workable.com/, ats.rippling.com//jobs, jobs.gem.com/, .breezy.hr, .teamtailor.com, .jobs.personio.de, careers-page.com/, careers.jobscore.com/careers/), or paste the company's own careers URL (for example https://www.example.com/careers): the Actor fetches that page once, detects the Greenhouse, Lever, Ashby, SmartRecruiters or Workable board behind it and scrapes it like any other board. The careers page fetch is charged as one board request; a page with no detectable board becomes one ATS_NOT_DETECTED error item unless extendedDetection is on. Also: usajobs:<agency code> (for example usajobs:VA) for US federal jobs with your own USAJOBS API key, and jsonld:<careers URL> to read a site's schema.org JobPosting markup directly.
Type:array
Company preset
companyPreset
Optional
Optional curated list of verified company boards added to boards (duplicates by provider and board id are merged): ai-labs (AI labs and model companies), developer-tools (developer tools and cloud infrastructure) or fintech (fintech and crypto). Each list has 50 or more boards verified against the public job-board APIs; the companies and the verification date are listed in the README and docs/presets.md.
Type:string | null
Options:
ai-labsdeveloper-toolsfintech
Extended careers-page detection
extendedDetection
Optional
Off by default (careers URLs behave exactly as before). When on, a careers URL with no Greenhouse, Lever, Ashby, SmartRecruiters or Workable board is also checked for a Rippling, Gem, Breezy HR, Teamtailor, Personio, Manatal or JobScore board, and if there is none, the site's own schema.org JobPosting markup is read: from the careers page itself, from the job pages it links, or from job URLs in the site's sitemap. robots.txt is honored (a disallowed site becomes a ROBOTS_DISALLOWED error item), pages are fetched one at a time, and job pages are not charged, only the job records they yield (sitemaps are board requests). Workday, Oracle and SuccessFactors sites are not read.
Type:boolean
Default:false
Mode
mode
Optional
jobs writes one normalized record per open job. signals compares each board with its previous snapshot (stored in the key-value store named below) and writes new-role, removed-role, title-changed and location-changed records plus one per-board summary. The first signals run for a board is a baseline and writes job records instead.
Type:string
Default:jobs
Options:
jobssignals
Include job description
includeDescription
Optional
Add descriptionText (HTML converted to plain text, trimmed to 3,000 characters). Greenhouse, Lever, Ashby, Gem, Teamtailor, Personio, Manatal, JobScore, USAJOBS and JobPosting markup return descriptions in the same request; SmartRecruiters and Workable need one extra request per job, so large boards take longer. Rippling and Breezy HR listings carry no description.
Type:boolean
Default:false
Max jobs per board
maxJobsPerBoard
Optional
Upper bound on job records (and snapshot size) per board. Boards that exceed it are marked truncated and removed-role signals are suppressed for them so a partial fetch never looks like mass closures.
Type:integer
Minimum:1
Maximum:20000
Default:2000
State store name
stateStoreName
Optional
Named key-value store that holds the previous snapshot of each board for signals mode. Use a different name per schedule or customer to keep baselines separate.
Type:string
Default:ats-hiring-signals-state
Webhook URL (optional)
webhookUrl
Optional
If set, the Actor POSTs one JSON payload at the end of the run with per-board summaries and counts. Delivery failures are logged, never fatal.
Type:string
Max concurrency
maxConcurrency
Optional
How many boards are fetched in parallel. Requests to the same provider host are additionally rate-limited to about 2 per second.
Type:integer
Minimum:1
Maximum:20
Default:5
Max seconds per board
maxSecondsPerBoard
Optional
Time budget for one board (all pages and detail requests). A board that has produced nothing for 60 seconds, or uses up this budget, is cut off: the jobs already fetched are kept and the board is marked truncated (TIME_BUDGET); with nothing fetched it becomes one error item.
Type:integer
Minimum:30
Maximum:3600
Default:900
USAJOBS API key
usajobsApiKey
Optional
Your own free USAJOBS Search API key (request one at developer.usajobs.gov), needed only for usajobs:<agency code> boards. It is sent only to data.usajobs.gov in the Authorization-Key header, never logged or written to the output. OPM's terms do not allow sharing a key, so the Actor never ships one.
Type:string
USAJOBS registration email
usajobsEmail
Optional
The email address your USAJOBS API key was registered with. USAJOBS requires it as the User-Agent of every request; it is sent only to data.usajobs.gov.