Skip to content

Choose a supported board

Constructors are properties of scrapers; their names form ScraperName. Discoverable means name-derived slug probing works. Other boards can still resolve through recognized URLs, known registry records or explicit board identity; search can locate non-derivable multi-tenant slugs.

ScraperDiscoverableBrowser CORSNotes
GreenhouseScraperYesYesEmbedded boards and gh_jid hints
AshbyScraperYesYes
LeverScraperYesYes
WorkableScraperYesNo
SmartRecruitersScraperYesYesPascalCase slugs
RipplingScraperYesYes
WorkdayScraperNoNotenant.pod.site, e.g. autodesk.wd1.Ext
GitHubScraperNoNoiCIMS-backed, single-company scraper
GoogleScraperNoNoSingle-company scraper
NetflixScraperNoNoSingle-company scraper
NvidiaScraperNoNoEightfold-backed, single-company scraper
ShopifyScraperNoNoSingle-company scraper
UberScraperNoNoOracle Fusion Recruiting Cloud-backed

Browser support depends on the board’s current cross-origin policy. Node does not enforce browser CORS. See browser fallback.

High-level wrappers create/dispose an instance per call. Some boards serve full content through listing endpoints; reuse an instance to share that in-memory cache:

The agent bulk fetching example shows filtering listing metadata before fetching selected postings.

import { scrapers } from '@chrisdothtml/job-scraper';

using scraper = new scrapers.AshbyScraper('zapier');
const jobs = await scraper.getJobsList();
for (const job of jobs) await scraper.getJob(job.id); // one list fetch, not one per job

The snippet uses using, requiring a runtime with Symbol.dispose. Otherwise use try/finally and call scraper.dispose(). getScraper returns a constructor for a dynamic name; isScraperName validates it first. Methods and static parsing/discovery capabilities are documented under Scraper.