Job Listings Scraper | Greenhouse Lever Ashby | No API Key avatar

Job Listings Scraper | Greenhouse Lever Ashby | No API Key

Pricing

Pay per event

Go to Apify Store
Job Listings Scraper | Greenhouse Lever Ashby | No API Key

Job Listings Scraper | Greenhouse Lever Ashby | No API Key

Scrape job postings straight from company career boards on Greenhouse, Lever, Ashby, SmartRecruiters, Rippling, Workable and Personio. Returns one normalized schema with parsed salary range, seniority and remote/hybrid/onsite. No API key, no proxy, n

Pricing

Pay per event

Rating

0.0

(0)

Developer

Bizking Jang

Bizking Jang

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

Job Listings Scraper — Greenhouse, Lever, Ashby & more

Scrape job postings directly from company career boards on Greenhouse, Lever, Ashby, SmartRecruiters, Rippling, Workable and Personio, and get them back in one normalized schema with parsed salary range, seniority level and remote/hybrid/onsite classification.

No API key. No proxy. No login. No cookies. These are the companies' own public job-board endpoints, so nothing here breaks when a scraper gets blocked.

Greenhouse job board scraper

Point it at greenhouse:stripe or paste https://boards.greenhouse.io/stripe and get every open role with offices, departments, salary bands and posting dates.

Lever, Ashby and SmartRecruiters job scraper

Same call, same output shape. Mixing providers in one run is the point — you should not have to care which ATS a company happens to use.

Job listings API for AI agents

Small, fast, single-purpose. Call it per company, on a schedule or from an agent, and get JSON back.


Why this beats a generic job scraper

This ActorTypical job scraper
SourceCompany's official ATS endpointScraped HTML off an aggregator
Blocked by anti-botNever — no proxy neededFrequently
Providers in one schema71
Salary parsed to numbersYes (min, max, currency, period)Raw text, if at all
Seniority classifiedYes (8 levels)No
Remote / hybrid / onsiteYes, precision-firstKeyword guess on description
Candidate personal dataNone, by designSometimes
Redistributes employer's copyrighted textNo, by defaultUsually, in bulk
Charges on failureNoUsually

On the remote flag specifically: almost every posting's boilerplate says something like "we support remote work", so classifiers that read the description mark half the board remote. This one reads only the title, the location field and the provider's own remote flag. You get fewer remote hits and you can trust them.


What you get per job

{
"source": "greenhouse",
"board": "stripe",
"job_id": "7922618",
"title": "Account Executive, Existing Business, Platforms",
"company": "Stripe",
"department": "Global Operations",
"team": null,
"location": "New York, NY",
"locations": ["US-PERM"],
"country": null,
"employment_type": null,
"workplace_type": "hybrid",
"is_remote": false,
"seniority": "mid",
"apply_url": "https://stripe.com/jobs/search?gh_jid=7922618",
"posted_at": "2026-06-02T16:49:53-04:00",
"updated_at": "2026-08-06T12:10:06-04:00",
"salary_min": 182208,
"salary_max": 236580,
"salary_currency": "USD",
"salary_period": "yearly",
"salary_raw": "$182,208 - $236,580",
"first_seen_at": "2026-07-14T09:02:00+00:00",
"last_seen_at": "2026-08-09T18:29:02+00:00",
"is_new": false,
"days_open": 26
}

seniority is one of internship, junior, mid, senior, staff, lead, principal, executive. workplace_type is one of remote, hybrid, onsite, or null when the posting genuinely does not say.

Input

{
"boards": ["greenhouse:stripe", "ashby:ramp", "lever:plaid"],
"keywords": ["engineer", "data"],
"excludeKeywords": ["intern"],
"locations": ["New York", "Remote"],
"seniorities": ["senior", "staff", "principal"],
"remoteOnly": true,
"postedAfter": "2026-07-01",
"descriptionMode": "none",
"trackHistory": true,
"onlyNew": false,
"reportClosed": false,
"maxItems": 500
}

Only boards is required. Each entry is provider:token or the board URL — both work.

