Vee Jobs - Greenhouse, Lever, Ashby, Workable Jobs Scraper avatar

Vee Jobs - Greenhouse, Lever, Ashby, Workable Jobs Scraper

Pricing

Pay per event

Go to Apify Store
Vee Jobs - Greenhouse, Lever, Ashby, Workable Jobs Scraper

Vee Jobs - Greenhouse, Lever, Ashby, Workable Jobs Scraper

Every open job from Greenhouse, Lever, Ashby and Workable career pages in one clean schema. Paste a URL or a company slug. Filter by title, location, remote and date. Emails and phones are redacted by default. $1.80 per 1,000 jobs.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Hoxei R&D

Hoxei R&D

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Vee Jobs

Every open job from Greenhouse, Lever, Ashby and Workable career pages, in one consistent dataset.

Paste a careers URL or just a company name. Vee Jobs works out which platform the company uses, pulls all open roles, and returns them in the same fields no matter where they came from.

Who it is for

  • Job boards and aggregators that need a steady feed of direct-from-employer listings
  • Recruiters and sourcers tracking which companies are hiring for which roles
  • Sales and market-intelligence teams using hiring as a buying signal ("who is hiring data engineers in Berlin")
  • Researchers studying the labour market

What you get: every open job as one clean table (CSV, JSON, Excel)

One row per job, with the same fields for all four platforms:

{
"platform": "ashby",
"companySlug": "openai",
"jobId": "…",
"title": "Research Engineer",
"company": "openai",
"location": "San Francisco",
"department": "Research",
"employmentType": "FullTime",
"remote": false,
"workplaceType": "onsite",
"url": "https://jobs.ashbyhq.com/openai/…",
"postedAt": "2026-09-30T…",
"updatedAt": null,
"compensation": "$257K – $335K • Offers Equity",
"descriptionHtml": "…",
"descriptionText": "…",
"scrapedAt": "2026-10-14T17:13:57.104Z"
}

compensation is readable text (for example USD 70,000-110,000 per year) filled when the company publishes it on the job board. salaryMin, salaryMax, salaryCurrency and salaryInterval hold the same range as numbers when the platform provides them (Lever, Ashby, and Greenhouse boards with pay transparency). remote is true only for fully remote jobs, workplaceType is remote, hybrid or onsite when the platform says so, and allLocations lists every location of multi-location postings. applyUrl is the direct apply link. employmentType and department are filled when the platform provides them, otherwise null.

A SUMMARY record in the key-value store lists, for every company you entered, the platform found, the number of open jobs, how many matched your filters, and the reason for any company that was skipped.

How it works

Vee Jobs calls the public job-board APIs that Greenhouse, Lever, Ashby and Workable provide for embedding listings on career sites. It does not open a browser, use proxies or parse HTML pages. Runs need little compute, and the output does not break when a company redesigns its careers page.

How it is different

  • One schema for four platforms. Fields are normalised, so you do not write four parsers.
  • Enter a name, not a URL. A bare slug such as notion is tried against each platform in turn (up to four requests per slug).
  • Email and phone redaction on by default. Email addresses (including %40 and @ forms) and phone numbers in job descriptions, titles, locations and other text fields (and in job links) are replaced with [email removed] and [phone removed]. Turn it off with redactContacts.
  • Clear reporting. A company that is not found is listed in SUMMARY and skipped, and the run continues. Access-denied responses (401, 403, 451) are reported as errors and not mislabelled "not found".
  • Hard limits on spend. maxJobs caps each company, maxTotalJobs caps the whole run, and the run stops at maxRuntimeSecs. Charging stops if you set a maximum cost on the run.
  • Fixed, trusted hosts only. Requests go only to the four platforms' API hosts. Company input is reduced to a validated board slug, so nothing else can be requested.

If something looks wrong

  • "No job board found": the slug is misspelled or the company uses another system. Paste the full careers page URL, or give { "slug": "acme", "platform": "lever" }. A bare slug that exists on several platforms returns the first one that has open jobs (Greenhouse, Lever, Ashby, Workable order).
  • 0 jobs for a company that exists: the board has no open jobs right now, or your filters (keywords, locations, remoteOnly, postedWithinDays) matched nothing. The reason is written to SUMMARY.
  • The same board listed twice (even as a slug and as a URL) is returned once and not billed twice.
  • A posting with broken data (for example a null entry) is skipped and counted in SUMMARY as skippedPostings. The other jobs of that board are still returned.

Input examples

Three companies, all open roles:

{
"companies": [
"https://boards.greenhouse.io/stripe",
"https://jobs.ashbyhq.com/openai",
"https://jobs.lever.co/spotify"
]
}

Remote data roles posted in the last 14 days, without descriptions:

{
"companies": ["notion", "stripe", "outreach"],
"keywords": ["data", "analytics"],
"remoteOnly": true,
"postedWithinDays": 14,
"includeDescription": false
}

Berlin roles only:

