Ashby Jobs Lookup — Live Postings by Company avatar

Ashby Jobs Lookup — Live Postings by Company

Pricing

from $3.00 / 1,000 successful lookups

Go to Apify Store
Ashby Jobs Lookup — Live Postings by Company

Ashby Jobs Lookup — Live Postings by Company

Look up any company's live Ashby job board and get every open role — title, department, team, location, remote status, employment type, apply link. Paste company slugs or careers URLs, press Start. Charged once per company checked, no matter how many roles it has open — none open costs nothing.

Pricing

from $3.00 / 1,000 successful lookups

Rating

0.0

(0)

Developer

Adrian Voss

Adrian Voss

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Look up any company's live Ashby job board and get every open role back as one row per posting — title, department, team, location, remote status, employment type, and a direct apply link. No API key, no HTML scraping: this reads Ashby's own public posting API directly, so it doesn't break when a careers page gets a redesign. You can also filter the roles you get back (title keyword, location, remote-only, posted-after date) and put the actor on a schedule for a hiring-alert delta mode that returns only postings that appeared since your last run.

Who it's for

The accountable_eel catalogue sells company intelligence columns for outbound. Each actor takes a list of domains or company identifiers and returns one flat, stably-named row per input — firmographics, registry IDs, tech stack, email route, hiring activity — the shape a Clay table, an n8n workflow, or an AI agent can consume without post-processing. Pricing is pay-per-event and per-domain: a few tenths of a cent for a row that was actually found, and nothing for a miss, so a list that doesn't enrich costs you next to nothing. Where an official source exists — VIES, GLEIF, SEC EDGAR, Brønnøysund, PRH, RDAP — it is queried directly instead of scraped. No seat licence, no monthly minimum, no credit system to decode.

This one is the "hiring column": paste a list of companies known to run on Ashby, and get their current headcount demand back as a table instead of forty open browser tabs.

Why this one

  • Direct from Ashby's own API, not a scrape of the rendered careers page — no HTML selectors to break when a company redesigns its job board.
  • You pay per company checked, never per job. A board with 80 open roles and a board with 2 cost the same single item-lookup charge.
  • Real filters, not just a wall of raw fields. Title keyword include/exclude, location, remote-only, and posted-after date all combine, and every filtered-out role still shows up in totalJobCount so a small result is never ambiguous.
  • A delta mode built for schedules. Turn on onlyNewSinceLastRun and every run after the first returns only the postings you haven't seen — a hiring alert, not a re-dump.
  • Ashby's richer job shape kept intact. Department and team, an explicit remote flag, and employment type are each their own column instead of being flattened into one free-text field.

What you get

Every row carries the shared envelope every actor in this catalogue uses, plus the Ashby-specific fields pulled from .actor/profile.json. Which of the posting-level fields (title through applyUrl) are present depends on the output shape you pick in the Input tab — see How to use.

FieldTypeDescription
querystringThe input exactly as given — the slug or the careers URL you pasted
foundbooleantrue if the company has an Ashby board with at least one open role
statusstringOK on a found row; NOT_FOUND or BAD_FORMAT on a miss
companystringThe Ashby slug, extracted from your input and lowercased
jobCountnumberRoles in this row's result — after filters, and after delta if onlyNewSinceLastRun is on
totalJobCountnumberOpen roles on the board before any filter was applied
newJobsnumberRoles new since your last run — null unless onlyNewSinceLastRun is on
firstRunbooleanWhether this was the baseline run for this watchlist — null unless onlyNewSinceLastRun is on
jobsarrayThe full matching job list for this company — present only in one row per company mode
titlestringJob title — present only in one row per job posting mode (the default)
departmentstringAshby's department field for the posting
teamstringAshby's team field — a finer-grained grouping than department, when the company uses it
locationstringThe posting's primary location string, as Ashby reports it
isRemotebooleanAshby's own raw isRemote flag — true, false, or absent (shown as empty) when the company never set it
remotebooleanBest-effort merged remote flag: trusts isRemote === true, otherwise falls back to a location/title check
employmentTypestringFull-time, part-time, contract, intern, etc., as Ashby classifies it
publishedAtstring (ISO 8601)When Ashby published the posting
postedAtstring (ISO 8601)Alias of publishedAt — Ashby doesn't expose a separate first-published date, unlike Greenhouse
applyUrlstring (link)Direct apply link for the posting
scrapedAtstring (ISO 8601)Timestamp of the lookup
messagestringPresent only on miss rows — the reason found is false

