Startup Jobs Search: Greenhouse, Lever & Ashby career pages
Pricing
from $4.00 / 1,000 jobs
Startup Jobs Search: Greenhouse, Lever & Ashby career pages
Search open roles across thousands of startup career pages in one run. Filter by title keywords, location, remote, department, and posting date. Pre-built index refreshed every few hours; no login, no proxies.
Pricing
from $4.00 / 1,000 jobs
Rating
0.0
(0)
Developer
David Braun
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Startup Jobs Search: Greenhouse, Lever & Ashby career pages in one query
Search open roles across thousands of startup career pages in a single run. Filter by title keywords, location, remote status, department, company, and posting date. Results come from a pre-built index of company job boards hosted on Greenhouse, Lever, and Ashby, refreshed every few hours, so a search over every company finishes in seconds instead of crawling each site.
No login, no API keys, no proxies, no browser. The data comes from the public job-board endpoints each company publishes for its own careers page.
What you can do with it
- Job search across companies. "Every staff engineer role posted in the last 7 days that is remote-friendly." One run, one CSV.
- Hiring signals for sales. Track which companies just opened roles in your category. A hiring spike is a buying signal.
- Recruiting and sourcing. Watch competitors' openings by department, or find companies hiring for a skill you place.
- Market research. Salary ranges where companies publish them, remote policy by company, hiring volume by sector.
- Alerts and pipelines. Schedule the actor, filter with
postedWithinDays, and pipe new rows to Slack, Google Sheets, Airtable, or your own database with Apify integrations, Make, n8n, or Zapier. - AI agents. Every filter is a plain input field, so an agent can call this actor as a tool through the Apify MCP server and get clean JSON back.
Sample output
One row per job:
{"id": "greenhouse:stripe:8142952","title": "Staff Software Engineer, Link - Bank Connections","company": "Stripe","companySlug": "stripe","companyWebsite": "https://stripe.com","ats": "greenhouse","url": "https://stripe.com/jobs/search?gh_jid=8142952","applyUrl": "https://stripe.com/jobs/search?gh_jid=8142952","location": "San Francisco, Seattle, New York","locations": ["San Francisco, Seattle, New York"],"workplaceType": null,"isRemote": null,"department": "Engineering","team": null,"employmentType": null,"salaryMin": null,"salaryMax": null,"salaryCurrency": null,"salaryInterval": null,"salaryRaw": null,"postedAt": "2026-09-25T18:11:53.000Z","updatedAt": "2026-09-25T20:44:56.000Z","seniority": "staff_or_principal","roleFamily": "software_engineering"}
With includeDescription on, each row also carries descriptionHtml and
descriptionText.
Two fields are added by classification rather than copied from the company:
seniority (intern, junior, mid, senior, staff_or_principal, manager,
director_or_above) and roleFamily (software_engineering, data, devops_sre,
security, product, design, sales, marketing, customer, operations,
people_finance_legal, research, hardware, other). They are derived from the
title and department with a decision model, once per distinct title, and are
null for titles not yet classified.
Other fields are filled only when the company publishes them. Salary appears when the job board exposes a pay range (common on Ashby and Lever, and on Greenhouse boards with pay transparency turned on). Nothing is guessed.
Input
| Field | What it does |
|---|---|
titleKeywords | Keep jobs whose title contains any of these words or phrases. Case-insensitive. Empty means all titles. |
requireAllKeywords | Require every keyword instead of any. |
excludeKeywords | Drop jobs whose title contains any of these. |
locations | Keep jobs whose location contains any of these strings, for example London, Remote, New York. |
remote | any, remote_only, or exclude_remote, using the company's own remote flag or a "remote" location. |
departments | Keep jobs whose department or team contains any of these. |
seniority | Keep only these seniority levels, for example ["senior", "staff_or_principal"]. |
roleFamilies | Keep only these role families, for example ["software_engineering", "data"]. |
companies | Restrict to these companies by name or career-page slug. |
postedWithinDays | Only jobs first published within this many days. |
maxResults | Cap on returned jobs. Newest first. |
includeDescription | Also fetch the full description for each returned job. |
boards | Extra career boards to fetch live and search alongside the index, as greenhouse:slug, lever:slug, ashby:slug, or the board URL. |
source | index (default) or live to search only the boards and companies you list. |
Example: remote senior or staff engineering roles posted this week.
{"roleFamilies": ["software_engineering"],"seniority": ["senior", "staff_or_principal"],"remote": "remote_only","postedWithinDays": 7,"maxResults": 500}
Example: everything a specific set of companies has open right now, fetched live.
{"source": "live","boards": ["greenhouse:stripe", "ashby:linear", "lever:palantir"],"includeDescription": true}
Pricing
Pay per event. You pay only for jobs returned, never for searching.
| Event | Price |
|---|---|
| Job returned | $0.004, so $4 per 1,000 jobs |
| Full description attached | $0.002, only when includeDescription is on |
The first 5 jobs of every run are free, so you can check the output before paying for anything. Runs stop cleanly at your spending limit.
How the index works
A maintainer schedule fetches every company in the bundled list from the
three job-board APIs, normalizes the jobs into one schema, and stores the
result in a public Apify key-value store. Your run reads that store, applies
your filters, and returns rows. The OUTPUT record of each run reports
indexBuiltAt so you know how fresh the data is.
If you need a company that is not in the index, add its board under boards
and it is fetched live in the same run. If you would rather keep a private
index of your own companies, run the actor with mode: refresh; it writes an
index into a key-value store in your account that you can then search with
indexStoreId.
Limits and honesty
- Coverage is companies on Greenhouse, Lever, and Ashby. Workday and custom career sites are not included yet.
- Jobs are as fresh as the last index refresh, typically a few hours.
Use
boardswithsource: livewhen you need this minute. - Location and remote fields are whatever the company wrote. Some companies put six cities in one string.
- Descriptions are fetched on demand from the source, so a company that removed a job between the refresh and your run returns no description for it, and you are not charged for it.
About
Built and maintained by Kindling Labs. Issues and feature requests are welcome on the Issues tab; they are read and answered.