# SEEK API — Australia jobs scraper: search SEEK (seek.com.au) job postings by keyword, location, salary, work-type, date and remote/hybrid filters; get full job detail (title, company, salary, location, description, work arrangement, posted/expiry dates, apply link, employer profile); list all jobs at a company; and browse jobs by classification/category — from Australia's #1 job board, no login or API key required

> Search SEEK (seek.com.au) job postings by keyword with optional location, salary range, work-type, work-arrangement (remote/hybrid/on-site), date-posted, classification and sort filters. Returns up to 32 jobs per page with title, company, salary, location, dates and a teaser.
> ReefAPI engine `seek` · 4 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/seek/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed or blocked calls are free.
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http, `Authorization: Bearer <key>`) and your assistant can call these actions directly.

## Endpoints

### POST /seek/v1/search — 1 credit
Search SEEK (seek.com.au) job postings by keyword with optional location, salary range, work-type, work-arrangement (remote/hybrid/on-site), date-posted, classification and sort filters. Returns up to 32 jobs per page with title, company, salary, location, dates and a teaser.

**Parameters:**
- `keywords` (string, required) — What job to search for — a job title, skill or keyword ('software developer', 'registered nurse', 'accountant').
- `location` (string, optional) — Australian/NZ location to search in — a city, suburb or city+state ('Sydney NSW', 'Melbourne VIC', 'Brisbane QLD', 'Perth WA'). Free text; the state suffix sharpens the match.
- `job_type` (enum, optional) — Restrict to one work type. [one of: full_time, part_time, contract, casual]
- `work_arrangement` (enum, optional) — Filter by working arrangement. [one of: onsite, remote, hybrid]
- `salary_from` (integer, optional) — Minimum annual salary in AUD (e.g. 100000).
- `salary_to` (integer, optional) — Maximum annual salary in AUD (e.g. 150000).
- `date_posted` (enum, optional) — Only jobs listed within this window. [one of: today, last3days, lastweek, lasttwoweeks, lastmonth]
- `classification` (string, optional) — Narrow to a SEEK classification — its numeric id (e.g. 6281 = Information & Communication Technology) from a job's classifications[].classification_id.
- `subclassification` (string, optional) — Narrow to a SEEK sub-classification numeric id (e.g. 6287 = Developers/Programmers).
- `sort` (enum, optional, default "relevance") — Result ordering. [one of: relevance, date]
- `page` (integer, optional, default 1) — Result page (32 jobs per page). Page until meta.pagination.total_pages.

**Returns:** jobs[]{job_id, title, url, company, advertiser_id, location, locations[], salary_label, currency, work_types[], work_arrangement, classifications[], bullet_points[], teaser, posted_date, posted_relative, is_featured, logo_url, company_url, role_id} + total + meta.pagination{page, total_pages, has_more, next_page}

**Example request body:**
```json
{
  "keywords": "developer",
  "location": "Sydney NSW"
}
```

### POST /seek/v1/detail — 1 credit
Full posting for one SEEK job by job_id (or a SEEK job URL): title, company, salary, location breakdown (suburb/state/postcode/country), full HTML + plain-text description, work types, work arrangement, classifications, bullet points, posted & expiry dates, apply/share link, and the employer's company profile (industry, size, website, rating, review count).

**Parameters:**
- `job_id` (string, optional) — SEEK job ID — the number in the job URL (seek.com.au/job/<job_id>) or `job_id` from search.
- `url` (string, optional) — Alternatively a full SEEK job URL.

**Returns:** job{job_id, title, url, share_link, description_text, description_html, abstract, company, advertiser_id, advertiser_verified, company_url, salary_label, currency, location, country, state, suburb, post_code, work_types[], work_arrangements[], classifications[], bullet_points[], posted_date, expires_at, is_expired, status, logo_url, company_profile{name, industry, size, website, rating, review_count, url}}

