Ashby Jobs Scraper

Extract live job postings from public Ashby company job boards.

Data fields

FieldTypeDescription
companySlugtextCompany slug exported in the dataset view.
companyNametextCompany exported in the dataset view.
titletextTitle exported in the dataset view.
teamtextTeam exported in the dataset view.
locationNametextLocation exported in the dataset view.
employmentTypetextEmployment exported in the dataset view.
workplaceTypetextWorkplace exported in the dataset view.
departmenttextDepartment exported in the dataset view.

Input preview

companySlugsOrUrlsCompany slugs or Ashby board URLs *
maxItemsMaximum jobs
teamFilterTeam filter
locationFilterLocation filter
includeDescriptionsInclude full descriptions

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Extract live job postings from public Ashby company career boards.

Use this Actor to turn Ashby-hosted recruiting pages into clean, exportable job datasets for hiring intelligence, job-board operations, sales prospecting, and market research.

What does Ashby Jobs Scraper do?

Ashby Jobs Scraper collects open roles from public Ashby job boards such as openai, ramp, notion, perplexity, and other companies using jobs.ashbyhq.com.

It returns one dataset row per job posting, including the title, team, location, department, employment type, workplace type, compensation summary when available, job URL, posting IDs, and scrape timestamp.

You can also enable full job descriptions when you need role requirements, benefits, or long-form hiring content for analysis.

Who is it for?

  • ๐Ÿงฒ Recruiting analytics teams tracking which startups and technology companies are hiring.
  • ๐Ÿง‘โ€๐Ÿ’ผ Sales and lead-generation teams finding companies with active hiring signals.
  • ๐Ÿ“ฐ Job-board operators refreshing Ashby-powered job listings.
  • ๐Ÿ“ˆ Market researchers comparing teams, locations, functions, and compensation trends.
  • ๐Ÿค– Automation builders feeding live hiring data into CRMs, dashboards, or alerts.

Why use this Actor?

Ashby is widely used by venture-backed and high-growth companies. Manually checking each board is slow, inconsistent, and hard to automate.

This Actor gives you repeatable structured output with filters, limits, and optional descriptions.

Common use cases

  • Monitor live hiring at a list of target companies.
  • Build a startup jobs dataset for a niche job board.
  • Track which teams are expanding by company.
  • Find companies hiring for sales, engineering, security, finance, or operations roles.
  • Export job openings into Google Sheets, Airtable, Snowflake, or a CRM.
  • Compare location patterns such as remote, New York, London, or San Francisco.

What data can you extract?

Field Description
companySlug Ashby hosted board slug
companyName Company name shown on the board
jobId Ashby job identifier
postingId Public posting identifier used in the job URL
title Job title
team Team name
teamId Team identifier
locationName Primary location
secondaryLocations Additional locations
employmentType Full-time, part-time, contract, or other value when available
workplaceType Remote, hybrid, onsite, or similar value when available
department Department name
departmentId Department identifier
publishedDate Posting publish date
updatedAt Last update timestamp
compensationTierSummary Compensation summary when displayed by the company
jobUrl Public Ashby job URL
descriptionHtml Full description HTML when enabled
descriptionText Plain-text description when enabled
scrapedAt Timestamp for the scrape

How much does it cost to scrape Ashby jobs?

This Actor uses pay-per-event pricing.

You pay a small start fee for each run and a per-result fee for each job posting saved to the dataset.

Current pricing:

  • Start fee: $0.005 per run.
  • FREE tier: $0.000029762 per job posting.
  • BRONZE tier: $0.00002588 per job posting.
  • SILVER tier: $0.000020186 per job posting.
  • GOLD tier: $0.000015528 per job posting.
  • PLATINUM tier: $0.000010352 per job posting.
  • DIAMOND tier: $0.0000072464 per job posting.

For the cheapest first run, use the default prefill or set maxItems to a low number such as 25 or 50. At the BRONZE tier, 1,000 job postings cost about $0.02588 plus the run start fee.

Input options

Input Type Required Description
companySlugsOrUrls array of strings yes Ashby company slugs or full jobs.ashbyhq.com board URLs
maxItems integer no Maximum job postings to save across all boards
teamFilter string no Case-insensitive filter for team names
locationFilter string no Case-insensitive filter for primary or secondary locations
includeDescriptions boolean no Adds full job description HTML and text

Example input

{
  "companySlugsOrUrls": ["openai", "ramp", "https://jobs.ashbyhq.com/notion"],
  "maxItems": 100,
  "teamFilter": "Engineering",
  "locationFilter": "San Francisco",
  "includeDescriptions": false
}

Input tips

  • Use plain slugs like openai when possible.
  • Full board URLs such as https://jobs.ashbyhq.com/ramp also work.
  • maxItems applies across all submitted companies.
  • Leave filters blank to collect every public posting.
  • Enable descriptions only when you need detailed role text.
  • Description mode is slower because it adds more page visits.

Output example

{
  "companySlug": "openai",
  "companyName": "OpenAI",
  "jobId": "d4446040-9dd7-4116-8534-91a804a81b3c",
  "postingId": "2c3ab9f8-e7d0-48b7-9817-afe1b6ddece2",
  "title": "3D Printing Lab Technician, Robotics",
  "team": "Robotics",
  "teamId": "c16efb3c-493d-401c-a76f-a493cfccbeb8",
  "locationName": "San Francisco",
  "secondaryLocations": [],
  "employmentType": "FullTime",
  "workplaceType": "Hybrid",
  "department": "Research",
  "publishedDate": "2026-05-19",
  "compensationTierSummary": "$266K โ€“ $399K โ€ข Offers Equity",
  "jobUrl": "https://jobs.ashbyhq.com/openai/2c3ab9f8-e7d0-48b7-9817-afe1b6ddece2",
  "scrapedAt": "2026-06-17T00:00:00.000Z"
}

