SEEK Job Scraper - Australia & NZ Jobs, Salary & Postcode avatar

SEEK Job Scraper - Australia & NZ Jobs, Salary & Postcode

Pricing

$1.20 / 1,000 job listings

Go to Apify Store
SEEK Job Scraper - Australia & NZ Jobs, Salary & Postcode

SEEK Job Scraper - Australia & NZ Jobs, Salary & Postcode

Scrape SEEK job ads across Australia and New Zealand: full description, parsed salary min and max, suburb, postcode, state, work type, remote policy, posting date and listing expiry. No login. $1.20 per 1,000 ads, everything included.

Pricing

$1.20 / 1,000 job listings

Rating

0.0

(0)

Developer

Crikit

Crikit

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

What is SEEK Job Scraper?

SEEK Job Scraper lets you extract every public job ad from SEEK in Australia and New Zealand, helping you build recruitment lead lists, benchmark salaries by suburb and postcode, and track hiring demand across the whole ANZ market without touching the SEEK UI.

  • Get the full job ad, not a teaser: every row carries the complete description as HTML and as clean plain text, averaging just under 3,000 characters. Measured on 180 ads: 100% arrived with a full description.
  • Filter and group by real geography: SEEK shows you a location label. This actor returns the suburb, the SEEK area, the Australian state code and the postcode as separate fields, so you can group by postcode or state without writing a parser.
  • Get salaries as numbers: the advertised salary reaches you as salaryMin, salaryMax, salaryPeriod and salaryCurrency, parsed out of the 400-plus different ways advertisers type it. No extra event, no salary surcharge.
  • Know when an ad dies: every row carries the listing's own expiresAt date plus isExpired, so a job board or a tracker can retire ads on the real date instead of guessing.
  • Spot external applications: isExternalApplication tells you when applying leaves SEEK for the employer's own ATS, which is exactly the signal recruiters and job aggregators need.
  • Australia and New Zealand in one actor: seek.com.au and seek.co.nz, switched with one field, priced the same.

SEEK has no public jobs API, and its own search interface stops serving results after the first 500 per query no matter what the result counter says. This actor pages to that ceiling, tells you in the log when a search hit it, and shows you exactly how to slice the search to get past it.

What data does SEEK Job Scraper extract?

  • ๐Ÿงพ Job title, SEEK job id and the canonical job URL (title, jobId, jobUrl)
  • ๐Ÿข Company name, advertiser id and whether SEEK has verified the advertiser (companyName, advertiserId, isAdvertiserVerified)
  • ๐Ÿ–ผ Company logo image URL (companyLogoUrl)
  • ๐Ÿ“„ Full job description as HTML and as plain text (description, descriptionText)
  • โœจ The advertiser's own highlight bullets (bulletPoints)
  • ๐Ÿ’ฌ The short teaser SEEK shows in search results (teaser)
  • ๐Ÿ’ฒ Advertised salary exactly as written, plus the parsed band (salaryLabel, salaryMin, salaryMax, salaryPeriod, salaryCurrency, isSalaryDisclosed)
  • ๐Ÿ“ Location label, suburb, SEEK area, state code and postcode (locationLabel, suburb, area, state, postcode)
  • ๐ŸŒ Country and country code (country, countryCode)
  • ๐Ÿ—‚ SEEK classification and subclassification (classification, subClassification)
  • ๐Ÿ• Work type and work arrangement, including remote and hybrid (workTypes, workArrangement)
  • ๐Ÿ“… Posting date, SEEK's own relative label, and the listing expiry (listingDate, listingDateDisplay, expiresAt, isExpired)
  • ๐Ÿ”— Whether the application goes to an external site (isExternalApplication)
  • โญ๏ธ Whether SEEK is promoting the ad (isFeatured)
  • ๐Ÿ” The search that found the row and its position in it (searchKeywords, searchLocation, resultPosition, sourceUrl)
  • ๐Ÿ•‘ Timestamp of the scrape (scrapedAt)

