Greenhouse API: Get job
Gets the full text of one public Greenhouse job from its link, or from a company and job title. The pay range is included when the posting states one.
Unofficial. Not affiliated with or endorsed by Greenhouse.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Job, required
job Greenhouse job link or company and job title separated by a comma, such as Figma, Account Executive, Enterprise.
https://boards.greenhouse.io/figma/jobs/5426468004
Input as JSON
{ "job": "https://boards.greenhouse.io/figma/jobs/5426468004" }Output
{ "title": "Account Executive, Enterprise", "company": "Figma", "location": "San Francisco, CA • New York, NY • United States", "pay_range": { "period": "year", "maximum": 190000, "minimum": 165000, "currency": "USD" }, "department": "Sales", "description": "Figma is growing our team of passionate creatives and builders on a mission to make design accessible to all. Figma’s platform helps teams bring ideas to life—whether you're brainstorming, creating a prototype, translating designs into code, or iterating with AI. From idea to product, Figma empowers…", "application_link": "https://boards.greenhouse.io/figma/jobs/5426468004?gh_jid=5426468004" , "last_updated_date": "2026-07-22"}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"greenhouse.io/get_job","input":{"job":"https://boards.greenhouse.io/figma/jobs/5426468004"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "greenhouse.io/get_job" , "input": { "job": "https://boards.greenhouse.io/figma/jobs/5426468004" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "greenhouse.io/get_job" , "input": { "job": "https://boards.greenhouse.io/figma/jobs/5426468004" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run greenhouse.io/get_job# with {"job":"https://boards.greenhouse.io/figma/jobs/5426468004"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "job" ], "properties": { "job": { "type": "string", "minLength": 1, "description": "Greenhouse job link or company and job title separated by a comma, such as Figma, Account Executive, Enterprise." } }}Output schema
{ "type": "object", "required": [ "title", "company", "description", "application_link" ], "properties": { "title": { "type": "string" }, "company": { "type": "string" }, "location": { "type": [ "string", "null" ] }, "pay_range": { "type": [ "object", "null" ], "properties": { "period": { "type": "string" }, "maximum": { "type": "number" }, "minimum": { "type": "number" }, "currency": { "type": "string" } } }, "department": { "type": [ "string", "null" ] }, "description": { "type": "string" }, "application_link": { "type": "string" }, "last_updated_date": { "type": [ "string", "null" ] } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
greenhouse.io/get_job- Returns
- title, company, department, location, last updated date, pay range, description, application link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method greenhouse.io/get_job with the inputs above.
Ask your agent
- Can you pull up the full posting for the Senior Backend Engineer role at Stripe from its Greenhouse link, including the salary range if listed?
- I need the description and application link for the Data Analyst opening at Notion, Remote - US.
- What's the pay range and department for the Product Designer job at Airbnb listed on Greenhouse?
- Look up the Greenhouse posting https://boards.greenhouse.io/example/jobs/4012345 and tell me its location and last updated date.
- Get me the details for the Customer Success Manager position at Datadog, New York, including the title, team, and how to apply.
See more
All Greenhouse methodsLists open jobs on a company's Greenhouse job board, with optional department and location filters.
boards.greenhouse.io/list_company_jobsGets the full description and public details of an open LinkedIn job from its link, or from its title and company. Closed postings are not returned.
linkedin.com/get_jobLists open jobs on a company's Lever job board, with optional team, location and workplace filters.
jobs.lever.co/list_company_jobsLists top-level job posts from a monthly Ask HN: Who is hiring? thread in thread order, with post text and the company, roles, location, work arrangement, salary and application contact inferred from each post.
news.ycombinator.com/list_hiring_postsLooks up ZipRecruiter's salary page for a job title in the United States or one US state and returns typical pay, the percentile range and the top-paying cities. Only salary pages that exist publicly are returned.
ziprecruiter.com/get_salarySearches public LinkedIn job listings by keywords and location, with optional date, seniority, employment type and company filters.
linkedin.com/search_jobsFinds the typical pay for a job title in the United States or a U.S. city or state on Indeed's public salary pages, with the number of reported salaries, the last update date, and the top-paying cities and companies when shown.
indeed.com/get_salarySearches Remote OK jobs by role or skill. Results can be filtered by listed region and by minimum annual USD salary.
remoteok.com/search_jobs