### POST /seek/v1/company-jobs — 1 credit
All public job postings at a specific company on SEEK. Pass the company's numeric advertiser id (the `advertiser_id` field on any search/detail result), its SEEK company slug, a full SEEK company URL, or its name; optionally narrow with the same keyword/location/salary/work-type/date filters as search.

**Parameters:**
- `company` (string, required) — The employer — its SEEK numeric advertiser id (best; the `advertiser_id` on any search result), a SEEK company slug, a full SEEK company URL, or the company name (resolved to a slug automatically).
- `keywords` (string, optional) — Optional: also filter the company's jobs by keyword.
- `location` (string, optional) — Australian/NZ location to search in — a city, suburb or city+state ('Sydney NSW', 'Melbourne VIC', 'Brisbane QLD', 'Perth WA'). Free text; the state suffix sharpens the match.
- `job_type` (enum, optional) — Restrict to one work type. [one of: full_time, part_time, contract, casual]
- `work_arrangement` (enum, optional) — Filter by working arrangement. [one of: onsite, remote, hybrid]
- `salary_from` (integer, optional) — Minimum annual salary in AUD (e.g. 100000).
- `salary_to` (integer, optional) — Maximum annual salary in AUD (e.g. 150000).
- `date_posted` (enum, optional) — Only jobs listed within this window. [one of: today, last3days, lastweek, lasttwoweeks, lastmonth]
- `sort` (enum, optional, default "relevance") — Result ordering. [one of: relevance, date]
- `page` (integer, optional, default 1) — Result page (32 jobs per page). Page until meta.pagination.total_pages.

**Returns:** jobs[]{job_id, title, url, company, advertiser_id, location, locations[], salary_label, currency, work_types[], work_arrangement, classifications[], bullet_points[], teaser, posted_date, posted_relative, is_featured, logo_url, company_url, role_id} + total + meta.pagination{page, total_pages, has_more, next_page}

### POST /seek/v1/classification — 1 credit
Browse SEEK jobs by classification/category — either a SEEK classification numeric id (e.g. 6281 = Information & Communication Technology) or a category slug ('information-communication-technology', 'healthcare-medical', 'trades-services', 'accounting', 'sales', 'education-training'). Optionally scope by location and the same salary/work-type/date filters as search.

**Parameters:**
- `classification` (string, required) — SEEK classification — numeric id (e.g. '6281' = Information & Communication Technology, '1203' = Healthcare & Medical) or a category slug ('information-communication-technology', 'healthcare-medical', 'trades-services', 'accounting').
- `location` (string, optional) — Australian/NZ location to search in — a city, suburb or city+state ('Sydney NSW', 'Melbourne VIC', 'Brisbane QLD', 'Perth WA'). Free text; the state suffix sharpens the match.
- `job_type` (enum, optional) — Restrict to one work type. [one of: full_time, part_time, contract, casual]
- `work_arrangement` (enum, optional) — Filter by working arrangement. [one of: onsite, remote, hybrid]
- `salary_from` (integer, optional) — Minimum annual salary in AUD (e.g. 100000).
- `salary_to` (integer, optional) — Maximum annual salary in AUD (e.g. 150000).
- `date_posted` (enum, optional) — Only jobs listed within this window. [one of: today, last3days, lastweek, lasttwoweeks, lastmonth]
- `sort` (enum, optional, default "relevance") — Result ordering. [one of: relevance, date]
- `page` (integer, optional, default 1) — Result page (32 jobs per page). Page until meta.pagination.total_pages.

**Returns:** jobs[]{job_id, title, url, company, advertiser_id, location, locations[], salary_label, currency, work_types[], work_arrangement, classifications[], bullet_points[], teaser, posted_date, posted_relative, is_featured, logo_url, company_url, role_id} + total + meta.pagination{page, total_pages, has_more, next_page}

**Example request body:**
```json
{
  "classification": "6281"
}
```

## More
- Try it live, no code: https://reefapi.com/playground?engine=seek
- Human docs page: https://reefapi.com/docs/seek
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
