SEEK APIseek.com.au ↗
Search and retrieve job listings from SEEK Australia. Get job titles, companies, locations, salaries, work types, and full descriptions via 2 endpoints.
What is the SEEK API?
The SEEK Australia API gives developers programmatic access to job listings on seek.com.au through 2 endpoints. Use search_jobs to query by keyword and optional location, returning paginated result sets with job summaries, or call get_job_details with a numeric job ID to retrieve the full listing — including salary, work type, classification, HTML description, and live status.
curl -X GET 'https://api.parse.bot/scraper/ed567ab8-0364-4d7a-9121-f4de258d4b32/search_jobs?page=1&keywords=software+engineer&location=Sydney&page_size=5&salary_min=100000&salary_type=annual' \ -H 'X-API-Key: $PARSE_API_KEY'
Full-text search over SEEK Australia job listings. `keywords` matches job title and description; optional `location` filters by city or region. Optional salary filters narrow results to listings whose advertised pay falls within a range: `salary_min` and/or `salary_max` bound the range, and `salary_type` says whether those bounds are yearly or hourly amounts (yearly when omitted). Either bound may be given alone (a minimum alone means 'at least this much'). Salary filtering is performed by SEEK on advertised pay; listings without a stated salary may still appear. Returns paginated results ordered by relevance with featured listings first; one request per call, paged with `page` and `page_size` (`total_count` is the site's total for the query, and pages continue while page * page_size < total_count). Each result includes a summary (title, company, location, salary teaser); full descriptions require a separate get_job_details call per job. Invalid `salary_type` or non-numeric salary bounds return stale_input.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (1-indexed). |
| keywordsrequired | string | Search keywords (e.g. 'software engineer', 'project manager', 'data analyst'). |
| location | string | Location filter (e.g. 'Sydney', 'Melbourne'). Omitting returns jobs from all locations. |
| page_size | integer | Results per page; accepted values are 5, 10 and 20 (max 20). |
| salary_max | integer | Upper bound of advertised salary, as a whole number in Australian dollars in the units given by salary_type. Omit for no upper bound. |
| salary_min | integer | Lower bound of advertised salary, as a whole number in Australian dollars in the units given by salary_type (e.g. 250000 for a yearly minimum of $250,000). Omit for no lower bound. |
| salary_type | string | Pay period that salary_min and salary_max are expressed in. Only used when at least one salary bound is given. |
{
"type": "object",
"fields": {
"jobs": "array of job listing summary objects (id, title, company, location, salary text, teaser, work_types, listed_date, classifications, is_featured)",
"page": "integer current page number",
"keywords": "string search keywords used",
"page_size": "integer results per page",
"salary_max": "integer salary upper bound applied, or null when none was given",
"salary_min": "integer salary lower bound applied, or null when no salary filter was given",
"salary_type": "string pay period ('annual' or 'hourly') the salary bounds apply to, or null when no salary filter was given",
"total_count": "integer total number of matching jobs on the site for this query"
},
"sample": {
"data": {
"jobs": [
{
"id": "94319580",
"title": "General Counsel & Company Secretary",
"salary": "$280,000 – $320,000 per year",
"teaser": "Rare opportunity to lead the legal and governance function at an iconic Australian business.",
"company": "Dymocks Education",
"location": "Sydney NSW",
"work_types": [
"Part time"
],
"is_featured": false,
"listed_date": "11d ago",
"classifications": [
{
"classification": "Legal",
"sub_classification": "Generalists - In-house"
}
]
}
],
"page": 1,
"keywords": "paralegal",
"page_size": 5,
"salary_max": null,
"salary_min": 250000,
"salary_type": "annual",
"total_count": 13
},
"status": "success"
}
}About the SEEK API
Searching for Jobs
The search_jobs endpoint accepts a required keywords parameter (e.g. 'data analyst', 'nurse') and an optional location string such as 'Sydney' or 'Melbourne'. Results are paginated using page (1-indexed) and page_size (up to 20 per page). The response includes total_count so you can calculate how many pages exist, plus an array of job summary objects covering title, company, location, and listing ID. Featured listings appear first in relevance-ordered results.
Fetching Full Job Details
Pass the numeric job_id from a search_jobs result into get_job_details to retrieve the complete listing. The response exposes title, company, location, salary (empty string when the employer hasn't disclosed it), work_types (e.g. 'Full time', 'Contract'), listed_at as an ISO 8601 datetime, abstract, and the full job description. The is_expired boolean and status field ('Active' or 'Expired') indicate whether a listing is still open. The endpoint returns a stale_input signal with kind input_not_found when the job ID no longer exists.
Coverage and Scope
Coverage is limited to seek.com.au — SEEK's Australian market. The API returns publicly visible listing data: title, employer, location, salary range (where disclosed), work type, and classification. Data that requires a candidate account — saved jobs, applications, or recruiter contact details — is not exposed.
The SEEK API is a managed, monitored endpoint for seek.com.au — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when seek.com.au changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official seek.com.au API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate software engineering jobs in Melbourne filtered by keyword and paginate through total_count results
- Monitor new listings in a specific trade category by polling search_jobs daily and comparing listed_at timestamps
- Build a salary benchmarking tool using the salary field across hundreds of job_details responses for a given keyword
- Track whether specific job IDs are still active using the is_expired boolean from get_job_details
- Populate a job board focused on Australian healthcare or finance roles by filtering search results by keyword and location
- Extract work_types distribution across a keyword search to understand full-time vs. contract demand in a field
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.