Ashby Jobs Scraper
Pricing
from $1.50 / 1,000 results
Ashby Jobs Scraper
Scrape every job posting from any Ashby-hosted job board via Ashby's own public keyless GraphQL API, no login or browser required. Get team names, workplace type, employment type, compensation bands, and a guaranteed working apply link for every posting, in one full-board call per org.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 hours ago
Last modified
Categories
Share
🎯 What this scrapes
Ashby powers the careers page for a large slice of venture-backed startups and scale-ups. Every one of those boards is served by the same internal GraphQL endpoint (jobs.ashbyhq.com/api/non-user-graphql?op=ApiJobBoardWithTeams). This Actor talks to it directly: hand it one or more org slugs — the {orgSlug} in a jobs.ashbyhq.com/{orgSlug} board URL, e.g. openai — and it fetches the entire board in a single call, joins the response's own team hierarchy, and normalizes everything into one row schema. One scraper, every Ashby-hosted employer.
🔥 Features
- 🔑 Keyless public GraphQL API — no OAuth, no token, no per-org setup; the same endpoint the careers page itself calls.
- 📦 Whole board in one call — no pagination to chase; a 750-posting board comes back in a single response.
- 🏢 Multi-org in one run — pass many org slugs; rows come back identically shaped, tagged with
org_slug. - 🧩 Real team names, not guesses —
team_nameis joined from the response's ownteamshierarchy, never a fabricated department field. - 🔗 Guaranteed apply link —
apply_urlis constructed and confirmed live-resolvable for every posting, no extra HTTP call. - 🔁 We retry with backoff + rotate browser fingerprints —
curl-cffipresents a real browser handshake and retries transient429/5xxso a large multi-org batch finishes instead of dying midway. - 🧊 Clean, typed rows — Pydantic-validated, ISO-8601 timestamps, stable IDs. Export JSON / CSV / Excel straight from the Apify Console.
💡 Use cases
- Recruiting & sourcing — track what a target company is hiring for, where, and on which team.
- Job-board aggregation — add dedicated Ashby coverage next to Workday / Greenhouse / Lever / SmartRecruiters in one pipeline.
- Hiring-intent signal for SDR/GTM teams — open reqs are a leading indicator of budget and headcount growth.
- HR-tech data pipelines — wire structured job rows into your CRM, dashboard, or n8n / Make workflow on a schedule.
⚙️ How to use it
- Click Try for free at the top of the Store listing.
- Add one or more Org slugs — the
{orgSlug}from ajobs.ashbyhq.com/{orgSlug}careers URL (e.g.openai), or paste the full board URL. - Optionally set Max results per org and a Location filter.
- Click Start. Rows stream into the dataset as each org's board is fetched.
- Export from Storage → Dataset as JSON, CSV, or Excel — or pull via the Apify API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
orgSlugs | array | ✅ | — | Ashby org slugs (the {orgSlug} in jobs.ashbyhq.com/{orgSlug}, e.g. openai), or full board URLs. |
maxResultsPerOrg | integer | no | 500 | Cap on rows emitted per org, applied after the single full-board fetch. |
locationFilter | string | no | null | Case-insensitive substring match against a posting's location(s). Client-side only. |
proxyConfiguration | object | no | {"useApifyProxy": true} | Apify Proxy configuration. |
Example input
{"orgSlugs": ["openai", "ramp"],"maxResultsPerOrg": 100,"locationFilter": null,"proxyConfiguration": { "useApifyProxy": true }}
📤 Output
One row per job posting.
| Field | Type | Notes |
|---|---|---|
posting_id | string | Stable Ashby posting id. |
title | string | Job title. |
org_slug | string | The org slug this posting belongs to. |
team_name | string | null | Joined from the board's own team hierarchy; null if unassigned. |
location_name | string | Primary location. |
workplace_type | string | null | Hybrid, OnSite, or Remote. |
employment_type | string | null | e.g. FullTime. |
secondary_locations | array | Additional locations, if any. |
compensation_summary | string | null | Compensation band, when the org publishes one. |
apply_url | string | Guaranteed live apply link. |
scraped_at | string | ISO-8601 timestamp. |
Example output
{"posting_id": "7af121a1-d29a-4745-84c1-ef1b58a3b840","title": "3P Silicon Architect","org_slug": "openai","team_name": null,"location_name": "San Francisco","workplace_type": "Hybrid","employment_type": "FullTime","secondary_locations": ["Seattle"],"compensation_summary": "$342K – $555K • Offers Equity","apply_url": "https://jobs.ashbyhq.com/openai/7af121a1-d29a-4745-84c1-ef1b58a3b840","scraped_at": "2026-07-26T15:00:00Z"}
💰 Pricing
Pay-per-event — you pay only for what lands in your dataset.
| Event | Price |
|---|---|
| Actor start | $0.005 (once per run) |
| Result | $0.0015 per job posting ($1.50 / 1,000) |
🚧 Limitations
- Ashby coverage only — for Greenhouse, Lever, Workday, or SmartRecruiters, see the sibling Actors in the DevilScrapes fleet.
- This Actor's GraphQL endpoint (
jobs.ashbyhq.com/api/non-user-graphql) is distinct from the Ashby path insidemulti-ats-jobs-scraper— different host, different fields — so the two are not redundant with each other. - No first-class
departmentfield — Ashby's schema doesn't expose one directly;team_name(the board's own team hierarchy) is the closest real grouping signal. - No org-name enrichment —
org_slugis the literal input slug, not an org display name (the endpoint doesn't expose one). - No historical or removed postings — this Actor reflects the board's current, live state only.
❓ FAQ
Does this need an Ashby account or API key? No — it calls Ashby's own public, keyless board endpoint, the same one the careers page uses.
Can I pass a full board URL instead of a bare slug?
Yes — either works. A full jobs.ashbyhq.com/{orgSlug} URL has its slug extracted automatically.
What happens if an org isn't on Ashby, or isn't currently hiring? The run continues and reports zero rows for that org — never a silent failure and never a crash.
💬 Your feedback
Found a field that's missing, or a board that doesn't behave as documented? Open an issue on the Actor's Store page or reach out via apify.com/DevilScrapes — we ship fixes fast.