SEEK Scraper | Australia & NZ Job Listings with Salary avatar

SEEK Scraper | Australia & NZ Job Listings with Salary

Pricing

from $1.50 / 1,000 results

Go to Apify Store
SEEK Scraper | Australia & NZ Job Listings with Salary

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

Haketa

Maintained by Community

Actor stats

0

Bookmarked

99

Total users

6

Monthly active users

a day ago

Last modified

Features

Limited permissions

Share

SEEK Jobs Scraper — Australia & New Zealand Job Listings, Salary, Superannuation & Visa Sponsorship

Apify Actor

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

FeatureDetails
Supported Markets🇦🇺 Australia (seek.com.au) and 🇳🇿 New Zealand (seek.co.nz)
Search & Input ModesKeyword(s) + city/state dropdown (26 pre-mapped ANZ regions), custom location text (locationCustom), or direct startUrls
Built-In FiltersWork type (full-time, part-time, contract, casual), work arrangement (onsite, hybrid, remote), date posted (1, 3, 7, 14, 31 days)
Salary IntelligenceParses free-form pay strings into numeric salaryMin, salaryMax, salaryPeriod (annual, daily, hourly, monthly), and salaryHasSuper (true/false/null)
Visa Sponsorship Engine3-tier classification (explicit_sponsorship, open_to_sponsorship, no_sponsorship) detecting Subclass 482, TSS, 186, ENS, PR pathways, and citizenship requirements
Detail EnrichmentOptional scrapeDetails: true visits each job page for full description, skills array, and description-level salary & visa recovery
Pagination & 1K+ ScaleAutomatic 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 BehaviorRunning with {} returns a fast 100-job sample across Australia
Export FormatsJSON, 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 structured salaryHasSuper flag 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

  1. 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.
  2. Real-time ANZ salary & super benchmarking: Build accurate compensation percentiles by classification, subClassification, state, and workType with numeric salaryMin / salaryMax.
  3. 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.
  4. 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 keyword and automatically expands across regional and ListedDate facets whenever maxRecords > 400 (or 0 unlimited), seamlessly bypassing SEEK's ~550-result single-search ceiling while deduplicating by jobId.
  • ✅ Numeric salary & superannuation parser: Handles $120k–$150k, $130 - 160k, hourly/daily rates, and SEEK's $133348.0k formatting quirks. When scrapeDetails: true is 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.

