Ashby Jobs

io.github.johnisanerd由 GitHub 帳號 johnisanerd 發布v1.0.0更新於 Nov 2, 2026

Ashby job boards with employer-published salary data, via an Apify Actor, hosted MCP.

已驗證Streamable HTTP可網頁執行網頁搜尋與抓取商業與電商

概覽

AI 產生的概覽

託管於 Apify 的 MCP 工具,可從 Ashby 徵才看板取得即時職缺、公司看板與雇主公布的薪資範圍。

可以做什麼
  • 依公司名稱、看板 slug 或網址取得 Ashby 看板的結構化職缺資料,包含職稱、部門、地點、是否遠端、發布日期與薪資區間
  • 依職稱關鍵字、部門、地點、僱用類型、僅遠端及發布時間範圍(例如最近 24 小時)篩選結果
  • 找出使用 Ashby 招募的公司,回傳看板 slug、看板網址與職缺數量,或確認某公司是否有看板
  • 將職缺描述輸出為 Markdown、HTML 或純文字,並可選擇補充公司網站、標誌、截止日期與直接應徵資訊
  • 產生執行報告,並以單一公司及整次執行的數量上限控制輸出
適用情境
適合讓助理進行招募研究:定期追蹤新增職缺、比較各公司公布的薪資區間,或找出哪些公司的徵才頁面使用 Ashby。
執行需求
遠端 MCP 端點 mcp.apify.com,需以連接器或 HTTP 伺服器加入。必須驗證:瀏覽器 OAuth,或以 Authorization Bearer 標頭提供 Apify API 權杖。需要 Apify 帳號;README 中的 Python 範例另需 Python 3.11 以上與 uv。
安裝前請注意
Apify 依實際交付的資料列計費,Markdown、HTML 或純文字描述、公司資料補充、執行報告等皆為付費加購項目,大量執行前請先設定數量上限。OAuth 或 Apify API 權杖會授予 Apify 帳號的存取權,請勿將權杖寫入共用的設定檔。此工具讀取公開徵才看板,並將查詢送往 Apify 的託管服務。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Ashby Jobs,將其新增到工作區。
  2. 連接 所需的 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.johnisanerd%2Fashby-jobs/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。 客戶端會在首次連接時完成 OAuth 登入。

{
  "mcpServers": {
    "ashby-jobs": {
      "type": "http",
      "url": "https://mcp.apify.com/?tools=johnvc/ashby-job-board-scraper"
    }
  }
}

README

🟣 Ashby Job Board API: jobs, companies, and salary data

A Python and MCP quick-start for the Ashby job board API on Apify. Scrape Ashby jobs from any Ashby-hosted board, find companies that use Ashby, check whether a company has a board at all, and get the employer's own published salary ranges on every row, all without an API key or a login.

Ashby is the ATS behind the careers pages of many of the fastest-growing companies, including OpenAI, Ramp, Notion, Linear, and Cerebras. This Actor reads the public API that powers every jobs.ashbyhq.com board live at run time, so every row reflects what the employer's board says right now, not what an index remembered last week. Give it company names, board slugs, or URLs, or give it nothing and let it sweep a bundled directory of 2,700+ verified boards.

[Watch the walkthrough]

Text walkthrough

The Ashby job board API takes company names ("Black Semiconductor"), board slugs (cerebras), or any jobs.ashbyhq.com URL, and returns structured job rows: title, companyName, department, team, employmentType, workplaceType, isRemote, location, countriesDerived, datePublished, compensationSummary, flat salaryMin / salaryMax / salaryCurrency / salaryPeriod columns, an offersEquity flag, and the description as Markdown by default. Set publishedAfter to a window like 25h and only postings added since then come back, which is how the "Track New Ashby Job Postings Daily" task turns a schedule into a new-roles feed with zero state. Switch outputMode to companiesOnly and you get one row per company hiring through Ashby with a live open-jobs count, the fastest way to find companies that use Ashby. Filters run before billing, so a filtered job costs nothing.

Quick Start