{
"companies": ["https://apply.workable.com/huggingface/", "spotify"],
"locations": ["Berlin"]
}
FieldWhat it does
companiesCareer page URLs or bare slugs (max 500)
keywordsKeep jobs whose title contains any of these
locationsKeep jobs whose location contains any of these
remoteOnlyOnly remote jobs
postedWithinDaysOnly jobs posted in the last N days (0 = any time)
includeDescriptionInclude HTML and plain-text descriptions (default on)
redactContactsRedact emails and phone numbers (default on)
sanitizeHtmlKeep only basic formatting tags (paragraphs, lists, headings, bold, italic, links, tables) in descriptions. Script, style, iframe, form and image tags and all attributes are removed, and only http(s) links are kept (default on)
maxJobsCap per company (default 5,000)
maxTotalJobsCap for the whole run (default 100,000)
maxRuntimeSecsStop after this many seconds (default 3,600)
contactOptional URL or email added to the User-Agent

What it costs

Pay per event. You pay only for results, and the price is the same on every Apify plan.

EventPrice
Job returned$1.80 per 1,000 jobs ($0.0018 each)
Run start$0.005 per run

Platform usage (compute) is included in these prices, so there is no separate bill for it. The pricing table at the top of the Actor page is Apify's standard layout and lists every plan (Free, Starter, Scale, Business). Our price is the same in every column, so you never pay more or less because of your plan.

Examples, each for one run:

You getResultsRun startTotal
100 jobs$0.18$0.185
1,000 jobs$1.80$1.805
10,000 jobs$18.00$18.005

Filters and caps (limits such as the per-run result caps and your input filters) only reduce the number of results you pay for. Set a maximum cost on the run in Apify if you want a hard spending limit.

FAQ

Which platforms are supported? Greenhouse, Lever, Ashby and Workable.

Can I give a company name instead of a URL? Yes, give the board slug (the part after the platform's domain). The platform is detected automatically.

Does it return salary? When the company publishes it on the job board. Many do not, and the field is null then.

Why is a company missing from my results? Check SUMMARY. It states whether the board was not found, access was denied, or no jobs matched your filters.

Do the filters change what I pay? Yes, in your favour. You are charged only for jobs that pass your filters and are returned.

Can I render descriptionHtml on my site? Run it through your own HTML sanitizer first. By default (sanitizeHtml on) Vee Jobs keeps only basic formatting tags, removes script, style, iframe, form and image tags and every attribute, and keeps only http(s) links (with rel="nofollow noopener"), but the text is still third-party content. Turn sanitizeHtml off if you need the raw HTML exactly as published. descriptionText is plain text.

How fresh is the data? Each run reads the live job board, so you get what the company shows at that moment.

Can I schedule it? Yes, use Apify schedules and compare runs by jobId to find new roles.

Limits

  • companies: up to 500. keywords and locations: up to 200 each.
  • maxJobs per company up to 100,000. maxTotalJobs up to 1,000,000.
  • Each API response is capped at 50 MB. Requests are spaced 300 ms apart, and 429 and 5xx errors are retried with backoff, honouring Retry-After.
  • With sanitising on (the default), each description is cut at 200,000 characters, even when redaction is off. With redaction on, each description is limited to 50,000 characters. descriptionTruncated: true marks longer ones.
  • Redaction catches standard email and phone formats. It does not detect names or spelled-out forms such as "jane at example dot com". Long digit strings of 8 to 11 digits (for example a salary written as 80000000) are redacted as phone numbers.
  • If a description contains an unterminated HTML comment (<!-- without -->), the rest of that description is dropped and descriptionTruncated is true.
  • url and applyUrl only ever contain http(s) links of up to 2,048 characters. Anything else (javascript:, data:, mailto:) becomes null. salaryCurrency is a three-letter code or null.
  • Spreadsheets: text fields that a spreadsheet would read as a formula (starting with = or @, or with + / - that is not followed by a digit) get a leading apostrophe (for example '=SUM(A1)), so opening the CSV or Excel export cannot run them. Normal values such as +65 6123 4567 or -5% off are untouched.

This Actor retrieves publicly available data only. It is not affiliated with, endorsed by or sponsored by Greenhouse, Lever, Ashby, Workable or any employer whose jobs you retrieve. All trademarks belong to their owners and are used only to describe compatibility.

Vee provides tools only; you are fully responsible for how you use them and the results. The tool is provided as is, without warranty, and Vee gives no legal advice. You are fully responsible for your use of the data: comply with the terms of service, robots.txt, copyright and database rights of the sites you target, and with all applicable law, including data protection laws (GDPR, UK GDPR and similar). The output includes personal data whenever a job post names a person, for example a recruiter or hiring manager. Have a lawful basis before you store or reuse any personal data, minimise it and delete it when no longer needed, and do not use it for unsolicited contact. Do not republish copyrighted text or images without permission. Vee does not collect or keep your inputs or results; they stay in your Apify account. Vee reserves the right to change or withdraw the Actor if a site owner objects. To raise a concern, open an issue on this Actor's Issues tab on Apify.

Support

Questions, a missing field or a feature request? Open an issue on this Actor's Issues tab on Apify and we will reply there.