ATS Job Board Scraper - Greenhouse, Lever, Ashby, Workable avatar

ATS Job Board Scraper - Greenhouse, Lever, Ashby, Workable

Pricing

$0.75 / 1,000 job posting records

Go to Apify Store
ATS Job Board Scraper - Greenhouse, Lever, Ashby, Workable

ATS Job Board Scraper - Greenhouse, Lever, Ashby, Workable

Beta (v0.1): Scrape live job postings directly from Greenhouse, Lever, Ashby, and Workable career sites with zero index delay. Deduplicates multi-city postings into one record, filters full job descriptions without timeouts, tracks NEW/ACTIVE/CLOSED hiring signals, and supports a free dryRun count.

Pricing

$0.75 / 1,000 job posting records

Rating

0.0

(0)

Developer

Radosław Szal

Radosław Szal

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

The ATS Job Board Scraper is an ultra-fast company career site job listing API and Greenhouse, Lever, Ashby, and Workable job scraper designed as a real-time new and expired jobs tracker with built-in hiring signals.

It connects directly to the public career site endpoints used by modern companies to publish their job openings, providing structured, clean, and deduplicated job data with zero indexing latency.


What It Does

  • Direct ATS Integration: Extracts live job postings straight from public JSON feeds of Greenhouse, Lever, Ashby, and Workable.
  • Zero Index Delay: Unlike secondary job aggregators that refresh hourly or daily, data is fetched in real time directly from the employer's applicant tracking system, preserving exact postedAt timestamps.
  • Flexible Company Input: Accepts bare company slugs (e.g. stripe, notion, figma) or full career board URLs (boards.greenhouse.io/stripe, jobs.lever.co/netflix, jobs.ashbyhq.com/linear, apply.workable.com/invision). Bare slugs are automatically probed across all supported ATS platforms.
  • Deep In-Memory Filtering:
    • Title keywords: Include and exclude keywords (case-insensitive substring matching).
    • Full description keywords: Filter by full job description locally in-memory — instant, reliable, and completely immune to network timeouts.
    • Location & country filtering: Built-in normalization for city aliases (Munich = München, Cologne = Köln, Warsaw = Warszawa) and country codes/names (US, UK, PL, DE, CA, etc.).
    • Workplace type: Target remote, hybrid, or onsite roles.
  • Hiring Signals & Delta Tracking:
    • Automatically identifies whether an opening is NEW, ACTIVE, or CLOSED.
    • Tracks firstSeenAt and computes daysOpen for every job.
    • Delta Mode (onlyNew): Emits only newly posted jobs since the previous run.
    • Closed Jobs Tracking (emitClosed): Emits jobs that disappeared since the last run to detect hiring freezes or filled positions.
  • Multi-Location Deduplication: Postings advertised across multiple cities are consolidated into a single record with a clean locations[] list and ISO-2 countries[] array.
  • Free Pre-Flight Check (dryRun): Verify filters and count matching listings without pushing dataset items or incurring event charges.

Why Choose Us

FeatureTypical Market AlternativesATS Job Board Scraper
Data FreshnessStale secondary indexes (1–2 hour delay)Direct from source (zero index delay)
Delta & Expired JobsPaid add-on ($20+/month separate actor)Included natively in standard pricing
Full Description FilteringSlow or causes gateway timeoutsFast, in-memory local filtering (no timeouts)
Multi-City PostingsEmits separate records (charges multiple times)1 job = 1 record with locations[] array
Pre-Flight EstimationNot availableFree dryRun mode ($0 cost)
Company DiscoveryUnverified bloated listsPrecise targeting via your slugs or board URLs

