SEEK API: Search jobs
Finds 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.
Unofficial. Not affiliated with or endorsed by SEEK.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Keywords, required
keywords Job title or search words, such as bookkeeper.
registered nurse
- Location optional
location City, suburb or state, such as Melbourne VIC. Leave blank for all Australia.
(default)
- Work Type optional
work_type Employment type, such as part_time.
full_time
One of
full_time,part_time,contract,casual,any. Defaultany.- Max Results optional
max_results Maximum number of jobs to return, such as 20 (up to 100).
45
Whole number from 1 to 100. Default
20.- Posted Within optional
posted_within How recently jobs were posted, such as last_7_days.
last_3_days
One of
last_3_days,last_7_days,last_14_days,last_30_days,any. Defaultany.
Input as JSON
{ "keywords": "registered nurse", "work_type": "full_time", "max_results": 45, "posted_within": "last_3_days"}Output
{ "jobs": [ { "title": "Registered Nurse - Bauhinia Health – Katherine", "salary": null, "company": "Rural Workforce Agency NT", "job_link": "https://www.seek.com.au/job/94932434" , "location": "Katherine, Katherine & Northern Australia NT", "work_type": "Full time", "posted_date": "2026-09-29", "short_description": "Make a meaningful impact as a GP Practice Nurse in Katherine. Deliver exceptional care, grow professionally and thrive in a supportive team." }, { "title": "Registered Nurse – Home Care", "salary": "$90,000 – $105,000 per year", "company": "Right at Home", "job_link": "https://www.seek.com.au/job/94914845" , "location": "Five Dock, Sydney NSW", "work_type": "Full time", "posted_date": "2026-09-28", "short_description": "Registered Nurse providing clinical care and support to clients in their homes." }, { "title": "Registered Nurse", "salary": "$35 – $50 per hour", "company": "myCheck Health Medical and Skin Clinic", "job_link": "https://www.seek.com.au/job/94840671" , "location": "Woy Woy, Gosford & Central Coast NSW", "work_type": "Full time", "posted_date": "2026-09-28", "short_description": "Our purpose is to serve our patients and clients in order to achieve the vision and purpose of the Central Coast Health." } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"seek.com.au/search_jobs","input":{"keywords":"registered nurse","work_type":"full_time","max_results":45,"posted_within":"last_3_days"}}' # 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": "seek.com.au/search_jobs" , "input": { "keywords": "registered nurse", "work_type": "full_time", "max_results": 45, "posted_within": "last_3_days" }})# 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": "seek.com.au/search_jobs" , "input": { "keywords": "registered nurse", "work_type": "full_time", "max_results": 45, "posted_within": "last_3_days" } }), 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 seek.com.au/search_jobs# with {"keywords":"registered nurse","work_type":"full_time","max_results":45,"posted_within":"last_3_days"}"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" ], "properties": { "keywords": { "type": "string", "minLength": 1, "description": "Job title or search words, such as bookkeeper." }, "location": { "type": "string", "default": "", "description": "City, suburb or state, such as Melbourne VIC. Leave blank for all Australia." }, "work_type": { "enum": [ "full_time", "part_time", "contract", "casual", "any" ], "type": "string", "default": "any", "description": "Employment type, such as part_time." }, "max_results": { "type": "integer", "default": 20, "maximum": 100, "minimum": 1, "description": "Maximum number of jobs to return, such as 20 (up to 100)." }, "posted_within": { "enum": [ "last_3_days", "last_7_days", "last_14_days", "last_30_days", "any" ], "type": "string", "default": "any", "description": "How recently jobs were posted, such as last_7_days." } }}Output schema
{ "type": "object", "required": [ "jobs" ], "properties": { "jobs": { "type": "array", "items": { "type": "object", "required": [ "title", "company", "location", "salary", "work_type", "posted_date", "short_description", "job_link" ], "properties": { "title": { "type": "string" }, "salary": { "type": [ "string", "null" ], "description": "Salary shown on the listing, or null when none is displayed." }, "company": { "type": [ "string", "null" ] }, "job_link": { "type": "string", "format": "uri" }, "location": { "type": [ "string", "null" ] }, "work_type": { "type": [ "string", "null" ] }, "posted_date": { "type": [ "string", "null" ], "format": "date" }, "short_description": { "type": [ "string", "null" ] } }, "additionalProperties": false }, "description": "Matching open SEEK jobs in search order." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
seek.com.au/search_jobs- Returns
- title, company, location, salary, work type, posted date, short description, 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 seek.com.au/search_jobs with the inputs above.
Ask your agent
- Find part-time bookkeeper jobs in Melbourne VIC posted in the last 7 days on SEEK
- Any casual barista roles around Fremantle WA? Show me up to 15 with pay and the link to apply.
- I'm a contract React developer — pull the latest 50 contract frontend developer listings across Australia from the past 3 days
- Search seek.com.au for full-time registered nurse positions in Brisbane QLD listed within the last 14 days
- What warehouse forklift operator jobs have come up in Western Sydney this month? Include company, salary and posted date.
See more
Finds 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_jobsSearches open Indeed jobs by keywords, location, country, posting age and job type, returning public first-page results in displayed order.
indeed.com/search_jobsSearches public LinkedIn job listings by keywords and location, with optional date, seniority, employment type and company filters.
linkedin.com/search_jobsFinds open public Naukri job listings by keywords, with optional city and experience filters, in Naukri's search order. Undisclosed salaries have no numeric range.
naukri.com/search_jobsLists a company's public Workday jobs, optionally narrowed by keywords and location, newest first with exact posting dates among up to 500 checked postings. Workday may cap the reported total at 2,000; location totals reflect checked postings.
myworkdayjobs.com/list_company_jobsSearches Remote OK jobs by role or skill. Results can be filtered by listed region and by minimum annual USD salary.
remoteok.com/search_jobsSearches USAJOBS federal jobs by keywords, location, salary threshold and applicant group, in website relevance order. Salary ranges may start below the threshold; annual pay or remote status is null when the announcement does not state it.
usajobs.gov/search_jobsLists open jobs on a company's Lever job board, with optional team, location and workplace filters.
jobs.lever.co/list_company_jobs