How to use SEEK Job Scraper

  1. Click Try for free and open the actor.
  2. Type what you are hiring for or tracking into Keywords, one term per line.
  3. Add Locations the way SEEK writes them, for example Sydney NSW, All Melbourne VIC or All Australia. Or paste SEEK search URLs straight from your browser into SEEK search URLs and every filter in them is honoured.
  4. Set Max results to control your spend, then hit Start.
  5. Export to CSV, Excel, JSON or XML, or pull the dataset from the Apify API.

Input

{
"keywords": ["software engineer", "devops engineer"],
"locations": ["All Sydney NSW", "All Melbourne VIC"],
"country": "au",
"maxItems": 500,
"includeDescription": true,
"sortBy": "date",
"postedWithinDays": 7,
"workTypes": ["full time"],
"workArrangements": ["remote", "hybrid"],
"salaryMin": 120000,
"salaryType": "annual",
"proxyConfiguration": { "useApifyProxy": true }
}

Already built the search you want on SEEK? Skip the form and paste the address bar:

{
"startUrls": [
"https://www.seek.com.au/software-engineer-jobs/in-All-Sydney-NSW?daterange=7&worktype=242",
"https://www.seek.co.nz/nurse-jobs/in-All-Auckland"
],
"maxItems": 300
}

Tracking specific ads? Give it the job ids instead. Ids that no longer resolve are reported in the log and are not charged.

{ "jobIds": ["94488368", "94504877"], "includeDescription": true }

Output

One row per job ad. Trimmed to the interesting fields:

{
"jobId": "94488368",
"title": "Software Engineer",
"jobUrl": "https://www.seek.com.au/job/94488368",
"companyName": "Energetica",
"isAdvertiserVerified": true,
"classification": "Information & Communication Technology",
"subClassification": "Engineering - Software",
"workTypes": ["Full time"],
"workArrangement": "Hybrid",
"salaryLabel": "$105,000 - $135,000 per year",
"salaryMin": 105000,
"salaryMax": 135000,
"salaryPeriod": "year",
"salaryCurrency": "AUD",
"isSalaryDisclosed": true,
"locationLabel": "Melbourne VIC",
"suburb": "Melbourne",
"area": "Victoria VIC",
"state": "VIC",
"postcode": "3000",
"countryCode": "AU",
"listingDate": "2026-09-08T05:10:53.364Z",
"expiresAt": "2026-10-08T12:59:59.999Z",
"isExpired": false,
"isExternalApplication": false,
"bulletPoints": ["career development", "rapidly growing startup", "international expansion"],
"descriptionText": "Great to meet you. We're Energetica, an end-to-end platform for everything to do with enterprise energy and renewables...",
"description": "<p>Great to meet you...</p>",
"scrapedAt": "2026-09-09T13:43:24.968Z"
}

The dataset ships two ready-made table views. Overview is title, company, location, suburb, postcode, salary band, work type, arrangement, category, posted date and link. Salaries puts the raw SEEK salary label next to the parsed numbers so you can audit the parse on your own data.

How much does it cost to scrape SEEK?

One flat price of $1.20 per 1,000 job ads. Full descriptions, parsed salaries and postcodes are included at that price. There is no separate charge for a description, no charge for a disclosed salary, and no per-run start fee.

Job adsCost
100$0.12
1,000$1.20
10,000$12.00
100,000$120.00

The other SEEK scrapers on the Apify Store charge $1.80 to $2.50 per 1,000, and two of them bill the description and the salary as separate events on top of the row.

Measured coverage

Measured on 180 job ads pulled through the Apify datacenter proxy on 2026-09-09, across six AU searches and three NZ searches:

FieldCoverageNote
title, companyName, jobUrl, jobId100%
descriptionText and description100%median 2,975 characters, longest 10,193
classification, subClassification100%
listingDate, expiresAt, isExpired100%
isExternalApplication100%
suburb98%
postcode98% AU, 48% NZSEEK itself omits the postcode on many NZ ads
state100% AUAustralia only. New Zealand has regions, not states
isAdvertiserVerified91%
companyLogoUrl62%only advertisers who uploaded one
salaryLabel53%share of ads that state pay at all
salaryMin and salaryMax86% of ads that state a salarythe rest say things like "Competitive salary + benefits"
workArrangement36%SEEK only tags an ad when the advertiser selected on-site, hybrid or remote

