The Mine Works
← All posts
tutorial August 16, 2026 · 3 min read

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.

Try the scraper

The actor referenced in this article. Pay only for results delivered.

View the scraper →

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

FieldNotes
titleJob title as advertised
companyAdvertiser name, absent on confidential listings
locationSuburb and state as SEEK classifies it
salary_min, salary_maxParsed from the advertised range where present
salary_textThe raw advertised string, so you can audit the parse
work_typeFull time, part time, contract, casual
listed_atPublication date
apply_urlDirect link to the listing
keyword, whereThe 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 roles
  • where: a location string such as Sydney NSW, Melbourne VIC or All Australia
  • workType: restrict to full time, contract and so on
  • salaryMin and salaryMax: 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 Actor

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.