Two fields are deliberately not returned: compensation ranges (Ashby doesn't expose them on every board, so the column would be mostly empty) and Ashby's secondaryLocations array — only the primary location string comes through, to keep this actor's shape consistent with the other single-platform ATS actors in this portfolio.

Price

$5 per 1,000 companies, plus a $0.0001 start fee. Misses (found:false) are never charged.

You're charged one item-lookup per company where at least one open role was found — a board with hundreds of roles costs the same as one with a handful. A company with no Ashby board, or zero open roles, comes back found: false and costs nothing. A company whose board exists but whose roles all got filtered out (or had nothing new since your last run) still gets charged — the lookup happened and answered a real question, it just returned zero matching rows this time.

1,000 companies through this actor: ~$5 if every one is found, less if some aren't — that's the FREE-tier rate; it drops on paid Apify tiers. The same 1,000 rows through a credit-based enrichment platform: $80–$400.

How to use

  1. In the Apify Console. Open the actor page and click Start — the companies field is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found.
  2. Via the API. Call it directly with a POST request — no Console needed once you have an API token:
    curl "https://api.apify.com/v2/acts/accountable_eel~ashby-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
    -X POST \
    -H "Content-Type: application/json" \
    -d '{"companies":["ramp"]}'
  3. On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.

Input

{
"companies": [
"ramp"
]
}

One company per line — paste the Ashby slug or the full careers page URL. Accepted formats: ramp, https://jobs.ashbyhq.com/ramp.

Don't know a company's Ashby slug? Paste their careers page URL instead — jobs.ashbyhq.com/<slug> works directly, and the slug is pulled out automatically.

Filtering the roles you get back. All of these live in the 🎯 Job filters section of the Input tab and are optional — leave them empty and you get every open role, exactly as before.

InputWhat it does
titleKeywordsKeep only roles whose title contains at least one of these. Case-insensitive, partial words count — "engineer" matches Engineering Manager. Any-match: ["engineer","designer"] keeps both kinds.
excludeTitleKeywordsDrop any role whose title contains one of these — ["intern","contract"]. Applied after titleKeywords, so a role matching both is dropped.
locationsKeep only roles whose location contains one of these — ["Berlin","United Kingdom"]. Case-insensitive, partial matches count, any-match.
remoteOnlyKeep only roles that read as remote. Matches Ashby's own isRemote flag when a company has set it, plus remote, anywhere, work from home, wfh and distributed in the location, and the word remote in the title.
postedAfterKeep only roles Ashby first published on or after this date — "2026-06-01", or a full ISO timestamp. Inclusive of the date you give.

Different filters combine with AND (title and location and remote); values inside one filter combine with OR. Filtering happens before rows are built, so it applies identically whether you're getting one row per job or one row per company.

{
"companies": ["ramp", "notion"],
"titleKeywords": ["engineer", "designer"],
"excludeTitleKeywords": ["intern"],
"locations": ["Remote", "New York"],
"postedAfter": "2026-06-01"
}

jobCount and totalJobCount come back on every row so a filtered result is never ambiguous. A company whose roles all get filtered out still gets one found: true row with jobCount: 0 — a real question was asked and answered, so it's charged like any other company.

Two output shapes. Turn off "One row per job posting" in the Input tab to get one row per company instead, with the full matching job list nested inside jobs. Filters apply identically to both shapes.

Watching for new jobs. Turn on onlyNewSinceLastRun and put the actor on a schedule to get a hiring alert instead of a full dump every time:

  • The first run returns everything that matches your filters and remembers which postings it showed you.
  • Every run after that returns only postings it hasn't shown you before. newJobs says how many, firstRun says whether this was the baseline run.
  • A company with nothing new still gets a rowfound: true, jobCount: 0, newJobs: 0 — so a quiet week reads as quiet, not as a broken schedule. Every company checked is charged once either way.

The seen-list lives in a key-value store named ashby-jobs-lookup-state in your own Apify account, one entry per company. Two things worth knowing: your filters are part of a watchlist's identity, so two schedules with different titleKeywords keep separate seen-lists, and changing a filter starts a fresh watchlist (the next run re-baselines). A role that closes and later gets re-posted counts as new again, since the seen-list only ever tracks postings currently on the board.

Sample output

By default you get one row per open job posting (turn off "One row per job posting" in the Input tab for one row per company instead, with the full job list nested inside):

queryfoundstatuscompanyjobCounttotalJobCountnewJobsfirstRunjobstitledepartmentteamlocationisRemoteremoteemploymentTypepublishedAtpostedAtapplyUrlscrapedAt
ramptrueOKramp136136<all matching jobs (full list)>Security Engineer, CloudEngineeringBackendNew York, NY (HQ)truetrueFullTime2026-04-07T17:12:35.753+00:002026-04-07T17:12:35.753+00:00https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application2026-08-24T06:01:25.519Z

A real row looks like:

queryfoundstatuscompanytitledepartmentteamlocationisRemoteapplyUrl
ramptrueOKrampSecurity Engineer, CloudEngineeringBackendNew York, NY (HQ)falsehttps://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245

A company with no Ashby board, or no open roles right now, gets a single row with found: false and a status/message explaining why — and is never charged.

Use it from Clay, n8n, Make, or an AI agent

This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.

curl "https://api.apify.com/v2/acts/accountable_eel~ashby-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-X POST \
-H "Content-Type: application/json" \
-d '{"companies":["ramp"]}'

n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~ashby-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"companies":["ramp"]} (swap in an expression from an earlier node for a real value).

Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~ashby-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"companies":["{{company}}"]}, mapping the row's company into the companies array.

MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "Ashby Jobs Lookup | Apify" — the agent will find and run this actor.

Tips

  • Confirm the platform first if you're not sure. If your list is mixed across ATS platforms, run it through ats-jobs-unified-lookup first to see which companies are on Ashby before spending a call here on a company that isn't.
  • Use onlyFound (in the Output tab) to drop misses from the dataset entirely if you only want companies with an active board — you're not charged for them either way, this just keeps the table clean.
  • Set titleKeywords before you schedule a delta watchlist. Changing filters later resets the seen-list and re-baselines, so decide on the roles you care about up front.
  • postedAfter filters on Ashby's publish date, not on when you happened to run the actor. A role posted last month won't show up just because today is the first time you checked.
  • Pair remoteOnly with a location filter for "remote in a specific region." remoteOnly alone catches anything Ashby or the posting itself calls remote, worldwide.

vs. alternatives

What it costsWhat you getTrade-off
This actor (ashby-jobs-lookup)$0.005 per company whose board is found (less on paid tiers), $0.0001 actor start, nothing for a company with no Ashby boardEvery open role on a company's Ashby board — title, department, team, location, remote status, employment type, apply link — filtered by title keyword, location, remote-only or posting date, with onlyNewSinceLastRun for a hiring-alert deltaAshby only. If your list is mixed-ATS, use ats-jobs-unified-lookup. Ashby's secondaryLocations array and compensation ranges aren't returned — only the primary location string, matching how the other single-platform ATS actors in this portfolio handle it.
TheirStack$0.005–$0.03 per companyA job-postings dataset with history, normalised across many ATS platforms and job boardsBroader coverage than one platform, and it keeps history. This reads Ashby's own API live, at the bottom of that price range.
Ashby's own APIFreeThe same JSONIt is the same JSON. This handles the slug/URL parsing, title and location filtering, remote detection, delta watchlists, and the retries — and hands you a flat table instead of a raw payload.
Clay$0.08–$0.40 per enriched row in credits, on top of a seatA whole enrichment workspace — waterfalls across dozens of providers, plus the table and the sequencing around itIf you want one place that does everything and you're not counting rows, that's Clay. This is one column, priced per column, callable from Clay via its HTTP step.

Prices for third-party tools are their published list prices as of August 2026 and are not tracked here — check the vendor before relying on the comparison.

FAQ

Why does a row come back found: false? Either the input doesn't look like an Ashby slug or URL (status: BAD_FORMAT), or that company doesn't have an Ashby board, or currently has zero open roles (status: NOT_FOUND). Check the message column for the specific reason.

Am I charged for a miss? No. You're only charged for a company where at least one open role was found on its board. A company with no board, or no current openings, is free — check status to see which case you hit.

Why was I charged for a company that came back with jobCount: 0? Because its board exists and has open roles — they just didn't match your filters, or (in delta mode) weren't new since your last run. totalJobCount shows how many were actually on the board. Only a company with no board at all, or literally nothing open, comes back found: false and free.

Does the delta ("new since last run") state cost anything or leak between users? It lives in a named key-value store inside your own Apify account, so nobody else can see it and its storage cost is negligible — a list of posting IDs per company. Delete the ashby-jobs-lookup-state store to reset every watchlist back to a first run.

Does this respect rate limits, and can I run it against a large list? Yes — requests are made one company at a time against Ashby's own posting API with the standard retry handling built into every actor in this portfolio. There's no published per-account rate limit from Ashby for this endpoint, but very large lists will simply take longer, not fail.

Is this GDPR-safe to run against EU companies? The data returned is what the company itself published on its own public Ashby-hosted job board — job titles, locations, and apply links, no candidate or personal data. No data is retained between runs unless you turn on onlyNewSinceLastRun, in which case only posting IDs (not personal data) are kept in your own account's key-value store.

Can I run this on a schedule? Yes — Apify's built-in Scheduler runs any actor on a cron-style schedule. Combine that with onlyNewSinceLastRun for a recurring hiring alert instead of a recurring full dump.

Can an AI agent call this directly? Yes — it's registered on Apify's MCP server, so an MCP-aware agent (Claude, Cursor, etc.) can find and run it by name, or you can call the REST API directly as shown above.

Does this only cover companies that use Ashby? Yes. Companies on a different applicant-tracking system won't resolve here — see greenhouse-jobs-lookup, lever-jobs-lookup, workday-jobs-lookup, personio-jobs-lookup, or ats-jobs-unified-lookup for those.