SEEK Jobs Scraper: Australian Job Listings in Python
How to pull SEEK.com.au job listings by keyword, location, work type and salary band in Python: title, company, salary range, apply link, no login or API key.
The actor referenced in this article. Pay only for results delivered.
SEEK is the dominant job board in Australia and New Zealand, which makes it the default dataset for anything involving the Australian labour market: salary benchmarking, hiring demand by region, competitor headcount signals, or building a niche job aggregator.
There is no open SEEK API for reading listings. The partner APIs exist for posting jobs and for approved ATS integrations, not for pulling the board. So the practical options are a browser automation script you maintain yourself, or a scraper that already handles pagination and deduplication.
Try it live: SEEK Jobs Scraper: Australia Job Listings API. Pay only for results delivered, no result no charge.
The SEEK Jobs Scraper queries SEEK’s own search backend rather than rendering pages, so it returns structured JSON in seconds. A recent run pulled 41 listings in under eight seconds.
What you get per listing
| Field | Notes |
|---|---|
title | Job title as advertised |
company | Advertiser name, absent on confidential listings |
location | Suburb and state as SEEK classifies it |
salary_min, salary_max | Parsed from the advertised range where present |
salary_text | The raw advertised string, so you can audit the parse |
work_type | Full time, part time, contract, casual |
listed_at | Publication date |
apply_url | Direct link to the listing |
keyword, where | The query that produced the row, useful when you run many |
Filtering
The four filters map onto SEEK’s own search parameters:
keywords: an array, so one run can cover several roleswhere: a location string such asSydney NSW,Melbourne VICorAll AustraliaworkType: restrict to full time, contract and so onsalaryMinandsalaryMax: an advertised salary band
Passing several keywords in one run is cheaper than several runs, and results are deduplicated on SEEK’s own job id across the whole run, so a listing matching two of your keywords is delivered and charged once.
A salary benchmarking example
from apify_client import ApifyClient
from statistics import median
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("themineworks/seek-jobs-scraper").call(run_input={
"keywords": ["data engineer", "analytics engineer"],
"where": "Sydney NSW",
"workType": "full time",
"maxJobsPerKeyword": 200,
})
mids = []
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
if job.get("_type") == "summary":
continue
lo, hi = job.get("salary_min"), job.get("salary_max")
if lo and hi:
mids.append((lo + hi) / 2)
print(f"{len(mids)} listings with advertised salary")
print(f"median advertised midpoint: ${median(mids):,.0f}")
Only a subset of listings advertise a salary, so report the count alongside the median. A median drawn from eleven listings is a very different claim from one drawn from three hundred.
Where it stops
The actor stops a keyword after two consecutive pages with nothing new, and caps at 100 pages. That matters because SEEK’s search does not usefully paginate into the deep tail: past a few thousand results the same listings recycle. Stopping early is what keeps a run fast and keeps you from paying for duplicates.
Pricing
Pay per job delivered, from $0.70 per 1,000 on higher Apify plans and $0.85 per 1,000 on the free plan. Duplicates are filtered before billing, and a keyword that returns nothing is never charged.
Use it from an AI agent
https://mcp.apify.com/?tools=themineworks/seek-jobs-scraper
An agent can then answer questions like “what does a mid level data engineer in Melbourne advertise at” directly.
Related
- LinkedIn Jobs Scraper for the same roles on LinkedIn
- Indeed Scraper for broader coverage outside SEEK’s markets
- ATS Jobs Scraper to read employer career pages directly
Explore the scraper referenced in this article: inputs, outputs, and pricing, then run it on Apify.
Frequently asked questions
Does SEEK have a public API? +
Not for general developers. SEEK offers partner APIs for job posting and for approved ATS integrations, but there is no open endpoint for reading listings, so anyone doing labour market analysis on SEEK data is working from scraped listings.
Does it return salary figures? +
Where the employer published them. A large share of Australian listings advertise a salary range, and those are parsed into structured fields. Listings without a stated salary return the other fields and leave salary absent rather than inventing a number.
Can I scrape New Zealand listings too? +
Yes. SEEK covers Australia and New Zealand, and the location field accepts either, for example Auckland or All New Zealand.
GitHub Repo Intelligence: Vet Any Dependency Before You Add It
Pull stars, forks, contributors, commit recency, latest release and full README for any public GitHub repo in one call. No token required, MCP-ready for agents doing dependency checks.
Bilibili Scraper: Video, Creator and Search Data in Python
Pull Bilibili videos by keyword, URL or creator ID: titles, view and like counts, duration, author stats. Plain HTTP, no cookies, no login required.
Weibo Scraper: Posts and Profiles by User ID
Pull Weibo posts and profile data by numeric user ID: text, repost and like counts, images, follower stats. Why a China residential IP is mandatory, not optional.