Prerequisites: Python 3.11 or newer, uv, and a free Apify API token from apify.com.

bash
git clone https://github.com/johnisanerd/Apify-Ashby-Job-Board-API.gitcd Apify-Ashby-Job-Board-APIuv synccp .env.example .env          # paste your token into .envuv run python ashby-job-board-api-example.py

Each example is a separate flag:

bash
uv run python ashby-job-board-api-example.py --example jobs       # full job recordsuv run python ashby-job-board-api-example.py --example companies  # company discoveryuv run python ashby-job-board-api-example.py --example check      # does this company use Ashby?uv run python ashby-job-board-api-example.py --example new-jobs   # new-postings feeduv run python ashby-job-board-api-example.py --example markdown   # LLM-ready descriptionsuv run python ashby-job-board-api-example.py --example salary     # postings with pay datauv run python ashby-job-board-api-example.py --example all

Every example asks for a small number of rows on purpose. You pay per row delivered, so confirm the shape of the data first, then raise maxJobs.

Why use this API

Live, not indexed. One request per board against the public API means every row is what the employer's board says right now. No stale index, no ghost jobs.

Salary data on the base row. Ashby employers publish structured compensation. Every job row carries the raw structure (salaryRaw), a normalized range (salaryDerived), flat salaryMin / salaryMax / salaryCurrency / salaryPeriod columns ready for CSV, per-tier ranges (salaryTiers), and an offersEquity flag.

Company checking with did-you-mean. Type a company name the way you know it; the Actor matches it to its board slug automatically, and a miss returns a clear not-found row with the closest known slugs.

Discovery built in. A bundled directory of 2,700+ verified Ashby boards powers companiesOnly mode and empty-input sweeps. Nobody else combines the directory and the live reader in one tool.

New postings without state. Every Ashby job carries the employer's own publish timestamp, so publishedAfter: "25h" on a daily schedule is a complete new-roles feed. No seen-lists, no delta stores.

Pay for exactly what you receive. No start fee, no minimum. The base job record is one event, salary data included; Markdown, HTML, text, the company-data enrichment, and the run report are add-ons billed only on rows that carry them.

Recipes

Ready-made configurations with their own Store landing pages:

Schedule tip. Save your input as a Task in the Apify Console, set publishedAfter to 25h, and schedule it daily. From then on the dataset only ever contains postings added since the last run, so the pipeline stays current without anyone touching it.

Usage Examples

Basic, matching the default run:

json
{  "companies": ["cerebras", "ramp"],  "titleKeywords": ["engineer"],  "maxJobs": 10}

Advanced, remote roles with the company-data enrichment and a report:

json
{  "companies": ["openai", "ramp", "deel"],  "remoteOnly": true,  "employmentTypes": ["FullTime"],  "includeCompanyData": true,  "report": "markdown",  "maxJobs": 100}

Input Parameters

Every parameter is optional.

ParameterTypeDefaultDescription
companiesarray["cerebras"]Company names, board slugs, or any board, embed, or single-job URL, mixed freely. Empty sweeps the bundled directory.
startUrlsarrayemptySame values in URL-list form; merged with companies.
outputModestringjobsjobs for full records, urlsOnly for the cheap index, companiesOnly for discovery.
discoveryQuerystringemptyText match over the company directory for discovery and sweeps.
verifyCompaniesbooleantrueLive-probe each discovered company; dead boards are never billed.
titleKeywordsarrayemptyKeep jobs whose title contains any of these. Runs before billing.
departmentsarrayemptyKeep jobs in matching departments or teams.
locationKeywordsarrayemptyKeep jobs in matching locations or addresses.
employmentTypesarrayemptyKeep only these types: FullTime, PartTime, Intern, Contract, Temporary.
remoteOnlybooleanfalseKeep only jobs the board marks as remote.
publishedAfterstringemptyNew postings: 24h, 7d, 2w, or an ISO date.
includeDescriptionMarkdownbooleantrueAdd the description as Markdown (paid add-on).
includeDescriptionHtmlbooleanfalseAdd the original HTML (paid add-on).
includeDescriptionTextbooleanfalseAdd the board's plain text (paid add-on).
includeCompanyDatabooleanfalseEnrich rows from the job page: company website, logo, remote-eligibility countries, deadline, direct-apply (paid add-on).
reportstringnoneWrite a Markdown or HTML run report to the key-value store (paid add-on).
maxCompaniesinteger25Cap on companies in sweeps and discovery.
maxJobsPerCompanyinteger0Per-board cap, 0 means all.
maxJobsinteger100Whole-run cap, the main cost control.
maxConcurrencyinteger5Parallel discovery and enrichment requests.
proxyConfigurationobjectdirectOptional Apify Proxy settings; direct connections work.