ParameterTypeDefaultDescription
countrystring"au"Target SEEK site: "au" (seek.com.au Australia) or "nz" (seek.co.nz New Zealand).
keywordstring"" (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.
locationstring"" (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.).
locationCustomstring""Optional free-text location (e.g. "Cairns QLD", "Geelong VIC", "Christchurch") used when location is set to "All locations".
workTypestring"all"Employment type: "all", "full-time", "part-time", "contract", or "casual".
workArrangementstring"all"Workplace model: "all", "onsite", "hybrid", or "remote".
dateRangestring"0"Posted within: "0" (Any time), "1" (24h), "3" (3 days), "7" (7 days), "14" (14 days), or "31" (30 days).
scrapeDetailsbooleanfalseVisit each job detail page to extract full description, skills, and description-level salary & visa sponsorship signals. Keep false for fast bulk runs.
maxRecordsinteger0 (prefill 100)Maximum total jobs to collect. Set 0 for unlimited, or 1000+ for deep multi-region collection.
maxPagesinteger0Optional page cap per search URL (~22 jobs/page). Leave at 0 (unlimited) so maxRecords governs run size.
requestDelayinteger1000Delay between page requests in milliseconds (500–10000).
startUrlsarray[]Optional list of ready-made SEEK search URLs. Overrides keyword/location menus when provided.
proxyConfigurationobjectAU ResidentialApify 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

FieldTypeCoverageDescription
jobIdstring🟢 High (100%)Unique SEEK job ID (e.g. "95483992"). Primary deduplication key.
titlestring🟢 High (100%)Job title as advertised.
companystring | null🟢 High (~99%)Employer or recruitment agency name.
companyLogostring | null🟢 High (~75%)Employer branding logo URL on SEEK's CDN.
companyUrlstring | null🟡 Conditional (~40%)Link to the employer's SEEK company profile page, when available.
classificationstring | null🟢 High (100%)Primary industry classification (e.g. "Information & Communication Technology").
subClassificationstring | null🟢 High (100%)Sub-classification specialty (e.g. "Engineering - Software").
workTypestring | null🟢 High (100%)Employment type ("Full time", "Contract/Temp", "Part time", "Casual/Vacation").
workArrangementstring | null🟡 Conditional (~55%)Workplace model ("On-site", "Hybrid", "Remote"), when tagged by the employer.
roleIdstring | null🟢 High (~98%)Standardized SEEK role slug (e.g. "AWS-Platform-Engineer").
isFeaturedboolean🟢 High (100%)true if the listing is a promoted/featured ad.
agentNamestring | null🟡 ConditionalRecruiter contact name when specified.

💰 Compensation, Superannuation & Visa Signals

FieldTypeCoverageDescription
salaryRawstring | null🟡 Conditional (~40%+)Raw salary text disclosed on the card or parsed from description (e.g. "$123,000 - $140,000 (inc Super)").
salaryMinnumber | null🟡 Conditional (~40%+)Parsed lower numeric salary bound in AUD or NZD (123000).
salaryMaxnumber | null🟡 Conditional (~40%+)Parsed upper numeric salary bound in AUD or NZD (140000).
salaryPeriodstring | null🟡 Conditional (~40%+)Pay period: "annual", "daily", "hourly", or "monthly".
salaryHasSuperboolean | null🟡 Conditionaltrue when salary mentions super (+ super / inc super), null when unspecified.
visaSponsorshipstring | null🟡 Conditional"explicit_sponsorship", "open_to_sponsorship", "no_sponsorship", or null. Coverage increases significantly with scrapeDetails: true.

📍 Location, Content & Timestamps

FieldTypeCoverageDescription
locationstring🟢 High (100%)Full SEEK location label (e.g. "Canterbury, Melbourne VIC").
citystring | null🟢 High (100%)Parsed city or metro area.
statestring | null🟢 High (AU 100%)Australian state/territory code (NSW, VIC, QLD, WA, SA, TAS, ACT, NT); null for NZ.
suburbstring | null🟡 ConditionalSuburb name when separately structured.
postcodestring | null🟡 Conditional (~40%)4-digit postal code extracted from location or SEO hierarchy.
bulletsarray<string> | null🟢 High (~65%)Highlight bullet points displayed on the search card.
teaserstring | null🟢 High (100%)Short summary teaser from the search result card.
descriptionstring | null🟡 Detail modeFull plain-text job description (populated when scrapeDetails: true).
skillsarray<string> | null🟡 Detail modeStructured skills tags from the job detail page (when scrapeDetails: true).
listingUrlstring🟢 High (100%)Direct URL to the SEEK job posting (https://au.seek.com/job/95483992).
listedAtstring🟢 High (100%)ISO-8601 posting timestamp.
scrapedAtstring🟢 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 by jobId.
  • Automatic regional & sort-mode expansion past 550 jobs: Because SEEK caps any single search query at ~25 pages (~550 jobs), whenever you set maxRecords above 400 (e.g. maxRecords: 1000 or 0 unlimited), the Actor automatically appends sortmode=ListedDate and regional/work-type sub-queries (Sydney, Melbourne, Brisbane, Perth, Adelaide, Canberra, Gold Coast for AU; Auckland, Wellington, Canterbury, Waikato, Otago for 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 ApifyClient
client = 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 set apifyProxyCountry: "AU" for seek.com.au or "NZ" for seek.co.nz.
  • Keep scrapeDetails: false for 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. Enable scrapeDetails: true when 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" in keyword — all results are automatically deduplicated by jobId.

❓ 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)

CountryLocation Dropdown ValueCoverage 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"
}
}


📋 Changelog

  • v1.2 (2026-11) — Unlocked 1,000+ job auto-expansion & multi-keyword support: Added automatic regional and ListedDate facet expansion when maxRecords > 400 (or 0 unlimited) to scale past SEEK's ~550-result single-search cap, added comma-separated multi-keyword support in keyword, changed maxRecords schema default to 0 (with fast 100 prefill), 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.
⌂ 换网址