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.

Ready-to-run examples

Open a saved Apify example, adjust the input, and run the actor in your own Apify account.

View all examples

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.

At a glance

  • Input: Ashby company slugs such as openai, or full https://jobs.ashbyhq.com/<company> board URLs.
  • Output: One dataset row per public job posting, with title, team, location, department, job URL, IDs, timestamps, and optional descriptions.
  • Best for: Hiring intelligence, job-board refreshes, target-account research, and sales triggers based on public hiring activity.
  • Pricing unit: A start event per run plus one result event for each saved job posting.
  • Login required: No. The Actor reads public Ashby job boards only.

What can it 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: Track which startups and technology companies are hiring.
  • Sales and lead-generation teams: Find companies with active hiring signals.
  • Job-board operators: Refresh Ashby-powered job listings.
  • Market researchers: Compare teams, locations, functions, and compensation trends.
  • Automation builders: Feed 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

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 small: Use 1-3 companies to confirm the output shape.
  • Control spend: Use maxItems to keep exploratory runs small.
  • Use descriptions deliberately: Turn on includeDescriptions only when you need long-form content.
  • Reduce alert noise: Use team and location filters for dashboards and monitoring.
  • Monitor on a schedule: Run daily or weekly for hiring-intelligence workflows.
  • Keep history: 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 and AI agents

Use the official Apify MCP server 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

  • Public boards only: The Actor supports public Ashby hosted boards.
  • No candidate data: It does not access private applicant data.
  • Empty boards happen: Some companies may have zero public roles.
  • Field availability varies: Some fields depend on what the company chooses to display.
  • Compensation is optional: Compensation summaries appear only when visible on the public board.
  • Large lists need limits: Very large company lists should use a practical maxItems value.

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.

Support

If a run fails, returns no data, or a field looks wrong, open an issue from the Actor page.

Please include the Apify run ID or run URL, input JSON, one example public URL, query, or input item, what you expected, and what the dataset returned. Small reproducible inputs make parsing or site-layout issues much faster to fix.

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.