LinkedIn API: Search jobs
Searches public LinkedIn job listings by keywords and location, with optional date, seniority, employment type and company filters.
Unofficial. Not affiliated with or endorsed by LinkedIn.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Company optional
company Company name, for example Microsoft. Uses an exact LinkedIn company-name match.
Not set
- Job Type optional
job_type Employment type, for example full_time; defaults to any.
any (default)
One of
full_time,part_time,contract,temporary,internship,any.- Keywords, required
keywords Job title or keywords, for example marketing manager.
marketing manager
- Location, required
location City, country or remote, for example London.
London
- Max Results optional
max_results Most jobs to return, for example 25; maximum 100.
2
Whole number from 1 to 100. Default
25.- Posted Within optional
posted_within When posted, for example last_week; defaults to any.
any (default)
One of
last_24_hours,last_week,last_month,any.- Experience Level optional
experience_level Listed seniority level, for example mid_senior; defaults to any.
any (default)
One of
internship,entry,associate,mid_senior,director,executive,any.
Input as JSON
{ "keywords": "marketing manager", "location": "London", "max_results": 2}Output
{ "jobs": [ { "title": "Marketing Manager - Sheraton Grand London Park Lane", "salary": null, "company": "Sheraton Hotels & Resorts", "job_link": "https://www.linkedin.com/jobs/view/4475966536" , "location": "London, England, United Kingdom", "posted_date": "2026-10-08", "workplace_type": null, "number_of_applicants": "108 applicants" }, { "title": "Marketing Manager [Brand]", "salary": null, "company": "Travelzoo", "job_link": "https://www.linkedin.com/jobs/view/4469179764" , "location": "London Area, United Kingdom", "posted_date": "2026-10-14", "workplace_type": null, "number_of_applicants": "193 applicants" } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"linkedin.com/search_jobs","input":{"keywords":"marketing manager","location":"London","max_results":2}}' # 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": "linkedin.com/search_jobs" , "input": { "keywords": "marketing manager", "location": "London", "max_results": 2 }})# 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": "linkedin.com/search_jobs" , "input": { "keywords": "marketing manager", "location": "London", "max_results": 2 } }), 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 linkedin.com/search_jobs# with {"keywords":"marketing manager","location":"London","max_results":2}"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": [ "keywords", "location" ], "properties": { "company": { "type": "string", "description": "Company name, for example Microsoft. Uses an exact LinkedIn company-name match." }, "job_type": { "enum": [ "full_time", "part_time", "contract", "temporary", "internship", "any" ], "type": "string", "default": "any", "description": "Employment type, for example full_time; defaults to any." }, "keywords": { "type": "string", "minLength": 1, "description": "Job title or keywords, for example marketing manager." }, "location": { "type": "string", "minLength": 1, "description": "City, country or remote, for example London." }, "max_results": { "type": "integer", "default": 25, "maximum": 100, "minimum": 1, "description": "Most jobs to return, for example 25; maximum 100." }, "posted_within": { "enum": [ "last_24_hours", "last_week", "last_month", "any" ], "type": "string", "default": "any", "description": "When posted, for example last_week; defaults to any." }, "experience_level": { "enum": [ "internship", "entry", "associate", "mid_senior", "director", "executive", "any" ], "type": "string", "default": "any", "description": "Listed seniority level, for example mid_senior; defaults to any." } }}Output schema
{ "type": "object", "required": [ "jobs" ], "properties": { "jobs": { "type": "array", "items": { "type": "object", "properties": { "title": { "type": "string" }, "salary": { "type": [ "string", "null" ] }, "company": { "type": [ "string", "null" ] }, "job_link": { "type": "string" }, "location": { "type": [ "string", "null" ] }, "posted_date": { "type": [ "string", "null" ] }, "workplace_type": { "enum": [ "Remote", "Hybrid", "On-site", null ], "type": [ "string", "null" ] }, "number_of_applicants": { "type": [ "string", "null" ] } } } } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
linkedin.com/search_jobs- Returns
- title, company, location, workplace type, posted date, salary, applicants, job 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 linkedin.com/search_jobs with the inputs above.
Ask your agent
- Find remote data engineer jobs posted in the last 24 hours on LinkedIn
- I need senior product designer openings in Berlin, mid-senior level, full time
- Show me internship listings for software developer in Toronto from last month
- Look up contract accountant roles at Deloitte in Chicago
- Search for part-time nurse positions in Manchester posted last week, entry level
See more
All LinkedIn methodsLists open LinkedIn jobs posted by a named company, with optional location and result limit. Workplace type is returned only when LinkedIn displays it.
linkedin.com/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 a company's recent public LinkedIn posts in page order, from its name or LinkedIn company page link: post text, approximate date, reactions, comments, image and link. Only updates shown on the signed-out company page are available.
linkedin.com/list_company_postsGets the public overview of a LinkedIn company from its name or company page link. Details not shown publicly are null.
linkedin.com/get_company_profileSearches open Indeed jobs by keywords, location, country, posting age and job type, returning public first-page results in displayed order.
indeed.com/search_jobsFinds open ZipRecruiter jobs by keywords and location, with distance and posting-date filters. Returns up to 100 public listings in search order; details that are not shown are null.
ziprecruiter.com/search_jobsLists open jobs on a company's Lever job board, with optional team, location and workplace filters.
jobs.lever.co/list_company_jobsFinds current SEEK jobs in Australia by keywords, with optional location, work type and posting window. Results follow SEEK search order; some promoted listings may appear outside the selected posting window.
seek.com.au/search_jobs