Specific Advantages

  1. Direct from the Source with Zero Index Delay: Many scrapers query third-party aggregators whose indexes lag by 1 to 2 hours. This actor queries the public career feeds of the ATS providers directly, delivering openings the moment they go live with accurate source timestamps.
  2. Delta Mode & Closed Job Detection Included: Tracking expired roles and changes typically requires paying for an auxiliary actor or a costly monthly subscription. Our scraper tracks state per board in the Key-Value Store (ats-state), delivering NEW, ACTIVE, and CLOSED hiring signals at no extra monthly fee.
  3. Full-Description Filtering Without Timeouts: Competitors often warn that filtering through full job descriptions is "VERY intensive, risk of time-out" or disable it entirely. We fetch the complete payload and filter locally in memory, giving you fast, bulletproof keyword matching across the full text.
  4. Consolidated Multi-City Postings: When an employer lists a single position across multiple locations (e.g., London, Berlin, and Paris), other scrapers create separate duplicate items and charge you for each one. We normalize the listing into a single record containing a unified locations[] array, saving you budget and downstream cleanup effort.
  5. Free dryRun Verification: Test new keyword combinations, location filters, or company lists without spending your budget. Setting "dryRun": true calculates matching job counts and stores the breakdown in your Key-Value Store under DRY_RUN at $0 cost.

Input

Configure your target companies, platforms, filters, and run modes using standard JSON input:

{
"companies": [
"stripe",
"airbnb",
"https://jobs.ashbyhq.com/linear",
"https://apply.workable.com/invision"
],
"atsPlatforms": [
"greenhouse",
"lever",
"ashby",
"workable"
],
"titleInclude": ["engineer", "developer"],
"titleExclude": ["intern", "senior"],
"descriptionInclude": ["python", "typescript"],
"descriptionExclude": ["clearance required"],
"locations": ["US", "remote", "Berlin"],
"workplaceType": "remote",
"onlyNew": false,
"emitClosed": false,
"dryRun": false,
"includeDescription": true,
"maxItems": 500
}

Input Parameters Reference

FieldTypeDefaultDescription
companiesstring[]RequiredList of company slugs (e.g. "stripe", "notion") or full board URLs (boards.greenhouse.io/..., jobs.lever.co/..., jobs.ashbyhq.com/..., apply.workable.com/...).
atsPlatformsstring[]["greenhouse", "lever", "ashby", "workable"]Priority order of ATS platforms to check when a bare slug is provided.
titleIncludestring[][]Keep only jobs whose title contains at least one of these keywords (case-insensitive).
titleExcludestring[][]Exclude any job whose title contains any of these keywords.
descriptionIncludestring[][]Keep only jobs whose full description contains at least one of these keywords (evaluated locally).
descriptionExcludestring[][]Exclude any job whose description contains any of these keywords.
locationsstring[][]Filter by city, state, or country with automatic alias expansion (e.g., "US", "UK", "Munich", "NY").
workplaceTypestring""Filter by workplace type: "remote", "hybrid", "onsite", or "" for any.
onlyNewbooleanfalseDelta mode: emit only newly added jobs not present in the previous run.
emitClosedbooleanfalseAlso emit postings that were removed since the previous run with hiringSignal="CLOSED".
dryRunbooleanfalseCount matching jobs for free. Writes count breakdown to Key-Value Store key DRY_RUN and emits 0 dataset items ($0 charge).
includeDescriptionbooleantrueInclude plain-text job description in the descriptionText field.
maxItemsinteger1000Maximum number of records to return (controls maximum spend per run; 0 = safety cap of 50,000).

Output

Each scraped job posting is normalized into a flat, consistent schema ready for databases, spreadsheets, or AI pipelines:

{
"id": "gh-6124589002",
"atsPlatform": "greenhouse",
"companySlug": "stripe",
"companyName": "Stripe",
"title": "Staff Software Engineer - Infrastructure",
"department": "Engineering",
"team": "Core Platform",
"employmentType": "full_time",
"workplaceType": "remote",
"locations": [
"San Francisco, CA",
"Seattle, WA",
"Remote - US"
],
"countries": [
"US"
],
"salaryMin": 185000,
"salaryMax": 235000,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"postedAt": "2026-10-24T14:30:00Z",
"updatedAt": "2026-10-25T09:15:00Z",
"firstSeenAt": "2026-10-24T15:00:00Z",
"daysOpen": 2,
"applyUrl": "https://boards.greenhouse.io/stripe/jobs/6124589002#app",
"jobUrl": "https://boards.greenhouse.io/stripe/jobs/6124589002",
"descriptionText": "As a Staff Software Engineer on Core Platform, you will design and scale...",
"hiringSignal": "ACTIVE",
"scrapedAt": "2026-10-26T12:00:00Z"
}

