How to use it: 3 steps
- Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
rampin Ashby boards or job URLs. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
Export current public jobs from Ashby job boards as one structured row per job. Get descriptions, locations, apply links and compensation published by the employer. Add a known board such as ramp. The new Input form saves up to 10 jobs for a first run. The applied price is $0.00085 per start at default memory plus $0.75 per 1,000 saved jobs, with platform usage included. Check RUN_SUMMARY for empty or partial results.
Who uses it
Job board owners
Import current jobs from companies that use Ashby.
Recruiters
Study roles and locations at target companies.
Hiring researchers
Compare published pay across known companies.
Price
Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.
| What you pay for | Price | When |
|---|---|---|
| Useful job row | $0.00075 | One useful job row saved to the default Dataset. |
| Start fee | $0.00085 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
Examples
- One job: about $0.0016.
- 1,000 jobs: about $0.75.
- Every day 100 jobs, for 30 days: about $2.28 a month.
Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 6,600 jobs.
Prices checked on 24 October 2026. See the current price on Apify.
Questions
Can it find every company on Ashby?
No. You need to know the board name. It does not search across companies.
Does remote mean fully remote?
Not always. A job can be marked remote and also hybrid. Check both fields.
Does every job show pay?
No. Pay appears only when the employer publishes it.
Do I need an Ashby login?
No. It reads the public job postings.
Does it discover all companies or search all Ashby jobs?
No. Supply the known boards you want. It reads a current snapshot of those boards.
Does every job include pay and all locations?
No. Only employer-published source values are available. Missing values remain null or empty according to the field reference.
Can I monitor changes?
You can compare scheduled snapshots in your own system. There is no built-in delta mode. The same input can return the same jobs on a repeat run; those new saved rows are charged again.
Is an empty run free?
It has no saved-job event charge. An enabled Actor-start event is still charged automatically, even with no matches. Check the current Pricing tab; future announced prices are separate. A partial run is charged for startup and its saved jobs.
Details
Step by step on Apify
- Open Input. Keep the board
rampand the new-form limit of 10 jobs. - Choose
allfor board slugs or board URLs. Useexactonly with canonical hosted job URLs. - Click Start.
- Open the default Dataset. Check
title,location,jobUrlandapplyUrl. - Open Key-value store → RUN_SUMMARY to see counts, limits and each input's status.
Use cases
| Task | Input | Key fields | Next step |
|---|---|---|---|
| Export a company job board | boards, mode: "all" | id, title, department, jobUrl | Export the Dataset or store it in your system. |
| Study roles and locations | filters.titleContains, filters.locationContains | location, secondaryLocations, workplaceType | Compare matching jobs. |
| Read one known posting | mode: "exact", a canonical job URL | id, descriptions, applyUrl | Check the current source posting. |
| Compare published pay | includeCompensation: true | compensation, employmentType | Use only values the employer publishes. |
Tips for better results
- Use the board name from the jobs.ashbyhq.com address.
- Check workplace type and the remote flag together. They can differ.
- Read RUN_SUMMARY when the result looks empty.
Limits and good to know
- Up to 50 input values and 11,446 saved jobs per run
- Default memory is 512 MB after the resource validation matrix; increase it for larger boards or high concurrency. Data caps and source deadlines do not change
- Each source response is limited to 64 MiB
- Each source request has a 30-second timeout and up to three attempts for transient failures
- Total source work has a 240-second deadline. A longer platform timeout does not extend it
- A shorter platform timeout reduces source time, with a 15-second reserve for the run summary
- There is no pagination: the documented endpoint returns a board feed in one response
- Source order is kept. This Actor does not sort jobs by publication date
Recent updates
Update · 9 October 2026
- Add platform-managed start pricing at USD 0.00085 per memory multiplier; retain USD 0.00075 per saved row and included platform usage.
- Validate 512 MB default resources, automatic startup charge and total-charge stop.
- Replace the README banner with a designed navy/blue jobs-and-export visual.
Update
- Final certification fixes preserve valid rows when a source response contains malformed jobs, mark duplicate or malformed source rows as partial, and keep invalid-input accounting visible after an output cap.
- Updated public copy and playbook snapshots for the independent TZ-06 review.
- Aligned the customer-facing README and publication package with the public Ashby source fields, limits, statuses, sample and support flow.
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"source": "ashby",
"boardSlug": "ramp",
"id": "34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"title": "Security Engineer, Cloud",
"department": "Engineering",
"team": "Backend",
"location": "New York, NY (HQ)",
"isRemote": true,
"workplaceType": "Hybrid",
"employmentType": "FullTime",
"isListed": true,
"publishedAt": "2026-04-07T17:12:35.753Z",
"jobUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application"
}Use it from code
Actor ID: cliqtomedia/ashby-jobs-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/ashby-jobs-scraper").call(run_input={
"mode": "all",
"boards": [
"ramp"
]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~ashby-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode": "all", "boards": ["ramp"]}'# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool
tool = ApifyActorsTool("cliqtomedia/ashby-jobs-scraper")
result = tool.invoke({"run_input": {"mode": "all", "boards": ["ramp"]}})
print(result)The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.
Data fields (22)
| Field | Type |
|---|---|
source | string |
boardSlug | string |
id | string |
title | string |
department | string |
team | string |
location | string |
workplaceType | string |
employmentType | string |
isRemote | boolean |
isListed | boolean |
publishedAt | string |
jobUrl | string |
applyUrl | string |
descriptionPlain | string |
compensation | object |
boardUrl | string |
descriptionHtml | string |
secondaryLocations | array |
address | object |
sourceApiVersion | string |
collectedAt | string |
Input settings (8)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Mode | mode | string | "all" |
| Ashby boards or job URLs | boards | array | ["ramp"] |
| Include published compensation | includeCompensation | boolean | true |
| Include direct-only postings | includeUnlisted | boolean | false |
| Local filters | filters | object | {} |
| Maximum rows per board | maxResultsPerBoard | integer | |
| Maximum output rows | maxOutputItems | integer | 10 |
| Board concurrency | concurrency | integer | 4 |
Use cases with this tool
Each guide shows all the steps and the other tools.
