Ashby Job Board Scraper — Open Roles & Compensation
Pricing
$2.00 / 1,000 job postings
Ashby Job Board Scraper — Open Roles & Compensation
Search open jobs across 3,000+ companies hiring on Ashby by job title, location, department, remote and date — no board names needed. Or pass boards. Live data: title, department, salary where published, workplace type, posted date, full description, apply URL.
Pricing
$2.00 / 1,000 job postings
Rating
0.0
(0)
Developer
Berkan Kaplan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 hours ago
Last modified
Categories
Share
Ashby Job Board Scraper — Company Hiring Signals 🚀
foXLabs hiring series: Greenhouse · Lever · Workday · SmartRecruiters · Personio · Teamtailor · Workable · BambooHR · All platforms in one search →
🎉 Search open jobs across 3,300+ startups and scale-ups that hire on Ashby — by job title, location, department, remote and posting date — without knowing a single board name. Or point it at the boards you track. No login, no API key, one row per open role, with salary ranges where published. Built for sales & competitive-intelligence teams scoring hiring intent, recruiters, comp researchers and job-data pipelines.
🔍 What is the Ashby Job Board Scraper — and when should you use it?
Ashby is the ATS of choice across YC and high-growth startups, but it has no job search across companies: every company's jobs sit on its own board. This actor does the searching for you. It carries an index of 3,338 Ashby job boards (discovered from the public Common Crawl web archive; 3,338 had open boards in our last full check, October 2026), reads them live during your run, keeps the jobs whose title matches your keywords and filters, and completes each match from Ashby's official posting API — title, department, team, location(s), workplace type, employment type, compensation (with equity note where published), posting date, full description and apply link.
Already know your target companies? Add their board name (ramp) or job-board URL and get every open role on those boards.
Use it when you need: startups hiring for a function right now (with their pay bands); a feed of new roles for a job title; every open role at a target company; or a read on a competitor's hiring plans.
Use something else when: the companies you care about don't run on Ashby. Point the matching actor at their ATS instead — every actor in the foXLabs hiring series emits the same core schema, so their outputs concatenate into one hiring-intent table: Greenhouse · Lever · Workday · SmartRecruiters · Personio · Teamtailor · Workable · BambooHR.
Need one search across every platform? Job Postings Database keeps a daily-refreshed index of 440,000+ open roles from ~33,000 Greenhouse, Lever, Ashby, SmartRecruiters, BambooHR, Personio and Teamtailor boards and answers a single query across all of them in seconds — every delivered role is re-checked live on its own board before it reaches you.
🤖 Use with AI agents
Already on the Apify MCP server? Ask for this Actor by name: foxlabs/ashby-job-board-scraper.
Your agent can pay for its own runs. This Actor is pay-per-event with agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — no Apify account or API token of its own. Billing is per delivered role, never for errors.
Otherwise paste this into Claude, ChatGPT, Cursor or any MCP-enabled assistant:
I want to find open jobs at startups that hire on Ashby using the Apify Actor `foxlabs/ashby-job-board-scraper`.Input: `searchQueries` is a list of job-title keywords (every word must appear in the title; "*" = every job).Optional filters: `location` (e.g. "London"; US jobs written "Austin, TX" count as "United States"),`department` (e.g. "Sales"), `remoteOnly` (true/false), `employmentType` (e.g. "Full-time"),`postedWithinDays` ("1" | "7" | "30" | "90"). `queries` optionally adds boards ("ramp" or job-board URLs).`maxResultsPerQuery` caps jobs per keyword or board (default 200).Start with: {"searchQueries":["account executive"],"location":"United States","maxResultsPerQuery":50}Ask me which roles and region I care about, run the Actor, then summarise the hiring companies and pay bands as a table.
The machine-readable API, MCP config and OpenAPI definition live at apify.com/foxlabs/ashby-job-board-scraper.md.
📋 Overview
Everything you need to turn Ashby's scattered job boards into one searchable hiring dataset — role details, compensation and hiring signals — in one actor, with no login, cookies or API key.
Why teams pick this actor:
- 🔎 No board names needed — search 3,300+ live Ashby boards by job title; the companies come to you.
- 💸 Compensation with equity — Ashby exposes pay ranges (and "Offers Equity") on many roles; about half of matched roles carry one.
- ⚡ Live, not a stale dump — every board is read during your run.
- 🎛️ Filters that matter — location (with US state codes understood), department, remote only, employment type, posting date.
- 📄 Complete descriptions — every delivered row comes from Ashby's official posting API, HTML stripped to clean plain text.
- 🔗 Same schema across the series — join with the sibling ATS actors on
companyName/companyBoard. - 💰 Pay only for results — per-role pricing; a job found twice is charged once; empty searches and failed lookups are never billed.
- 🤖 Agent-ready — MCP + x402 agentic payments.
🎬 Quick Start
curl -X POST "https://api.apify.com/v2/acts/foxlabs~ashby-job-board-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQueries":["account executive"],"location":"United States","maxResultsPerQuery":50}'
🚀 Getting Started (3 steps)
- Type your job titles — one per line (
account executive,software engineer), or*for every job. - Narrow it down (optional) — location, department, remote only, employment type, posting date; or add specific boards in
queries. - Run and export — a clean dataset as JSON, CSV or Excel.
📥 Input
{"searchQueries": ["account executive", "solutions engineer"],"location": "United States","remoteOnly": false,"employmentType": "Full-time","postedWithinDays": "30","queries": ["ramp"],"maxResultsPerQuery": 200}
| Field | Type | Description |
|---|---|---|
searchQueries | array | Job-title keywords, one per line. Every word must appear in the title (engineer also matches engineering). * = every job matching the filters. |
location | string | Text the job's location(s) must contain, e.g. London, Germany, United States (US jobs written City, ST count as United States). |
department | string | Text the department or team must contain, e.g. Sales, Engineering. |
remoteOnly | boolean | Keep only remote jobs. |
employmentType | string | e.g. Full-time, Contract, Intern (Full-time matches Ashby's FullTime). |
postedWithinDays | string | any, 1, 7, 30 or 90. |
queries | array | Optional Ashby board names (ramp) or job-board URLs. Search filters do not apply to them. |
maxResultsPerQuery | integer | Caps jobs per keyword or board (default 200). |
maxConcurrency | integer | How many boards from queries to fetch at once. |
scanConcurrency | integer | How many boards a keyword search reads at once (default 8). |
includeRaw | boolean | Attach the source's untouched record under raw (boards in queries). |
requestDelayMs | integer | Politeness delay between requests. |
proxyConfiguration | object | Apify Proxy (datacenter) by default — Ashby rate-limits its job list per IP, so keyword searches rotate IPs. |
📤 Output
One row per open role, saved to the dataset.
| Field | Description |
|---|---|
companyName | Company name |
companyBoard | Board name — join key across runs |
jobId | Ashby job ID |
jobTitle | Role title |
department / team | Department and team |
location / allLocations | Primary location / all posting locations |
isRemote | Remote flag |
employmentType | Employment type (FullTime…) |
workplaceType | On-site / remote / hybrid |
salary | Compensation range where published (with equity / commission notes) |
postedAt | Published date (ISO) |
description | Full description, HTML stripped |
applyUrl / sourceUrl | Apply link / public posting URL |
Every row also carries query, scrapedAt, and — when a search finds nothing or a lookup fails — an error.
{"query": "account executive","companyName": "Bestow","companyBoard": "bestow","jobTitle": "Enterprise Account Executive","department": "Enterprise Sales","team": "Enterprise Sales","location": "Remote, US","isRemote": true,"employmentType": "FullTime","workplaceType": "Remote","salary": "$150K – $300K • Offers Equity • Offers Commission","postedAt": "2026-07-14","description": "ABOUT BESTOW \n Life insurance is one of the world's most important products. It's also one…","applyUrl": "https://jobs.ashbyhq.com/bestow/16a07e5b-d6b6-49a4-8fd0-0399d4da820b/application"}
💼 Use cases
1. Hiring-intent lead lists
Input: searchQueries: ["account executive", "sales development"], postedWithinDays: "30", weekly. Output: startups hiring sales, with pay bands. Use: rank accounts by hiring focus.
2. Startup comp research
Input: a role (searchQueries: ["product designer"]), optionally a region. Output: roles with pay + equity signals across hundreds of startups. Use: map comp bands across the startup market.
3. Competitor headcount tracking
Input: the competitor's board in queries, weekly. Output: the full role list over time. Use: spot expansion and hiring freezes early.
4. Recruiter sourcing
Input: searchQueries: ["software engineer"], remoteOnly: true. Output: roles + apply links. Use: sourcing pipeline in minutes.
🔗 Integration
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('foxlabs/ashby-job-board-scraper').call({ searchQueries: ['account executive'], location: 'United States', maxResultsPerQuery: 50 });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('foxlabs/ashby-job-board-scraper').call(run_input={'searchQueries': ['account executive'], 'location': 'United States', 'maxResultsPerQuery': 50})for item in client.dataset(run.default_dataset_id).iterate_items():print(item)
Written for apify-client 3 for Python, where call() returns a run object; with version 1 or 2 it returns a dict — write run['defaultDatasetId'] there.
Automation (n8n / Zapier / Make): schedule or webhook → HTTP request to the actor API → handle the JSON dataset → push to a sheet, CRM or dashboard.
📊 Pricing
Pay-per-event:
| Event | Price | When |
|---|---|---|
| Job posting | $0.002 | per delivered role |
| Keyword search | $0.02 | from October 29, 2026: once per search line that delivers at least one job (a search reads every board in the index) |
A job found twice is charged once; a search line that finds nothing, jobs that don't match your filters, and failed lookups are never billed. Boards you list in queries pay only per role. Example: one keyword returning 50 jobs costs $0.02 + 50 × $0.002 = $0.12. View current pricing.
❓ FAQ
Do I need an account, login or API key? No. Searches read the job list Ashby's own job pages load, and every delivered row comes from Ashby's public posting API — no key.
Do I need to know board names? No. Search by job title; every row tells you the company and its board name.
Which companies does the search cover? Ashby boards found in the public Common Crawl web archive — 3,338 board names, of which 3,338 had an open board in our last full check (October 2026). A company that isn't in the index can still be read by adding its board name to queries.
How long does a search take? A broad search stops as soon as it has your cap (a few minutes for hundreds of rows); a search for a rare title reads the whole index (about 9 minutes).
How current is the data? Every run reads the boards live, so jobs are as fresh as the boards themselves.
Can I export to CSV / Excel / JSON? Yes — directly from the Apify dataset.
What happens on a bad input or a search with no matches? You get a row with your query and an error — nothing is silently dropped, and you're not charged.
Is scraping this legal? It reads public job feeds the companies publish for syndication — job data, not personal data. See below.
🐛 Troubleshooting
- Fewer rows than expected — title matching is strict (every word must appear in the title); try fewer or shorter keywords, or loosen the filters.
- "Ashby has no public board …" — take the board name from the job-board URL or pass the URL.
- The log warns about the job list or unreachable boards — keep Apify Proxy on (the default) and lower
scanConcurrency.
⚠️ Trademark
Independent, third-party tool. Not affiliated with, endorsed by or connected to Ashby, Inc. "Ashby" and related marks belong to their owners and are used here for identification only.
⚖️ Is it legal to scrape this data?
This actor reads only publicly published job-posting data — no private or personal user data. Your results can still contain personal data (e.g. a name in a description); personal data is protected by the GDPR and similar laws, so only process it with a legitimate basis. See Apify's blog post on the legality of web scraping.
🤝 Support & contact
- 🌐 Website: data.foxlabs.com.tr
- 📧 Email: info@foxlabs.com.tr
- 🐛 Issues: open a ticket in the Actor's Issues tab
- 🧰 More clean B2B data actors: Fox Labs on Apify
Changelog
Index refresh — 2026-10-14
- Company index refreshed from the latest public web-archive snapshots: no new boards found, 802 that no longer exist removed (checked live on 2026-10-14); the index now holds 3,338 boards, 3,338 of them answering.
0.5.0 — 2026-10-14 — keyword search across Ashby (no board name needed)
- New:
searchQueries— search open jobs by title across 4,140 indexed Ashby boards (3,338 live), withlocation,department,remoteOnly,employmentTypeandpostedWithinDaysfilters. Every delivered row is completed from the official posting API. - A job is delivered and charged once per run, whether a search or a board in
queriesfinds it. - Restart-safe: a run that Apify moves to another server resumes without writing or charging a row twice.
proxyConfigurationdefaults to Apify Proxy (datacenter) — Ashby rate-limits its job list per IP.queries(board names / URLs) works exactly as before; it is now optional.- Pricing: from October 29, 2026 a keyword search line that delivers at least one job costs $0.02 (once per line per run); roles stay $0.002, empty searches stay free.
0.4.5 — 2026-10-08 — README: the Python example works with the current Apify client
- The README's Python example read the results with
run['defaultDatasetId']. With the current Apify client for Python (version 3)call()returns a run object, not a dict, and that line raisedTypeError: 'Run' object is not subscriptable— after the run itself had finished. The example now readsrun.default_dataset_id; with client version 1 or 2, keeprun['defaultDatasetId']. Checked with apify-client 3.2.1, 2.5.1 and 1.12.2. - No code, output field or pricing change.
0.4.1 — 2026-09-06
- Added
workplaceType. Remote / Hybrid / On-site (~75% of roles) — a finer signal than the booleanisRemote.
0.4 — 2026-09-06
- Enabled AI-agent payments (x402). Standby mode was removed because Apify's x402 agentic-payment eligibility requires it off; the actor now runs as a standard pay-per-event run that agents can discover, run and pay for over x402 (USDC on Base) or Skyfire without an Apify account. Batch and MCP usage are unchanged.
0.3 — 2026-09-05
- Output schema linked in
actor.json(outputfield) so the Store shows the Output tab. - Standby mode (real-time API). The actor now also runs as an always-on HTTP API:
GET /search?query=<query>&maxResults=Nreturns open roles as JSON, billed per role (pay-per-event). Batch runs are unchanged. Endpoint and OpenAPI schema appear in the Standby tab.
0.2 — 2026-09-05
- Every column now carries real data. Fields Ashby's posting API never provides (
city,countryName,seniority,updatedAt) are no longer emitted.department,team,salary(with equity note where published) andpostedAtremain — all populated from the source.
0.1
- Initial release: full open-roles extraction from any Ashby job board by org slug or URL — title, department, team, location(s), employment type, compensation, posted date, description and apply URL.