Pricing

This Actor operates on a transparent Pay-Per-Event (PPE) model: you only pay for the exact job records successfully delivered to your dataset.

  • Standard Price: $0.00075 per job ($0.75 per 1,000 jobs)
  • Actor Startup Cost: $0.00 (Free to start)
  • dryRun Pre-Flight Check: $0.00 (Zero dataset items = zero charges)

No Hidden Fees: Unlike tools requiring a separate monthly subscription to track expired positions or delta changes, delta monitoring (onlyNew) and closed job signals (emitClosed) are included at standard per-record rates.


FAQ

1. Which ATS platforms are supported and how are they identified?

We support Greenhouse, Lever, Ashby, and Workable. If you pass a full career page URL (such as jobs.ashbyhq.com/linear), the platform is identified automatically. If you provide a bare slug (such as stripe), the scraper sequentially checks each platform until it finds an active board.

2. Why is SmartRecruiters not supported?

SmartRecruiters' API endpoint explicitly specifies Disallow: / in its robots.txt file. We strictly respect web scraping ethics and legal compliance rules, meaning we do not bypass robots.txt restrictions. As a result, SmartRecruiters is deliberately excluded.

3. How do delta mode (onlyNew) and hiring signals work?

The scraper stores job board state in an Apify Key-Value Store named ats-state. In delta mode (onlyNew: true), it compares current active openings against previously observed jobs, emitting only newly listed positions. When emitClosed: true is enabled, it additionally emits positions that have closed or been unlisted, marking them with hiringSignal: "CLOSED" and calculating total daysOpen.

4. How does the free dryRun mode work?

When "dryRun": true is enabled, the scraper contacts the job boards, applies your filters, and calculates the exact number of matching postings. Instead of writing items to the dataset, it saves a breakdown object ({count, perCompany}) to the Key-Value Store key DRY_RUN. Because zero dataset items are written, you are billed $0.00.

5. How are multi-location postings handled?

Employers often post a single position with multiple eligible cities (e.g., London, Paris, and Remote). Rather than splitting these into multiple entries and billing you multiple times, our normalization engine merges all cities into a clean locations: [...] list and deduplicated ISO-2 countries: [...] array.


Legality & Compliance

  • Publicly Accessible Data: The Actor extracts listings solely from public career endpoints made freely available by ATS vendors for embedding job listings on company career pages.
  • No Authentication Bypass: The scraper does not access private accounts, bypass login walls, crack CAPTCHAs, or circumvent paywalls.
  • Privacy & GDPR Compliance: The output contains only public job vacancy information. Recruiter contact information (personal names, emails, phone numbers) and applicant data are never collected or stored.
  • Ethical Crawling: Honors robots.txt directives across all endpoints, respects crawl delays (including Lever's 1-second delay), bounds concurrency to a maximum of 4 requests, respects Retry-After headers, and declares a transparent User-Agent.
  • User Responsibility: The Actor collects publicly posted job requisitions. Users are responsible for ensuring that their downstream use and storage comply with third-party source terms of service and applicable local regulations (e.g. respecting Workable's Content-Signal: ai-train=no).

Feedback & Reviews

If this Actor saved you time or powered your hiring data pipeline, please consider leaving a rating and review on the Apify Store! Your feedback helps us maintain these integrations, add new ATS platforms, and continually improve data quality. If you encounter any issues or have feature suggestions, feel free to open an issue in the Actor's repository.