Output Format

A full job record:

json
{  "resultType": "job",  "id": "34413f8d-26bf-4bbc-8ade-eb309a0e2245",  "title": "Security Engineer, Cloud",  "companyName": "Ramp",  "boardToken": "ramp",  "url": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245",  "applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application",  "department": "Engineering",  "team": "Backend",  "location": "New York, NY (HQ)",  "countriesDerived": ["United States", "Canada"],  "isRemote": true,  "workplaceType": "Hybrid",  "employmentType": "FullTime",  "datePublished": "2026-04-07",  "compensationSummary": "$211.4K - $290.6K",  "salaryMin": 211400,  "salaryMax": 290600,  "salaryCurrency": "USD",  "salaryPeriod": "year",  "offersEquity": true,  "descriptionMarkdown": "# About Ramp\n\nRamp is building...",  "source": "ashby",  "scrapedAt": "2026-08-27T16:00:00Z"}

A discovered company row:

json
{  "resultType": "company",  "boardToken": "ramp",  "boardUrl": "https://jobs.ashbyhq.com/ramp",  "companyName": "Ramp",  "jobCount": 135,  "live": true,  "verifiedAt": "2026-08-27T16:00:00Z"}

🤖 Ask an AI assistant about this Actor

Open a ready-to-send prompt about the Ashby Job Board API in the AI of your choice:

People also search for

Is this an Ashby scraper?

Under the hood it reads the same public endpoint a scraper would. What you get is an API: structured JSON on demand, filters, stable field names, and no HTML unless you ask for it. If you have been maintaining your own scrape of Ashby boards, this is the version where someone else maintains the parser.

What is jobs.ashbyhq.com?

The domain where Ashby hosts its customers' public job boards; every company on Ashby gets a page at jobs.ashbyhq.com/companyname. Paste any of those URLs into this Actor, board or single job, and it returns the structured data behind the page.

Do I need an Ashby API key?

No. Ashby's authenticated APIs are for employers. This Actor uses only the public job posting layer, so there is nothing to sign up for.

How do I find companies that use Ashby?

Set outputMode to companiesOnly. You get one row per company with its board slug, a live open-jobs count, and the board URL. The --example companies script does exactly this, and --example check verifies a specific list of names.

How do I get Ashby salary data?

It is on the base row. Employers that display compensation publish structured ranges; those arrive as flat salaryMin / salaryMax / salaryCurrency / salaryPeriod columns plus offersEquity, with the raw structure in salaryRaw. The --example salary script prints a pay table.

How do I get only new job postings?

Set publishedAfter to a window like 24h or an ISO date. The Actor uses the employer's own publish timestamps, so there is no state to manage between runs.

How do I use the Ashby job board API from Python?

Clone this repo, run uv sync, put your Apify token in .env, and run the example. The rows() helper shows the whole pattern: call the Actor, then iterate the dataset.

Install in Claude Cowork Desktop

[Install in Claude Cowork Desktop]

Cowork is the desktop app's automation mode. To give it the Ashby Job Board API as a tool, add the Apify MCP server as a connector.

  1. Open the Claude desktop app and go to Settings → Connectors (or Settings → Developer → Edit Config to edit claude_desktop_config.json directly).
    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
  2. Add the Apify MCP server, preloaded with only this Actor:
json
{  "mcpServers": {    "apify": {      "command": "npx",      "args": [        "-y",        "mcp-remote",        "https://mcp.apify.com/?tools=actors,docs,johnvc/ashby-job-board-scraper"      ]    }  }}
  1. Restart the app. When Cowork first calls the tool, complete the OAuth prompt in your browser, or add your Apify API token in the connector settings to skip OAuth.
  2. In a Cowork chat, confirm the tool is available and ask it to run the Ashby Job Board API.

Download the desktop app and start a free trial: https://claude.ai/referral/uIlpa7nPLg More help: https://docs.apify.com/platform/integrations/claude-desktop


Install in Claude Code

[Install in Claude Code]

Claude Code is the command-line tool. Add the Actor's MCP server with one command:

bash
claude mcp add --transport http apify \  "https://mcp.apify.com/?tools=actors,docs,johnvc/ashby-job-board-scraper"

To use a token instead of browser OAuth:

bash
claude mcp add --transport http apify \  "https://mcp.apify.com/?tools=actors,docs,johnvc/ashby-job-board-scraper" \  --header "Authorization: Bearer YOUR_APIFY_TOKEN"

Then verify with claude mcp list, or run /mcp inside a session. Ask Claude Code to call the Ashby Job Board API.

Try Claude Code free: https://claude.ai/referral/uIlpa7nPLg Claude Code MCP docs: https://code.claude.com/docs/en/mcp


Install in Claude (website)

[Install in Claude (website)]

On claude.ai you add Apify as a connector, then enable just this Actor's tool.

  1. Go to Settings → Connectors → Browse connectors and search for Apify MCP server. Install it (enable or update if prompted).
  2. When connecting, authenticate with your Apify API token, and enable the tool johnvc/ashby-job-board-scraper.
  3. In any chat, open + → Connectors and turn on Apify.
  4. Alternatively, choose Add custom connector and paste the full MCP URL https://mcp.apify.com/?tools=actors,docs,johnvc/ashby-job-board-scraper, using OAuth when prompted.
  5. Ask Claude to run the Ashby Job Board API.

Open Claude on the web: https://claude.ai


Install in Cursor

[Install in Cursor]

Cursor reads MCP servers from a project file at .cursor/mcp.json.

  1. In your project, create .cursor/mcp.json:
json
{  "mcpServers": {    "apify": {      "url": "https://mcp.apify.com/?tools=actors,docs,johnvc/ashby-job-board-scraper"    }  }}
  1. If you prefer token auth over browser OAuth, add a header:
json
{  "mcpServers": {    "apify": {      "url": "https://mcp.apify.com/?tools=actors,docs,johnvc/ashby-job-board-scraper",      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }    }  }}
  1. Open Cursor → Settings → MCP and confirm the apify server is connected (green dot).
  2. In Composer or Chat, ask Cursor to call the Ashby Job Board API.

New to Cursor? Get it here: https://cursor.com/referral?code=XQP4VBLI3NNX


Install in ChatGPT

[Install in ChatGPT]

ChatGPT connects to the Apify MCP server through Developer mode (available on ChatGPT Pro, Plus, Business, Enterprise, and Education plans).

  1. Click your profile icon, then go to Settings > Apps. If you do not see a Create app button, open Advanced settings and enable Developer mode.
  2. Click Create app and fill out the form:
    • Name: Apify
    • MCP Server URL: https://mcp.apify.com/?tools=actors,docs,johnvc/ashby-job-board-scraper
    • Authentication: OAuth
  3. Click Create and authorize the connection with Apify.
  4. To use the app in a conversation, click + in the chat, choose Developer mode, and select Apify.

More help: https://docs.apify.com/platform/integrations/mcp


Made with care by johnvc on Apify.

Last Updated: 2026.10.27

來源:README.md,提交 e35c633

工具

0
該伺服器需要登入,因此 SourceWeft 無法在沒有帳號的情況下讀取其工具,也未收錄。已連接帳號所能看到的內容可能因帳號及其權限而異。

版本歷史

1
  1. v1.0.0最新Sep 16, 2026

評分

已滿足適用檢查項的 75%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。