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.
| Scraper | Discoverable | Browser CORS | Notes |
|---|---|---|---|
GreenhouseScraper | Yes | Yes | Embedded boards and gh_jid hints |
AshbyScraper | Yes | Yes | |
LeverScraper | Yes | Yes | |
WorkableScraper | Yes | No | |
SmartRecruitersScraper | Yes | Yes | PascalCase slugs |
RipplingScraper | Yes | Yes | |
WorkdayScraper | No | No | tenant.pod.site, e.g. autodesk.wd1.Ext |
GitHubScraper | No | No | iCIMS-backed, single-company scraper |
GoogleScraper | No | No | Single-company scraper |
NetflixScraper | No | No | Single-company scraper |
NvidiaScraper | No | No | Eightfold-backed, single-company scraper |
ShopifyScraper | No | No | Single-company scraper |
UberScraper | No | No | Oracle Fusion Recruiting Cloud-backed |
Browser support depends on the board’s current cross-origin policy. Node does not enforce browser CORS. See browser fallback.
Reuse a scraper for bulk work
Section titled “Reuse a scraper for bulk work”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 jobThe 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.