Seek Job Scraper - Australia & NZ Job Listings and Salaries
Pricing
from $2.00 / 1,000 actor run starteds
Seek Job Scraper - Australia & NZ Job Listings and Salaries
Search Seek in Australia or New Zealand and get every job listing as a row: title, company, location, category, work type and arrangement, posting date, and the pay text with real numbers parsed out only when the advertiser actually stated one.
Seek Job Scraper - Australia & New Zealand
This Seek job scraper searches seek.com.au or seek.co.nz and returns every job listing as a structured row: title, company, location, category, work type, work arrangement, posting date, and the pay. Use it for salary benchmarking, recruitment intelligence and job market monitoring in Australia and New Zealand.
Type a keyword, a location, or both. No API key, no login, no Seek account.
How to use the Seek job scraper
- Enter Keywords the way you would type them into Seek's search box, for
example
data scientistorregistered nurse. - Enter a Location in Seek's own format, for example
Sydney NSW,Melbourne VICorAuckland, or leave it empty to search the whole country. - Pick the Country: Australia or New Zealand.
- Set Maximum jobs and start the run. Results land in the dataset, ready to export as JSON, CSV or Excel, or to read through the Apify API.
Input
| field | type | default | what it does |
|---|---|---|---|
keywords | string | empty | What to search for, exactly as you would type it into Seek. Leave empty to list everything in a location. |
where | string | empty | Where to search, in Seek's format (Sydney NSW, Melbourne VIC, Auckland). Leave empty for the whole country. |
country | au or nz | au | Which Seek site to search. |
max_jobs | integer, 1–1000 | 96 | Stop after this many jobs. Seek returns 32 per page, so this rounds up to whole pages and is also the cost ceiling for the run. |
An example input that collects the first 40 nursing jobs in Auckland:
{"keywords": "registered nurse","where": "Auckland","country": "nz","max_jobs": 40}
Output: what the Seek job scraper returns per listing
The job — title, url, job_id, teaser (the summary line on the card)
and bullet_points (the selling points the advertiser chose).
Who is hiring — company, company_url where Seek has a profile, and
advertiser_id. Recruiters and direct employers both appear, and the advertiser
id is what tells you the same agency is behind fifteen of your rows.
Where — location, all_locations when a listing names several, and
region for the state or territory it sits in.
What kind of job — classification and sub_classification from Seek's own
taxonomy, work_types (full time, contract, casual) and work_arrangements
(on-site, hybrid, remote) where the advertiser stated one.
When — listing_date as a UTC timestamp and listing_age as Seek phrases
it ("1d ago").
Placement — is_sponsored, is_featured, logo_url, and position in the
run, following result order.
Pay — salary_label, salary_min, salary_max, salary_period and
salary_is_stated. See below; this is the part worth reading.
Example row
This is a real row from the input above:
{"job_id": "94930768","title": "General Practice Nurse / Registered Nurse","url": "https://www.seek.co.nz/job/94930768","company": "CityMed","company_url": null,"advertiser_id": "60030505","location": "Auckland CBD, Auckland","all_locations": ["Auckland CBD, Auckland"],"region": "All Auckland","classification": "Healthcare & Medical","sub_classification": "Nursing - Community, Maternal & Child Health","work_types": ["Full time"],"work_arrangements": ["On-site"],"teaser": "We’re looking for a fantastic full-time Practice Nurse / Registered Nurse to join our friendly, supportive team of doctors, nurses and admin staff.","bullet_points": null,"listing_date": "2026-09-29T00:14:42.000Z","listing_age": "5d ago","is_sponsored": false,"is_featured": false,"logo_url": null,"position": 4,"salary_label": "$38 – $45 per hour","salary_min": 38,"salary_max": 45,"salary_period": "hour","salary_is_stated": true}
Run summary
Next to the dataset, every run stores a summary record in the key-value
store. For the same Auckland search it read:
{"country": "nz","keywords": "registered nurse","where": "Auckland","jobsReturned": 40,"pagesRead": 2,"totalMatchingOnSeek": "273","withStatedSalary": 17,"withSalaryLabelButNoAmount": 1,"sponsored": 4,"uniqueCompanies": 32,"errorCount": 0}
Pages that could not be read are listed in an errors record, with a code and a
short message.
About the salary, which is the field everyone gets wrong
Seek does not publish a salary number. It publishes a line of text the advertiser typed, and the advertiser can type anything. From a single page of results:
$150,000 – $160,000 per year a real range$90,000 – $95,000 + Super + Bonus a range plus extrasUp to $95,170 depending on qualifications a ceiling, not a range$120 - $140 - inc Super - Weekly Pay Options an hourly rate, paid weeklySuited to detail-oriented engineers with strong QA not a salary at allAttractive salary + bonus + benefits not a salary at allmost of them, blank
Treating that field as a number is how a "roles over $100k" filter quietly ends up including jobs whose pay is unknown and excluding jobs that pay well. So this Actor returns both:
salary_label— the text exactly as written, always, whatever it sayssalary_min,salary_max,salary_period— filled only when the text genuinely reads as moneysalary_is_stated— the flag that lets you tell "no pay stated" apart from "the label was marketing copy"
salary_max stays empty when the advertiser gave a single figure, because
repeating it as a maximum invents a range nobody offered. Up to $95,170
becomes a maximum with no minimum, because it promises no floor.
Pay periods, and one specific trap
A results page mixes annual salaries and hourly contractor rates freely, and
45 sitting next to 150000 in one column is worse than an empty column. Every
parsed amount carries salary_period, so you can compare like with like.
The trap is that a period word in the text often describes how often you are
paid, not what the rate is in. $120 - $140 - inc Super - Weekly Pay Options
is an hourly rate offering weekly payment; read literally it says someone earns
$140 a week. When the wording and the amount disagree, the amount decides, so
that listing comes back as hourly.
Roughly a third of listings state a real amount. The run summary reports
withStatedSalary and withSalaryLabelButNoAmount so you always know how much
of a run carried one rather than assuming.
Sponsored placement is marked, so position is not a ranking
Employers pay for placement on Seek, and a sponsored ad sits above organic
results. A row's position therefore reflects what Seek chose to show, not
relevance or recency. is_sponsored lets you drop the paid slots, or study them
on purpose: which agencies are paying to be seen is a useful signal in itself.
Australia and New Zealand are separate boards
seek.com.au and seek.co.nz carry different listings, and the Country
input picks between them. A search of one never returns the other's jobs, so a
national picture means two runs.
Filters and scale
Seek returns 32 listings per page. Maximum jobs rounds up to whole pages and is the ceiling on both time and cost: 96 jobs is three pages, and a run can go up to 1,000 jobs.
The summary also reports totalMatchingOnSeek, the count Seek itself claims for
your search. When that reads 22,482 and you asked for 96, you know exactly how
much of the board you are looking at. That number is Seek's, reported as given.
Use cases for Seek job data
Salary benchmarking. The subset of listings that state a real amount is a
genuine sample of advertised pay by role, location and seniority. salary_period
keeps hourly contract work from contaminating an annual average, and
salary_is_stated keeps blank labels from being counted as zero.
Recruitment intelligence. advertiser_id and company across repeated runs
show who is hiring, how fast, and which agencies dominate a category. New
listings appearing under a competitor's name is a hiring-velocity series.
Market monitoring. Run a search on a schedule and keep the rows.
listing_date and the disappearance of an id tell you how long a role stayed
open, which is a fair proxy for how hard it was to fill.
Job aggregation. One search, one table, one shape, with the pay already separated into text and numbers so you do not have to write that parser.
Seek job scraper compared with the alternatives
The official SEEK API. SEEK's developer platform is built for recruitment software partners that post jobs and receive applications on behalf of employers. It is not a public search feed: you need a partner agreement, and it does not hand you the listings of the whole board.
A browser extension or copy-paste. Fine for one page. It does not run on a schedule, does not separate the pay into numbers, and stops being practical past a few dozen jobs.
Writing your own scraper. Possible, and then you own the pagination, the retries, the location formats of two countries and the salary parser described above, and you keep owning them when Seek changes its pages.
Other Seek actors. Several exist. What sets this one apart: the salary is part of every row at no extra charge rather than a separately billed event, the raw text is always kept next to the parsed numbers, and the pay period is corrected when the wording describes the pay cycle rather than the rate.
Pricing
Pay per event, with no monthly fee:
| event | price |
|---|---|
| Actor run started | $0.002 per run |
| Job listing returned | $0.0015 per job |
Some examples:
- 40 nursing jobs in Auckland: $0.002 + 40 × $0.0015 = $0.062
- the default of 96 jobs: $0.002 + 96 × $0.0015 = $0.146
- 320 accountant jobs in Melbourne: $0.002 + 320 × $0.0015 = $0.482
You only pay for jobs that are actually delivered. A search that finds nothing costs only the run start. Users on Apify's free plan get up to 10 jobs per run.
Notes
Only currently open listings appear. A filled or withdrawn role stops being published, which is what makes the run-on-a-schedule pattern above work.
A search that matches nothing is reported as exactly that, with the search spelled out, rather than as an empty result you would have to interpret. Occasionally a page needs a second attempt before it comes through; that is handled inside the run, and only a page that never arrives is reported.
FAQ
Is there an official Seek API for job listings? SEEK offers an API to recruitment software partners for posting jobs and handling applications. It is not open for searching the board. This Actor gives you the public search results as data instead.
Does the scraper return the salary for every job?
It returns salary_label for every job that has one, exactly as written. The
numbers in salary_min and salary_max are filled only when the text really
states an amount, which is roughly a third of listings. salary_is_stated tells
you which is which.
Can I search New Zealand and Australia in one run?
No. They are separate job boards with separate listings, so you start one run
with country set to au and one with nz.
Can I scrape every job in a city without a keyword? Yes. Leave Keywords empty and fill in Location; the run lists all jobs there, up to Maximum jobs.
What happens when my search finds nothing?
The run still succeeds, the dataset stays empty, and the errors record says
which search found nothing. You pay only the run start.
Does it return the full job description?
No. It returns what Seek shows in the search results: the title, teaser, selling
points, company, location, classification, work type and pay. The url of each
row opens the full ad.