Ashby Jobs Scraper: All Jobs, Salaries & New-Job Alerts
Pricing
from $0.75 / 1,000 jobs
Ashby Jobs Scraper: All Jobs, Salaries & New-Job Alerts
Scrape every open job from any company on Ashby (jobs.ashbyhq.com) via the official public job-board API. Salary ranges, departments, remote/hybrid, full descriptions. Paste a board name, URL or company website. Monitoring mode returns only new jobs.
Pricing
from $0.75 / 1,000 jobs
Rating
0.0
(0)
Developer
Red Fox Scout
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
Get every open job from any company hiring on Ashby (jobs.ashbyhq.com), live, in one clean table, with the pay range when the company publishes one. Thousands of startups and scale-ups use Ashby, including OpenAI, Ramp, Notion, Linear and Cursor. Paste company websites like notion.so, or board names like ramp, and the Actor finds each Ashby board. Switch on monitoring mode to get only the jobs that are new since your last run.
Each job also gets rule-based fields read from the posting: pay in the posting's own period, experience level, years of experience, visa sponsorship, remote or hybrid, and the tools and skills it names, and any contact email or recruiter name the posting shows. Nothing is generated by AI, and a field is null when the posting does not say.
Price: $1.00 per 1,000 jobs. Companies that fail, aren't on Ashby, or have no matching jobs cost nothing. Apify's free plan ($5 monthly credit) covers about 5,000 jobs a month.
Questions it answers
- What jobs is this Ashby company hiring for right now, and what do they pay?
- Which of these startups opened new roles this week?
- Which startup roles pay at least $150,000, or mention visa sponsorship?
- How do I get an alert when a company on Ashby posts a new job?
Who uses this
- 📋 Job boards and aggregators: fresh startup jobs straight from the source.
- 🤝 Recruiters: watch target companies and get alerted when they open roles.
- 💼 Sales teams: hiring is a buying signal. A startup hiring 5 data engineers needs data tools.
- 📈 Investors and analysts: track headcount growth, hiring mix and pay bands across a portfolio.
- 🧭 Job seekers: monitor dream companies for new openings.
Why this Actor
- 🌐 Paste websites, not board names. Enter
notion.soand the Actor finds its Ashby board on the careers page, or from a board named after the company. - 🔔 New jobs only. Monitoring mode remembers every job it has returned for your company list, so scheduled runs feed alerts or a database without duplicates.
- ✅ Official Ashby job-board API. Ashby publishes it for public use. No login, no proxies, no breakage from page redesigns.
- ⚡ Live data. Jobs are fetched at run time, never stale.
- 💰 Salary data included, not just titles.
- 📧 Contacts the posting shows. Email addresses and a named recruiter, as written in the job description. Nothing is looked up.
- 🔗 Need Greenhouse, Lever, Workable, SmartRecruiters, Recruitee, Personio or Breezy too? Use ATS Jobs Scraper: same schema, 8 ATS.
How to use the Ashby Jobs Scraper
- Click Try for free (a free Apify account is enough).
- Add companies, one per line: a company website, a board name (
ramp), or a board URL. - Optional: add keywords, locations, remote-only, a posting-date limit, or pay and description filters.
- Click Start. Hundreds of jobs per company come back in a few seconds.
- Download the jobs as JSON, CSV or Excel, or schedule the run with monitoring mode on to get only new jobs each day.
Input
| Field | Default | What it does |
|---|---|---|
companies | required | Company websites, Ashby board names or board URLs. One per line. |
keywords | empty | Keep jobs whose title/department/team contains any of these. |
excludeKeywords | empty | Drop jobs whose title/department/team contains any of these (plain substring match, so intern also matches "international"). |
searchInDescription | false | Also match keywords against the full description. |
excludeDescriptionKeywords | empty | Drop jobs whose full description contains any of these whole words or phrases, e.g. security clearance. Unlike excludeKeywords, intern does not match international. |
locations | empty | Keep jobs whose location contains any of these (London, Germany, Remote). |
remoteOnly | false | Only remote jobs. |
postedWithinDays | 0 | Only jobs posted in the last N days. |
hasSalary | false | Keep only jobs that publish a pay figure, from the Ashby compensation data or the posting text. |
minSalary | 0 | Keep jobs whose top published pay, converted to a yearly amount, reaches this number. Hourly is x 2,080, weekly x 52, monthly x 12, daily x 260. 0 = off. Jobs with no pay or no stated pay period are dropped when set. |
salaryCurrency | empty | Keep only jobs whose pay is in this currency, e.g. USD. Set it with minSalary: amounts are compared as published, with no currency conversion. |
includeDescription | true | Include full descriptions. Turn off for smaller results. The description-based fields, descriptionEmails and hiringContact, need it. |
onlyNewJobs | false | Monitoring mode: return only jobs not returned before. |
monitorName | auto | Name for monitoring memory, to share it between schedules. |
maxJobsPerCompany | 0 | Limit per company (0 = all). |
guessSlugs | true | If no Ashby link is found on a website, try a board named after the domain. |
maxConcurrency | 5 | Companies processed in parallel. |
Example (the input behind the table above):
{"companies": ["ramp", "https://jobs.ashbyhq.com/linear", "notion.so"],"keywords": ["engineer", "data"],"excludeDescriptionKeywords": ["security clearance"],"hasSalary": true,"minSalary": 150000,"salaryCurrency": "USD","maxJobsPerCompany": 20}
Output
One row per job. A real row from a run on ramp (descriptions shortened):
{"ats": "ashby","companySlug": "ramp","companyName": "Ramp","jobId": "34413f8d-26bf-4bbc-8ade-eb309a0e2245","title": "Security Engineer, Cloud","department": "Engineering","team": "Backend","location": "New York, NY (HQ)","locations": ["New York, NY (HQ)", "Remote (Canada)", "Remote (US)", "Miami, FL"],"country": "USA","workplaceType": "hybrid","isRemote": true,"employmentType": "FullTime","seniority": null,"salary": { "min": 211400, "max": 290600, "currency": "USD", "period": "year", "text": "$211.4K - $290.6K" },"postedAt": "2026-04-07T17:12:35.753Z","updatedAt": null,"url": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245","applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application","descriptionHtml": "<h1><strong>About Ramp</strong></h1><p style=\"min-height:1.5em\">Ramp is building the smart infrastructure for finance teams, embedded in the transaction...","descriptionText": "ABOUT RAMP\n\nRamp is building the smart infrastructure for finance teams, embedded in the transaction flow of every dollar a business spends...","salaryMin": 211400,"salaryMax": 290600,"salaryCurrency": "USD","salaryPeriod": "year","experienceLevel": null,"yearsOfExperience": 5,"visaSponsorship": null,"workArrangement": "hybrid","keySkills": ["Cloud Security", "AWS", "Terraform", "Python", "Flask", "Microsoft Azure", "Google Cloud"],"educationRequirement": null,"descriptionEmails": [],"hiringContact": null,"input": "ramp","detectedVia": "input","scrapedAt": "2026-10-08T12:59:51.437Z"}
salary is the compensation Ashby publishes for the job (its summary text is in salary.text), and the four salary... fields next to it hold the same range in plain form. When Ashby publishes no compensation, salary is null and the pay fields are read from the posting text instead.
detectedVia tells you how the board was found: input (you gave it), a careers page URL (found on the company website), or slug-guess (matched by company name; double-check these).
A per-company report (jobs found, jobs returned, errors) is saved in the run's key-value store as RUN_SUMMARY.
Derived fields (rule-based, no AI)
Each value comes from wording in the posting, or it is null. Check the description when a figure matters to a decision.
- Pay (
salaryMin,salaryMax,salaryCurrency,salaryPeriod): Ashby's compensation data first, otherwise the first pay range in the posting text. Figures are in the period the posting uses; they are not converted. A figure of 10,000 or more, or akfigure, with no period is read as yearly. A smaller figure with no period staysnull, because it could be monthly. experienceLevel: intern, entry, mid, senior, lead or executive, from the title.yearsOfExperience: the minimum years the description asks for ("5+ years of experience" gives 5, "3-5 years" gives 3).visaSponsorship:truewhen the description says visa sponsorship is offered,falsewhen it says it is not,nullwhen silent.workArrangement: remote, hybrid or onsite. Ashby's value wins; otherwise the location, title and description are read.keySkills: up to 25 tools and skills from a curated list of about 300 (Python, SQL, Salesforce, AWS, Figma...), in order of mention.educationRequirement: the highest degree the description mentions: phd, masters, bachelors, associate or high school.descriptionEmailsandhiringContact: the contact details the posting shows. See Contacts written in the posting.
Example tasks
Ready-made inputs you can open, change and run:
- New Ashby jobs at a list of startups since last run
- Jobs at AI startups: OpenAI, ElevenLabs, Cohere, Perplexity
- Startup engineering salaries from Ashby job posts
- Remote jobs at startups hiring on Ashby
- Startup jobs in New York from Ashby boards
What you get per job
- Title, department, team, employment type
- All locations, country, remote / hybrid / onsite
- Salary range (min, max, currency, period) when the company publishes it; most US Ashby boards do. The same figures are also in
salaryMin,salaryMax,salaryCurrencyandsalaryPeriod. - Posting date, job link, apply link
- Full description as HTML and plain text
- Contact email addresses and a named recruiter from the description (
descriptionEmails,hiringContact) - Experience level, years of experience, visa sponsorship, work arrangement, key skills and education
Contacts written in the posting
Some postings name a recruiter or give an address for applications. The Actor returns what the description says, read by fixed rules in English, German and French:
descriptionEmails: every email address in the description, including mailto links, lowercased and de-duplicated (up to 20). Role mailboxes such ascareers@oraccommodations@are kept, because the posting shows them. Image file names such aslogo@2x.pngand sample addresses such asname@example.comare dropped.hiringContact:{ "name", "email" }for a person the description names after a label: "Contact Jane Doe", "Recruiter: Jane Doe", "Hiring manager: Jane Doe", "Ansprechpartnerin: Anna Schmidt", "Contactez Claire Dubois".emailis the address that belongs to that person (it carries their surname or first name, or sits right next to the name), otherwisenull. A role mailbox is never assigned to a person, and a phrase such as "Contact Center Operations" is not read as a name.
Nothing is looked up on LinkedIn, the web or company directories, and no address is guessed. A contact that appears only in an image or a PDF is not found.
Needs descriptions. Both fields come from the description, so keep includeDescription on (it is on by default). With it off, both are null, unless a description or pay filter already read the descriptions. Ashby sends each job's description in the same request, so the fields cost nothing extra.
Real row from a local run, shortened (Linear, with companies: ["linear"]):
{ "companyName": "Linear", "title": "Senior / Staff Product Engineer", "descriptionEmails": ["security@linear.app"], "hiringContact": null }
Paste company websites, get only the new jobs
Put company websites in companies (one per line), turn on Only new jobs (monitoring mode) and schedule the run.
How the Ashby board is found for a website:
- The homepage is read for a link to an Ashby board, or an embedded board.
- If there is none, up to four careers-looking links on the same site (for example
/careers,/jobs, "Join us") are read the same way. - If still nothing, an Ashby board named after the company's domain is tried (
notion.sotriesnotion). Turn this off withguessSlugs. - Every board found is confirmed with Ashby's API before it is used.
The detectedVia field shows which step found each board. Check slug-guess rows, because a name match is a guess. A website that does not link its Ashby board, or that is not on Ashby, is reported in RUN_SUMMARY and costs nothing. Give its board name (ramp) or board URL to be sure.
Monitoring mode
Turn on onlyNewJobs and schedule the Actor (e.g. daily). The first run returns all matching jobs. Later runs return only jobs that weren't returned before. Connect a webhook, Slack, email, Google Sheets or Zapier integration to get alerts. The memory is tied to your company list; set monitorName to keep it when you edit the list.
Jobs that a filter removes are not remembered, so they are returned on a later run if the filter changes to let them through. Jobs cut off by maxJobsPerCompany are also not remembered, and come back in a later run.
What this Actor does not do
- It does not log in, use cookies or accounts, or solve CAPTCHAs. It reads only the public job-board data Ashby publishes.
- It does not read other ATS. Use ATS Jobs Scraper for those.
- It does not look people up or guess addresses. A recruiter's name or email appears only when the posting itself shows it, and it never returns LinkedIn profiles or contact details from other sources.
How much does it cost?
Pay per event:
- Job result: $0.001 per job returned ($1.00 per 1,000).
- Actor start: $0.00005 per GB of memory (default 1 GB = $0.00005 per run).
- Companies that fail, use another ATS, or have no matching jobs cost nothing.
- Filters are applied before charging. You only pay for jobs you get.
| What you run | Cost |
|---|---|
| Ramp's 161 open jobs (test run, 2026-10-08) | about $0.16 |
| 20 startups, about 2,000 jobs | about $2 |
| Daily monitoring that finds 30 new jobs a day | about $0.90 a month |
Apify's free plan includes $5 of credit every month, enough for about 5,000 jobs. Paid Apify plans get Store discounts of up to 25%. Set a maximum cost per run in the run options; the Actor stops cleanly when it's reached.
FAQ
Is this legal? It reads job postings through Ashby's public job-board API, the feed companies use to syndicate their jobs. Job postings are company information. The Actor returns only the contact details the posting itself shows, and it looks nobody up.
Are the contact fields complete? No. They are read from the text of the posting with fixed rules. An address written in an unusual way, such as jane [at] acme [dot] com, or a contact that appears only in an image, is not found.
How do I find a company's Ashby board name? It's the part after jobs.ashbyhq.com/ on their careers page. Or just enter the company website.
Can I search all Ashby companies at once? Not with this Actor; it fetches live jobs from the companies you list. To search thousands of Ashby, Greenhouse and Lever companies at once, use Startup Jobs Search.
Are the pay and experience fields accurate? Pay comes from Ashby's compensation data when it is published, and otherwise from the posting's wording with fixed rules. Check the description for anything that matters to a decision.
How fast is it? Hundreds of jobs per company in a few seconds.
Related Actors
- ATS Jobs Scraper: the same, for 8 ATS including Greenhouse, Lever and Workable.
- Greenhouse Jobs Scraper: Greenhouse boards, with application questions.
- Startup Jobs Search: search 260,000+ jobs from 8,000+ companies at once.
- Company Signals MCP: hiring data for Claude, ChatGPT and Cursor.
