SEEK Scraper | Australia & NZ Job Listings with Salary
Pricing
from $1.50 / 1,000 results
SEEK Scraper | Australia & NZ Job Listings with Salary
SEEK job scraper & API for Australia & New Zealand: search jobs by keyword, location & category and export title, company, salary, work type, classification, posting date, description and apply URL. Recruitment, salary benchmarking and job-board market data — fast, no login.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
99
Total users
6
Monthly active users
a day ago
Last modified
Categories
Features
Share
SEEK Jobs Scraper — Australia & New Zealand Job Listings, Salary, Superannuation & Visa Sponsorship
Extract live job postings from seek.com.au (Australia) and seek.co.nz (New Zealand) with structured salary bounds, superannuation detection (plus super vs inc super), visa sponsorship classification (482/TSS/186), work arrangement (On-site/Hybrid/Remote), and industry taxonomy.
This SEEK scraper converts unstructured ANZ job advertisements into clean, normalized records — capturing job ID, title, hiring company, company logo & profile URL, parsed city/state/postcode, classification & sub-classification, work type, work arrangement, numeric salaryMin & salaryMax, salaryPeriod, salaryHasSuper, visaSponsorship, bullet points, teaser, full job description, required skills, posting timestamp, and direct listing URL.
Export to JSON, CSV, Excel (XLSX), XML, or the Apify API with no SEEK account or login required.
Built for ANZ recruitment agencies, talent-intelligence & RPO teams, compensation & remuneration analysts, registered migration agents (
Subclass 482/186), B2B sales teams tracking hiring intent, and labor-market researchers.
⚡ At a glance
| Feature | Details |
|---|---|
| Supported Markets | 🇦🇺 Australia (seek.com.au) and 🇳🇿 New Zealand (seek.co.nz) |
| Search & Input Modes | Keyword(s) + city/state dropdown (26 pre-mapped ANZ regions), custom location text (locationCustom), or direct startUrls |
| Built-In Filters | Work type (full-time, part-time, contract, casual), work arrangement (onsite, hybrid, remote), date posted (1, 3, 7, 14, 31 days) |
| Salary Intelligence | Parses free-form pay strings into numeric salaryMin, salaryMax, salaryPeriod (annual, daily, hourly, monthly), and salaryHasSuper (true/false/null) |
| Visa Sponsorship Engine | 3-tier classification (explicit_sponsorship, open_to_sponsorship, no_sponsorship) detecting Subclass 482, TSS, 186, ENS, PR pathways, and citizenship requirements |
| Detail Enrichment | Optional scrapeDetails: true visits each job page for full description, skills array, and description-level salary & visa recovery |
| Pagination & 1K+ Scale | Automatic multi-page traversal with regional & sort-mode auto-expansion to overcome SEEK's ~550-per-query limit and collect 1,000+ unique jobs per run |
| Empty-Input Behavior | Running with {} returns a fast 100-job sample across Australia |
| Export Formats | JSON, JSONL, CSV, Excel (XLSX), HTML, XML, RSS, and Apify REST API |
🔎 Why scrape SEEK (Australia & New Zealand)?
SEEK is the #1 employment marketplace in Australia and New Zealand, hosting hundreds of thousands of active job ads across every metro (Sydney, Melbourne, Brisbane, Perth, Adelaide, Canberra, Auckland, Wellington, Christchurch), regional hub, and industry classification.
However, extracting actionable intelligence from SEEK manually is challenging:
- Free-form compensation strings: Employers write salaries as
"$130k - $160k + super","$950 - $1,100 per day inc. super", or bury the package inside the job body. - Superannuation ambiguity: In Australia, the Superannuation Guarantee (SG) adds 11.5%+ to base pay. Comparing
"$140k + super"against"$140k package"without a structuredsalaryHasSuperflag skews salary benchmarks. - Hidden visa sponsorship signals: Employers rarely have a dedicated filter for Subclass 482 (TSS) or 186 (ENS) sponsorship — instead, sponsorship willingness is mentioned inside bullet points or the full job description.
- 550-result search cap: SEEK caps any single search query at ~25 pages (~550 jobs).
This SEEK scraper solves every one of those challenges automatically — normalizing salaries, flagging superannuation, classifying visa sponsorship, and auto-expanding across regions and sort modes when you request 1,000+ jobs.
Key business benefits
- B2B hiring-signal lead generation: Identify Australian and New Zealand companies actively hiring for roles that buy or use your product (e.g.
DevOps Engineer,Payroll Manager,Safety Officer,Fleet Manager) and enrich your outbound CRM daily. - Real-time ANZ salary & super benchmarking: Build accurate compensation percentiles by
classification,subClassification,state, andworkTypewith numericsalaryMin/salaryMax. - Skilled migration & Subclass 482/186 employer mapping: Filter
visaSponsorship: "explicit_sponsorship"or"open_to_sponsorship"to build verified lists of visa-sponsoring employers in healthcare, engineering, ICT, trades, and construction. - Competitor headcount & expansion tracking: Monitor where enterprises and high-growth startups are expanding across NSW, VIC, QLD, WA, SA, and NZ.
✨ Key features
- ✅ Australia (
seek.com.au) & New Zealand (seek.co.nz) support: Switch countries with a single dropdown (country: "au"or"nz"). - ✅ 26 pre-configured ANZ metro & state locations + custom location support: Select Sydney, Melbourne, Brisbane, Perth, Adelaide, Canberra, Gold Coast, Newcastle, Sunshine Coast, Hobart, Darwin, Wollongong, any Australian state, or Auckland, Wellington, Canterbury, Waikato, Otago, and Bay of Plenty — or type any town into
locationCustom. - ✅ Unlocked 1,000+ job pagination: Supports comma-separated keywords in
keywordand automatically expands across regional andListedDatefacets whenevermaxRecords > 400(or0unlimited), seamlessly bypassing SEEK's ~550-result single-search ceiling while deduplicating byjobId. - ✅ Numeric salary & superannuation parser: Handles
$120k–$150k,$130 - 160k, hourly/daily rates, and SEEK's$133348.0kformatting quirks. WhenscrapeDetails: trueis enabled, it also extracts salary ranges written inside the full job description when the search card has none. - ✅ 3-tier visa sponsorship detector: Scans teasers, bullet points, and (with
scrapeDetails: true) full descriptions to tag roles as:explicit_sponsorship(482 visa,TSS visa,186 visa,ENS nomination,sponsorship available)open_to_sponsorship(sponsorship considered,overseas candidates welcome,PR pathway)no_sponsorship(Australian citizens only,must have full working rights,no sponsorship)
- ✅ Resilient session rotation: Automatically rotates residential proxy sessions on rate limits so deep multi-hundred-page runs finish cleanly.
🎯 Use cases
1. Recruitment agency & RPO BD (Business Development)
Staffing agencies scrape daily postings (dateRange: "1" or "3") in their target vertical (Information & Communication Technology, Healthcare & Medical, Mining, Resources & Energy, Accounting), filter out competing recruitment agencies, and pitch hiring managers who have open requisitions.
2. Remuneration & HR analytics
People-analytics teams pull 1,000+ listings per role family across Sydney, Melbourne, Brisbane, and Perth to compare base + super packages, remote/hybrid ratios (workArrangement), and contract day rates vs permanent salaries.
3. Immigration & relocation advisory
Migration agents and international job boards run the scraper with scrapeDetails: true across high-demand ANZSCO occupations (Registered Nurses, Civil Engineers, Software Engineers, Chefs, Mechanics) to curate live feeds of explicit_sponsorship jobs.
4. Job board & newsletter aggregation
Niche community job boards and industry newsletters schedule automated daily pulls, feeding clean JSON/CSV records with title, company, companyLogo, salaryRaw, location, and listingUrl directly into Webflow, WordPress, or Supabase.
📥 Input parameters
All parameters are optional. Leaving inputs at their defaults runs a fast 100-job search on seek.com.au.
| Parameter | Type | Default | Description |
|---|---|---|---|
country | string | "au" | Target SEEK site: "au" (seek.com.au Australia) or "nz" (seek.co.nz New Zealand). |
keyword | string | "" (prefill "software engineer") | Job title, skill, or keyword(s). Supports comma-separated terms (e.g. "software engineer, data engineer, devops") to sweep multiple roles in one run. |
location | string | "" (All locations) | Dropdown of 26 major Australian & New Zealand cities, regions, and states (all-sydney-nsw, all-melbourne-vic, all-brisbane-qld, all-auckland, etc.). |
locationCustom | string | "" | Optional free-text location (e.g. "Cairns QLD", "Geelong VIC", "Christchurch") used when location is set to "All locations". |
workType | string | "all" | Employment type: "all", "full-time", "part-time", "contract", or "casual". |
workArrangement | string | "all" | Workplace model: "all", "onsite", "hybrid", or "remote". |
dateRange | string | "0" | Posted within: "0" (Any time), "1" (24h), "3" (3 days), "7" (7 days), "14" (14 days), or "31" (30 days). |
scrapeDetails | boolean | false | Visit each job detail page to extract full description, skills, and description-level salary & visa sponsorship signals. Keep false for fast bulk runs. |
maxRecords | integer | 0 (prefill 100) | Maximum total jobs to collect. Set 0 for unlimited, or 1000+ for deep multi-region collection. |
maxPages | integer | 0 | Optional page cap per search URL (~22 jobs/page). Leave at 0 (unlimited) so maxRecords governs run size. |
requestDelay | integer | 1000 | Delay between page requests in milliseconds (500–10000). |
startUrls | array | [] | Optional list of ready-made SEEK search URLs. Overrides keyword/location menus when provided. |
proxyConfiguration | object | AU Residential | Apify Proxy configuration. Keep RESIDENTIAL enabled and match the country ("AU" or "NZ") to your target SEEK domain. |
Example input — 1,000+ Australian tech jobs across all capitals
{"country": "au","keyword": "software engineer, data engineer, cloud engineer","location": "","workType": "all","dateRange": "14","scrapeDetails": false,"maxRecords": 1000,"maxPages": 0,"requestDelay": 1000,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "AU"}}
Example input — Sydney full-time roles with full descriptions & visa detection
{"country": "au","keyword": "registered nurse","location": "all-sydney-nsw","workType": "full-time","dateRange": "7","scrapeDetails": true,"maxRecords": 200,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "AU"}}
📤 Output schema & field reference
Every job listing is returned as a structured JSON object with 30 normalized fields.
💼 Job Identity, Company & Classification
| Field | Type | Coverage | Description |
|---|---|---|---|
jobId | string | 🟢 High (100%) | Unique SEEK job ID (e.g. "95483992"). Primary deduplication key. |
title | string | 🟢 High (100%) | Job title as advertised. |
company | string | null | 🟢 High (~99%) | Employer or recruitment agency name. |
companyLogo | string | null | 🟢 High (~75%) | Employer branding logo URL on SEEK's CDN. |
companyUrl | string | null | 🟡 Conditional (~40%) | Link to the employer's SEEK company profile page, when available. |
classification | string | null | 🟢 High (100%) | Primary industry classification (e.g. "Information & Communication Technology"). |
subClassification | string | null | 🟢 High (100%) | Sub-classification specialty (e.g. "Engineering - Software"). |
workType | string | null | 🟢 High (100%) | Employment type ("Full time", "Contract/Temp", "Part time", "Casual/Vacation"). |
workArrangement | string | null | 🟡 Conditional (~55%) | Workplace model ("On-site", "Hybrid", "Remote"), when tagged by the employer. |
roleId | string | null | 🟢 High (~98%) | Standardized SEEK role slug (e.g. "AWS-Platform-Engineer"). |
isFeatured | boolean | 🟢 High (100%) | true if the listing is a promoted/featured ad. |
agentName | string | null | 🟡 Conditional | Recruiter contact name when specified. |
💰 Compensation, Superannuation & Visa Signals
| Field | Type | Coverage | Description |
|---|---|---|---|
salaryRaw | string | null | 🟡 Conditional (~40%+) | Raw salary text disclosed on the card or parsed from description (e.g. "$123,000 - $140,000 (inc Super)"). |
salaryMin | number | null | 🟡 Conditional (~40%+) | Parsed lower numeric salary bound in AUD or NZD (123000). |
salaryMax | number | null | 🟡 Conditional (~40%+) | Parsed upper numeric salary bound in AUD or NZD (140000). |
salaryPeriod | string | null | 🟡 Conditional (~40%+) | Pay period: "annual", "daily", "hourly", or "monthly". |
salaryHasSuper | boolean | null | 🟡 Conditional | true when salary mentions super (+ super / inc super), null when unspecified. |
visaSponsorship | string | null | 🟡 Conditional | "explicit_sponsorship", "open_to_sponsorship", "no_sponsorship", or null. Coverage increases significantly with scrapeDetails: true. |
📍 Location, Content & Timestamps
| Field | Type | Coverage | Description |
|---|---|---|---|
location | string | 🟢 High (100%) | Full SEEK location label (e.g. "Canterbury, Melbourne VIC"). |
city | string | null | 🟢 High (100%) | Parsed city or metro area. |
state | string | null | 🟢 High (AU 100%) | Australian state/territory code (NSW, VIC, QLD, WA, SA, TAS, ACT, NT); null for NZ. |
suburb | string | null | 🟡 Conditional | Suburb name when separately structured. |
postcode | string | null | 🟡 Conditional (~40%) | 4-digit postal code extracted from location or SEO hierarchy. |
bullets | array<string> | null | 🟢 High (~65%) | Highlight bullet points displayed on the search card. |
teaser | string | null | 🟢 High (100%) | Short summary teaser from the search result card. |
description | string | null | 🟡 Detail mode | Full plain-text job description (populated when scrapeDetails: true). |
skills | array<string> | null | 🟡 Detail mode | Structured skills tags from the job detail page (when scrapeDetails: true). |
listingUrl | string | 🟢 High (100%) | Direct URL to the SEEK job posting (https://au.seek.com/job/95483992). |
listedAt | string | 🟢 High (100%) | ISO-8601 posting timestamp. |
scrapedAt | string | 🟢 High (100%) | ISO-8601 extraction timestamp. |
Sample output record
{"jobId": "95483992","title": "AWS Platform Engineer","company": "BGL Corporate Solutions","companyLogo": "https://bx-branding-gateway.cloud.seek.com.au/f65c0a46-2fcb-462d-ba39-11d48c7ad912.1/jdpLogo","companyUrl": "https://au.seek.com/companies/bgl-corporate-solutions-814812","location": "Canterbury, Melbourne VIC","city": "Canterbury Melbourne","state": "VIC","suburb": null,"postcode": "3126","classification": "Information & Communication Technology","subClassification": "Engineering - Software","workType": "Full time","workArrangement": "Hybrid","salaryRaw": "$123,000 - $140,000 (inc Super)","salaryMin": 123000,"salaryMax": 140000,"salaryPeriod": "annual","salaryHasSuper": true,"visaSponsorship": null,"bullets": ["Genuinely flexible work arrangements and work life balance!","Warm and collaborative culture!","Abundance of learning opportunities & a generous annual learning wallet!"],"teaser": "You'll own & improve our AWS platform, automate how we build, ship & work in collaboration with developers to help them debug & deploy with confidence!","description": null,"skills": null,"isFeatured": false,"roleId": "AWS-Platform-Engineer","agentName": null,"listingUrl": "https://au.seek.com/job/95483992","listedAt": "2026-10-26T00:26:11.000Z","scrapedAt": "2026-11-10T02:00:00.000Z"}
🔁 Pagination & scaling to 1,000+ SEEK jobs
- Automatic multi-page pagination: Each search steps through
?page=1,?page=2, … (~22 jobs per page), deduplicating every job byjobId. - Automatic regional & sort-mode expansion past 550 jobs: Because SEEK caps any single search query at ~25 pages (~550 jobs), whenever you set
maxRecordsabove400(e.g.maxRecords: 1000or0unlimited), the Actor automatically appendssortmode=ListedDateand regional/work-type sub-queries (Sydney,Melbourne,Brisbane,Perth,Adelaide,Canberra,Gold Coastfor AU;Auckland,Wellington,Canterbury,Waikato,Otagofor NZ) and continues scraping seamlessly until your 1,000+ job target is reached. - Comma-separated multi-keyword support: Enter multiple roles in
keyword(e.g."data analyst, business analyst, product manager") to aggregate thousands of deduplicated jobs across related titles in a single run.
⚙️ How to use & integrate
Python SDK example
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("haketa/seek-scraper").call(run_input={"country": "au","keyword": "software engineer","location": "all-sydney-nsw","workType": "full-time","dateRange": "7","scrapeDetails": False,"maxRecords": 500,"proxyConfiguration": {"useApifyProxy": True,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "AU"}})for job in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{job['jobId']} | {job['title']} @ {job['company']} | {job['salaryRaw']} | {job['listingUrl']}")
Node.js SDK example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('haketa/seek-scraper').call({country: 'nz',keyword: 'civil engineer, project manager',location: 'all-auckland',maxRecords: 300,proxyConfiguration: {useApifyProxy: true,apifyProxyGroups: ['RESIDENTIAL'],apifyProxyCountry: 'NZ',},});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Saved ${items.length} SEEK NZ job listings`);
💡 Pro tips for SEEK scraping
- Always keep Residential Proxy ON: SEEK blocks datacenter IP ranges with HTTP 403. Keep
apifyProxyGroups: ["RESIDENTIAL"]enabled (the default) and setapifyProxyCountry: "AU"forseek.com.auor"NZ"forseek.co.nz. - Keep
scrapeDetails: falsefor fast, low-cost sweeps: A 100-job search run takes only ~5 pages (~10–15 seconds) and still captures salary, super, classification, bullets, and teaser-level visa hints. EnablescrapeDetails: truewhen you specifically need full job descriptions and skills arrays. - Use comma-separated keywords for multi-role datasets: Instead of launching five separate runs, pass
"accountant, financial analyst, tax manager"inkeyword— all results are automatically deduplicated byjobId.
❓ Frequently Asked Questions
Why is Residential Proxy enabled by default?
SEEK protects its pages against datacenter IP addresses. Using Apify's RESIDENTIAL proxy pool with AU or NZ geo-targeting ensures 200 OK responses and prevents empty runs.
How can I collect more than 550 jobs when SEEK caps search pagination at 25 pages?
Simply set maxRecords: 1000 (or 0 for unlimited). The Actor automatically expands your query across ListedDate sort order and major ANZ metro regions (or work-type facets) once the initial search reaches its 25-page ceiling, deduplicating every listing by jobId.
How does salary parsing handle $130k - $150k vs daily/hourly contractor rates?
The parser normalizes shorthand k notation into full dollar figures (130000 to 150000) while detecting "per hour" / "p.h." (salaryPeriod: "hourly") and "per day" / "daily" (salaryPeriod: "daily").
Can I scrape both Australia and New Zealand in the same run?
Yes — pass startUrls containing links from both https://au.seek.com/... and https://www.seek.co.nz/..., or run two tasks with country: "au" and country: "nz".
How do I calculate total annual remuneration from salaryMin, salaryMax, and salaryHasSuper?
In Australia, when salaryHasSuper is false (or when salaryRaw explicitly states "+ super" / "plus superannuation"), multiply salaryMin and salaryMax by 1.115 (the 11.5% Superannuation Guarantee rate) to compare on a total-package basis against "inc super" listings.
What happens if a niche search has 0 matching jobs on SEEK?
The Actor logs that SEEK returned zero results for the query, sets a clear run status message, and exits cleanly (SUCCEEDED) with an empty dataset rather than throwing an error.
🌏 Pre-configured Australia & New Zealand location slugs (location)
| Country | Location Dropdown Value | Coverage Area |
|---|---|---|
| 🇦🇺 Australia | "" (All locations) | Nationwide across all Australian states & territories |
| 🇦🇺 NSW | "all-sydney-nsw", "all-newcastle-maitland-hunter-valley-nsw", "all-wollongong-illawarra-southern-highlands-nsw", "all-new-south-wales" | Greater Sydney, Newcastle/Hunter, Wollongong/Illawarra, or all NSW |
| 🇦🇺 VIC | "all-melbourne-vic", "all-victoria" | Greater Melbourne or statewide Victoria |
| 🇦🇺 QLD | "all-brisbane-qld", "all-gold-coast-qld", "all-sunshine-coast-qld", "all-queensland" | Brisbane, Gold Coast, Sunshine Coast, or statewide Queensland |
| 🇦🇺 WA / SA | "all-perth-wa", "all-western-australia", "all-adelaide-sa", "all-south-australia" | Perth, Adelaide, and statewide WA / SA |
| 🇦🇺 ACT / TAS / NT | "all-canberra-act", "all-hobart-tas", "all-darwin-nt", "all-tasmania", "all-northern-territory-nt" | Canberra, Hobart, Darwin, and territory-wide |
| 🇳🇿 New Zealand | "all-auckland", "all-wellington", "all-canterbury", "all-waikato", "all-otago", "all-bay-of-plenty" | Auckland, Wellington, Christchurch/Canterbury, Hamilton/Waikato, Dunedin/Queenstown, Tauranga |
🛠️ Ready-to-run workflow recipes
Recipe 1: 1,000+ Australian software & data engineering jobs for salary benchmarking
{"country": "au","keyword": "software engineer, data engineer, platform engineer, devops engineer","location": "","workType": "full-time","dateRange": "14","scrapeDetails": false,"maxRecords": 1000,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "AU"}}
Recipe 2: Visa-sponsoring healthcare & engineering employers (Subclass 482 / 186)
{"country": "au","keyword": "registered nurse, general practitioner, civil engineer","location": "","workType": "full-time","dateRange": "31","scrapeDetails": true,"maxRecords": 500,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "AU"}}
🔗 Related job board & HR intelligence scrapers
- ZipRecruiter Job Listings & Salary Scraper (US, UK, CA)
- Xing Jobs Scraper — DACH Job Listings & Salaries
- Arbeitsagentur Job Scraper — German Federal Employment Agency
- Naukri Scraper — India Jobs, Salary & Company Ratings
- GulfTalent Jobs Scraper — Middle East & Gulf Executive Jobs
- Workana Jobs Scraper — Freelance Projects & Budgets
📋 Changelog
- v1.2 (2026-11) — Unlocked 1,000+ job auto-expansion & multi-keyword support: Added automatic regional and
ListedDatefacet expansion whenmaxRecords > 400(or0unlimited) to scale past SEEK's ~550-result single-search cap, added comma-separated multi-keyword support inkeyword, changedmaxRecordsschema default to0(with fast100prefill), and expanded README documentation. - v1.1 (2026-07) — Updated default proxy prefill to
RESIDENTIAL(AU) for 100% reliability against SEEK's datacenter IP blocks; added dedicated IP-rotation retry budget on HTTP 403/429. - v1.0 (2026-05) — Initial release with structured salary + superannuation parsing, 3-tier Subclass 482/186 visa sponsorship detection, 26 ANZ location presets, and optional detail-page enrichment.