ProviderBoard formatWhere the token comes from
greenhousegreenhouse:stripeboards.greenhouse.io/**stripe**
leverlever:plaidjobs.lever.co/**plaid**
ashbyashby:rampjobs.ashbyhq.com/**ramp**
smartrecruiterssmartrecruiters:Visajobs.smartrecruiters.com/**Visa**
ripplingrippling:ripplingats.rippling.com/**rippling**
workableworkable:loomapply.workable.com/**loom**
personiopersonio:demo**demo**.jobs.personio.de

Pricing

EventPrice
job — one normalized posting returned$10.00 / 1,000
board — one career board fetched$0.02

maxItems is a hard cost ceiling. Filters are applied before billing, so you are not charged for jobs you filtered out, and a board that fails or returns nothing costs you nothing beyond the board fetch.

On job description text

The factual fields — title, company, department, location, salary, dates, apply URL — are facts, and facts are not copyrightable. The description body is prose the employer wrote and holds copyright in.

So descriptionMode defaults to none: you get every factual field and a link to the posting, and no redistributed text. Set it to excerpt for the first 300 characters when you need to judge relevance, or full if your particular use is licensed or fair.

Keyword filtering always searches the full description regardless of this setting — filtering on text that is never handed back raises no redistribution question. So descriptionMode: "none" costs you nothing in search quality.

New-jobs feed and closed-role feed

Every posting carries first_seen_at, last_seen_at, is_new and days_open, tracked per board across runs. Set onlyNew: true and the run becomes a pure feed of roles that opened since you last checked. Set reportClosed: true and you also get a row for every posting that has disappeared, marked status: "closed".

History covers every posting the board returned, not only the ones that pass your filters or your maxItems — so narrowing a search never makes unrelated roles look new next run.

Why it matters: a static list of open roles is worth one purchase. "What opened this week, what closed" is worth a subscription, and it is the hiring signal buyers actually act on — a company opening five infrastructure roles is buying infrastructure, and a role quietly closing says something too.

Use cases

Job boards and aggregators that need clean, first-party listings. Recruiting and ATS tools tracking who is hiring. Labour-market and compensation research. Competitive intelligence — watching a competitor's headcount plan appear in public before it is announced. Sales teams using hiring signals ("they just opened 5 data-engineer roles") as intent data. AI agents answering questions about open roles.

Use with AI agents

The Actor is callable over the Apify API and through MCP, and it is enabled for agentic payments. Because it is scoped to one job — take boards, return jobs — it works well as a tool an agent calls repeatedly rather than a crawl a human launches once.

Troubleshooting

board not found — the token is wrong. Open the company's careers page and take the slug straight out of the URL; the table above shows where it sits for each provider.

A company returns nothing — some boards genuinely have zero open roles, and some companies use a provider not listed here. Run with no filters first to confirm before assuming a bug.

No salary on most jobs — most postings don't publish one. The parser is deliberately conservative and returns nothing rather than guessing; roughly 1 in 8 postings in the US carries a range, far more in states with pay-transparency laws.

Descriptions missing — by default they are not returned at all; see "On job description text". Even with descriptionMode: "full", SmartRecruiters and Rippling expose descriptions only on their per-job endpoints, not the list endpoint. Titles, locations, departments, salary and apply URLs are complete for every provider.

FAQ

Is scraping job postings legal? These are the companies' own public job-board API endpoints, published so that job boards and aggregators can read them. No login, no paywall, no anti-bot circumvention. Job postings are corporate publications, not personal data.

Do you return any candidate or recruiter personal data? No. By design, this Actor returns only postings. It never touches applicants, résumés, or recruiter contact details.

What about the employers' copyright in their postings? Facts about a posting are not copyrightable and are always returned. The description prose is, so it is withheld unless you explicitly ask for it. See "On job description text" above.

How fresh is the data? Live. Every run hits the ATS at request time — there is no cache and no stored index.

Can I monitor boards on a schedule? Yes — that is what it is built for. Use onlyNew rather than postedAfter: it compares against what the board actually had last run, so it catches reposts and undated listings that a date filter misses.

Not affiliated with, endorsed by, or sponsored by Greenhouse, Lever, Ashby, SmartRecruiters, Rippling, Workable or Personio. All trademarks belong to their respective owners. You are responsible for how you use the data you collect.