How to scrape Ashby job boards

  1. Open the Actor on Apify.
  2. Add Ashby company slugs or board URLs.
  3. Set a low maxItems for the first test.
  4. Add optional team or location filters.
  5. Choose whether to include full descriptions.
  6. Click Start.
  7. Download results from the dataset tab as JSON, CSV, Excel, XML, or RSS.

Filtering examples

Engineering roles

{
  "companySlugsOrUrls": ["openai", "notion"],
  "teamFilter": "Engineering",
  "maxItems": 100
}

New York roles

{
  "companySlugsOrUrls": ["ramp"],
  "locationFilter": "New York",
  "maxItems": 50
}

Description analysis

{
  "companySlugsOrUrls": ["perplexity"],
  "includeDescriptions": true,
  "maxItems": 25
}

Best practices

  • Start with 1-3 companies to confirm the output shape.
  • Use maxItems to keep exploratory runs small.
  • Turn on descriptions only when you need long-form content.
  • Use filters to reduce noise for alerts and dashboards.
  • Schedule runs daily or weekly for hiring-monitoring workflows.
  • Store historical exports if you need change detection over time.

Integrations

You can connect this Actor to:

  • Google Sheets for recruiting intelligence dashboards.
  • Slack for alerts when target companies add roles.
  • Airtable for job-board editorial workflows.
  • HubSpot or Salesforce for hiring-trigger lead enrichment.
  • Snowflake, BigQuery, or S3 for long-term market datasets.
  • Zapier or Make for no-code automations.

API usage

Node.js

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

const run = await client.actor('fetch_cat/ashby-jobs-scraper').call({
  companySlugsOrUrls: ['openai', 'ramp'],
  maxItems: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
import os

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/ashby-jobs-scraper').call(run_input={
    'companySlugsOrUrls': ['openai', 'ramp'],
    'maxItems': 100,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

cURL

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~ashby-jobs-scraper/runs?token=$APIFY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"companySlugsOrUrls":["openai","ramp"],"maxItems":100}'

MCP usage

Use Apify MCP to call this Actor from Claude Code, Claude Desktop, or other MCP clients.

MCP endpoint:

https://mcp.apify.com/?tools=fetch_cat/ashby-jobs-scraper

Claude Code setup:

claude mcp add apify-ashby-jobs "https://mcp.apify.com/?tools=fetch_cat/ashby-jobs-scraper"

Claude Desktop MCP JSON config:

{
  "mcpServers": {
    "apify-ashby-jobs": {
      "url": "https://mcp.apify.com/?tools=fetch_cat/ashby-jobs-scraper"
    }
  }
}

Example prompts for MCP usage:

  • "Use the Apify Ashby Jobs Scraper MCP tool to scrape OpenAI and Ramp, then summarize engineering hiring by location."
  • "Call the Ashby Jobs Scraper for Notion and return jobs whose titles or teams mention design or product."
  • "Run the Ashby Jobs Scraper MCP tool for Perplexity with maxItems 50 and return a CSV-ready table."

Scheduling

For hiring intelligence, schedule the Actor to run every day or every week.

Daily schedules work well for sales triggers and job-board freshness. Weekly schedules are usually enough for market reports and competitive research.

Data freshness

The Actor returns currently visible public job postings at run time.

If a company removes a posting, future runs will no longer include it. Keep historical datasets if you need opening and closing dates.

Limits and caveats

  • Only public Ashby hosted boards are supported.
  • The Actor does not access private applicant data.
  • Some companies may have zero public roles.
  • Some fields depend on what the company chooses to display.
  • Compensation summaries appear only when visible on the public board.
  • Very large company lists should use a practical maxItems limit.

Troubleshooting

Why did a company return no jobs?

The company may not use a public Ashby hosted board, may have no public openings, or may use a different slug. Open https://jobs.ashbyhq.com/<slug> in a browser to confirm the board exists.

Why are descriptions missing?

Descriptions are included only when includeDescriptions is set to true. Leave it off for faster runs when listing-level fields are enough.

Why did I get fewer jobs than expected?

maxItems is a global cap across all companies. Filters can also reduce results. Increase maxItems or remove filters to collect more postings.

Legality and privacy

This Actor collects publicly available job posting information from public company career pages.

You are responsible for using the data in accordance with applicable laws, website terms, and privacy requirements. Do not use scraped data for spam, discrimination, or unlawful employment practices.

Common questions

Questions and answers reused from the canonical actor README.

Can I scrape multiple companies in one run?

Yes. Add multiple slugs or URLs to companySlugsOrUrls.

Can I filter by remote jobs?

Yes. Use locationFilter with values such as Remote, or inspect workplaceType in the output.

Can I get salary data?

The Actor returns compensationTierSummary when the public posting displays compensation.

Can I use this for alerts?

Yes. Schedule regular runs and compare the latest dataset with previous results in your own workflow.

Does this require an Ashby account?

No. It is designed for public Ashby job boards.