Official scripts
Explore our curated collection of scripts
List job board postings
List every open position on an Ashby-hosted job board (jobs.ashbyhq.com/<board>).
Get Ashby job posting
Read one Ashby job posting (jobs.ashbyhq.com/<board>/<jobId>), description HTML included.
Detect company's ATS (Greenhouse/Lever/Ashby)
Given a company's careers page URL, detect whether it's backed by Greenhouse, Lever, or Ashby and extract the board slug usable with greenhouse.io/get_company_jobs, lever.co/get_company_jobs, or ashbyhq.com/get_company_jobs. Detection combines two signals: network requests fired by the page (Greenhouse/Lever client-side API calls, seen e.g. on discord.com/careers) and embedded links to the ATS's own hosted board (seen e.g. on notion.com/careers linking jobs.ashbyhq.com/notion). Many companies fully proxy their ATS server-side with no client-visible signal (e.g. careers.airbnb.com, retool.com/careers) - for those this returns platform: null, which is a legitimate outcome, not a failure. Point this at the company's own marketing careers page, not at a guessed ATS URL: several large companies (e.g. Airbnb, Coinbase) configure their native Greenhouse board (boards.greenhouse.io/<slug>) to redirect to their custom-branded career site, which then also yields platform: null.
Search Dribbble jobs
Search Dribbble's job board by keyword, location and job type, returning title, company, location, posted date and url.
Search Wellfound jobs
Search Wellfound (AngelList Talent) startup job listings by role keyword, with optional city location (omit for remote-only). Returns total, page, totalPages, and jobs (jobId, title, url, company, companyUrl, jobType, compensation, locations, remote, remoteKind, acceptedRemoteLocations, yearsExperienceMin/Max, postedAt). Unrecognized roles or locations, and pages past the last one, raise an error rather than returning unrelated results. The total can exceed the jobs returned on a page, because Wellfound shows only a few jobs per company.
Search Behance jobs
Search Behance's job board (freelance briefs and full-time/contract listings) by keyword, returning title, company, location, remote status, job type, salary and url.
Search Himalayas remote jobs
Search Himalayas (himalayas.app) remote job listings by a free-text description of the desired role (e.g. "python developer in france", "senior product designer, remote worldwide") — the same single natural-language box the site's own UI exposes ("Describe your ideal remote job..."). Returns total (from the site's own job counter) and jobs (title, url, company, companyUrl, postedAgo, location, salary, tags). Paginates via the site's own page param (page=1 default, 20 results/page). An unrecognized query falls back to the full unfiltered listing (~100k+ jobs) rather than returning zero results — check the returned filtered flag (false when this fallback happened) rather than trusting total alone.
Search SimplyHired jobs
Search SimplyHired (Indeed-owned aggregator) job listings, returning richer detail than the page cards show: title, company, location, salary, benefits, requirements, snippet, remote flag, sponsored flag, dateOnIndeed. Pagination is cursor-based (not page numbers) — pass the cursor token returned in a previous call's pageCursors to get subsequent pages. Invalid/unresolvable locations return 0 results (site's own behavior), not an error.
Search XING Jobs
Search XING Jobs (German-speaking professional network) by free-text keyword and optional free-text location (city), via XING's own query-string job search rather than its natural-language "Tell the XING AI about the job you want" search box. Returns total (site's own counter, capped and displayed as "999+" for very broad queries - not an exact count past that point) and jobs (jobId, title, company, location, moreLocations, employmentType, salary, urgentlyHiring, postedAgo, postedAt, easyApply, sponsored, url). A few things to know: an unmatched keyword and/or an unresolvable location do not reliably produce a true zero-result signal via the total counter - XING can silently fall back to an unfiltered (or location-only-filtered) broad result set while still reporting a normal-looking "N jobs found", so total/location alone should not be trusted to detect a true no-match; an unresolvable location is silently dropped server-side to a nationwide search, same pattern as some other job boards. Pagination is reliable at its true boundary, though: once a page number goes past the site's actual result count, this script returns jobs:[] for a genuine "no matching jobs" state, ignoring that page's unrelated "jobs we found elsewhere" suggestions - those reuse the same card markup as real results but are not matches. Going further still (a page number far beyond any reasonable range) throws an explicit error instead of hanging. Some result cards are third-party syndicated listings (e.g. via jobware.de, jooble.org, meinestadt.de, heyjobs.co) rather than native XING job pages - these have sponsored:true, url pointing off-site, and jobId:null (no internal XING job id exists for them), which is the site's own real behavior, not a missing field. Pagination is 1-based via the site's own page param (page=1 default, 20 results/page).
Search WeWorkRemotely jobs
Search We Work Remotely two ways: `query` hits the site's own "Search everything" full-text search (leaner fields: no absolute date, just relative postedAgo, plus salaryRange/companyHeadquarters); `category` reads the RSS feed for one category or the combined feed (richer fields: region/country/state/skills/absolute pubDate, no free-text search). They're separate site affordances, not merged — query takes priority if both are given.
Search Glassdoor jobs
Search Glassdoor job listings by keyword and optional city. Returns total and jobs (jobId, title, url, company, rating, location, salary, snippet, postedAgo) for the first results page only (about 30 listings). A city Glassdoor does not recognize, or cannot filter by, fails with an error rather than returning unrelated results. Glassdoor shows text in the language of the country it places the session in, so some fields may not be in English. For company profiles and reviews, use search_companies and get_company.
List ATS jobs
List jobs in the Welcome to the Jungle ATS by status. Returns jobs with id, name, reference, status, pipeline stages, and candidate counts (new/inProcess/refused). reference is the join key for list_job_candidates.
Search Monster jobs
Search Monster's US job listings by free-text keyword and optional free-text location (city/state, e.g. "Austin, TX"; omit for a nationwide/remote search). Returns total (jobs on this page, max 18), estimatedTotal (Monster's own broader estimate across the full index) and jobs (jobId, title, company, location, remote, salary, currency, datePosted, url, applyUrl). Monster always searches scoped to the US regardless of the location text typed — this mirrors monster.com's own site behavior (it is a US-market board); a non-US location (e.g. "Paris, France") is not rejected — Monster's own geocoding can silently match a same-named US place instead (e.g. resolving to Paris, Maine) and return results for that place. Paginates via page (1, 2, ...; 18 results/page); results may repeat sponsored/promoted listings across pages, matching the site's own behavior. A keyword with no matches returns total:0, jobs:[] — not an error.
Search Wizbii jobs
Searches job listings on jobs.wizbii.com by filtering by business domain (slug required, e.g. developpement-informatique, marketing, ventes — full list at wizbii.com/directory/lp/domaine) and optionally by city (slug, e.g. paris, lyon — list at wizbii.com/directory/lp/ville). No free-text keyword search: the site only exposes this category×city filter. Returns the site's own richer listing data for each result. An invalid domain or city throws explicitly rather than returning an empty page. 1-based pagination, matching the site's own URL.
Search France Travail jobs
Search France Travail (formerly Pôle Emploi) public job listings by keyword, optional free-text location (city or department) or location code, and page (20 offers/page). Returns jobs (jobId, title, company, location, description, contract, postedAgo, url) and, on page 1 only, the total match count. An ambiguous or unrecognized location is refused rather than silently searching nationwide.
Search StepStone (Germany) jobs
Search StepStone.de's German job listings by free-text keyword and optional free-text location. Returns total and jobs (id, title, url, company, companyUrl, location, salary, workFromHome, datePosted, snippet, quickApply). Pagination is 1-based (arg page), 25 results per page. Both an unmatched keyword and an unrecognized location legitimately return total:0, jobs:[] — StepStone's own location matching is strict (no silent nationwide fallback), so this is a real empty result, not a coerced one.
Search Jooble jobs
Search job listings on jooble.org by keyword and optional city or region, with paging (about 20 results per page). Returns the matching count, the site's total count, and each job's title, company, location, salary, tags, posting date, remote flag and description. Jooble can temporarily block rapid repeated searches; if a search fails, wait before retrying.
Search Free-Work jobs
Searches job listings on free-work.com (IT/freelance), usable without logging in. `query` is a free-text keyword; `location` is a free-text city, resolved to the closest match — unresolved locations throw explicitly rather than silently searching everywhere. Defaults to searching all of France when no location is given. Returns title, full description, company, contract types, experience level, remote work, salaries (daily/annual), currency, skills, publish date, and URL. 1-based pagination, 16 results per page. One thing to check: requesting a page beyond the real number of pages doesn't return an empty result — it silently repeats the first page — so verify against `totalItems` before trusting a high page number.
Search Cadremploi jobs
Search Cadremploi (French executive and manager job board) by keyword and optional French city, with an optional radius in km and paging (50 per page). A city Cadremploi does not recognize fails with an error; regions and departments are not supported. Results mix exact city matches, nearby matches and a wider fallback; each job's matchType says which. total counts all three. An unmatched keyword returns total 0 and an empty list, not an error.
Greenhouse: get company jobs
Fetch a company's live job postings from Greenhouse's public board API by board slug (boards.greenhouse.io/<slug>). Anonymous, no auth. Returns id, title, location, department(s), url, updatedAt, firstPublished. Throws (job board not found) if the slug isn't a Greenhouse customer.
Get Upwork job description
Fetch a single Upwork job posting's full details by its ciphertext (the ~0… token in the job URL, returned by search_jobs). Covers title, full description, category, occupation, skills, budget or hourly range, workload and duration, experience level, screening questions and attachments. Also covers client activity (applicants, interviews, invites, hires) and the client: country, city, payment verified, member since, score and spend. No Upwork account needed. A job that does not exist or was removed fails with a clear error. Read-only.
Search Meteojob jobs
Search Meteojob's French job listings by free-text keyword and optional free-text location. Location text is validated before being used in the search — an unrecognized location raises an error rather than silently falling back to a nationwide search. Returns total and jobs (id, title, url, company, location, contractType, jobType, telework, salary, skills, publishedAt, highlight). Pagination is 1-based (20 results per page, matching the site's own page size). An unmatched keyword returns total:0, jobs:[] — not an error. Salary is the site's own free-text display string (e.g. "50 000 € - 60 000 € par an") since offers price ranges inconsistently (annual/hourly/monthly, disclosed or not).
List candidates of one Welcome to the Jungle job
List all candidates applied to a single Welcome to the Jungle ATS job (its kanban pipeline), including the job's pipeline stages. Scoped to one job at a time — for a text search across every job in the organization at once, use search_all_candidates instead.
Search Built In jobs
Search Built In (builtin.com) tech/startup job listings by free-text keyword and optional free-text location (city). Returns id, title, url, company, companyUrl, postedAgo, remoteType (Remote/Hybrid/In-Office wording as shown), locations (array — cards with several offices list each one), salary (raw site text, e.g. "180K-201K Annually" — not split into min/max since the site itself only shows a range string, sometimes absent when undisclosed), seniority, industries (array), description, topSkills (array). Paginates via the site's own page param (page=1 default, 25 results/page); the reported last page reflects the true total, not just the current page's count. A query/location with no matches returns jobs:[] — not an error.
Search Upwork Jobs
Search Upwork's public job board by free-text query, one results page at a time (10 jobs per page; pass page for the next ones; sort by relevance or recency). Returns structured job cards (title, description, budget, skills, experience level, posting date) and the total match count. Upwork's other filters are not applied. A query with no match returns an empty list. Client details stay empty for visitors who are not signed in. When Upwork shows its login wall instead of results, the run fails with an error that says so.
