Vee Jobs - Greenhouse, Lever, Ashby, Workable Jobs Scraper
Pricing
Pay per event
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
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
notionis tried against each platform in turn (up to four requests per slug). - Email and phone redaction on by default. Email addresses (including
%40and@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 withredactContacts. - Clear reporting. A company that is not found is listed in
SUMMARYand skipped, and the run continues. Access-denied responses (401, 403, 451) are reported as errors and not mislabelled "not found". - Hard limits on spend.
maxJobscaps each company,maxTotalJobscaps the whole run, and the run stops atmaxRuntimeSecs. 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
SUMMARYasskippedPostings. 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"]}
| Field | What it does |
|---|---|
companies | Career page URLs or bare slugs (max 500) |
keywords | Keep jobs whose title contains any of these |
locations | Keep jobs whose location contains any of these |
remoteOnly | Only remote jobs |
postedWithinDays | Only jobs posted in the last N days (0 = any time) |
includeDescription | Include HTML and plain-text descriptions (default on) |
redactContacts | Redact emails and phone numbers (default on) |
sanitizeHtml | Keep 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) |
maxJobs | Cap per company (default 5,000) |
maxTotalJobs | Cap for the whole run (default 100,000) |
maxRuntimeSecs | Stop after this many seconds (default 3,600) |
contact | Optional 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.
| Event | Price |
|---|---|
| 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 get | Results | Run start | Total |
|---|---|---|---|
| 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.keywordsandlocations: up to 200 each.maxJobsper company up to 100,000.maxTotalJobsup 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: truemarks 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 anddescriptionTruncatedistrue. urlandapplyUrlonly ever containhttp(s)links of up to 2,048 characters. Anything else (javascript:,data:,mailto:) becomesnull.salaryCurrencyis a three-letter code ornull.- 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 4567or-5% offare untouched.
Responsible use, legal and data protection
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.