Zero duplicate job ids across the 180 rows.

Limits

  • SEEK serves at most 500 results per individual search. The result counter will happily say 21,471. Page six of a 100-row search comes back empty regardless. The actor warns you in the log when a search hits this and keeps going with the rest. To get the whole market, split the search by location, by workTypes, or by postedWithinDays and run it on a schedule.
  • Salary is whatever the advertiser typed. Roughly half of SEEK ads state no pay at all, and isSalaryDisclosed tells you which. When an ad states an internally inconsistent figure such as "$85 to $90 per year", the parser reports it as written rather than guessing what was meant.
  • workArrangement is only present when the advertiser tagged the ad. An untagged ad is not evidence the role is on-site.
  • Applying is out of scope. This actor reads public job ads. It does not submit applications and it does not touch candidate data.
  • New Zealand has no state field, and SEEK supplies a postcode on fewer NZ ads than AU ones.
  • region is not returned. SEEK exposes the field but left it null on all 180 ads measured, so shipping it would have been a column of nulls. Use area and state instead.

FAQ

This actor reads only public job advertisements: the same pages any visitor sees without signing in. It uses no login, no cookies and no credentials, and it collects no candidate or personal data. Scraping publicly available information is broadly lawful in Australia, New Zealand and elsewhere, but how you use the data is your responsibility, including your obligations under the Australian Privacy Act, the New Zealand Privacy Act and SEEK's terms. If you plan to republish job ads commercially, take your own legal advice first.

Do I need a SEEK account or a login?

No. Nothing in this actor needs an account, a cookie or an API key.

Can I use SEEK Job Scraper as an API?

Yes. Every actor on Apify is an API endpoint. Start a run with a POST, then read the dataset as JSON or CSV. See the Apify API docs.

Can I use this in Python?

Yes, with apify-client:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cirkit/seek-jobs-scraper").call(run_input={
"keywords": ["software engineer"],
"locations": ["All Australia"],
"maxItems": 200,
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
print(job["title"], job["companyName"], job["salaryMin"], job["postcode"])

How do I schedule SEEK Job Scraper to run automatically?

Open the actor, go to Schedules, and pick a cadence. Daily with sortBy: "date" and postedWithinDays: 1 gives you a clean feed of new ads with almost no duplicates.

Can I integrate SEEK Job Scraper with other apps?

Yes. Apify has native integrations for Zapier, Make, Slack, Google Sheets, Google Drive, GitHub and Airbyte, plus webhooks that fire when a run finishes. Point one at the dataset and job ads land in your CRM, your ATS or your warehouse.

Why did I get fewer results than expected?

Three usual causes, in order of likelihood. First, the search hit SEEK's 500-result ceiling, which the log states explicitly. Second, the location string was not recognised: SEEK answers an unknown location with zero results, and the actor flags it in both the log and the output row. Third, your filters were narrower than you thought, particularly salaryMin, which excludes every ad that does not state a salary.

How do I get more than 500 results for one keyword?

Split the search. Add several locations rather than All Australia, or run the same keyword with postedWithinDays: 1 on a daily schedule and accumulate. Each search gets its own 500.

Can I get a field that is not listed?

Ask in the Issues tab. If SEEK exposes it publicly, it can usually be added.

What happens if a run finds nothing?

It finishes successfully and writes a single row with noResults: true and a message explaining which of the possible reasons applied, so an automated pipeline can tell "nothing matched" apart from "the run broke".

You might also like

Changelog

0.1 (2026-09-09) First release. AU and NZ search, full descriptions, parsed salary bands, structured location down to the postcode, listing expiry, pasted SEEK search URLs and direct job id lookup.