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

Scrape seek.com.au & seek.co.nz jobs. Salary + super parsing, visa sponsorship flag, work arrangement, classification & company hiring intelligence. 157K+ active listings.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

14

Total users

8

Monthly active users

4 days ago

Last modified

Share

SEEK Scraper — Australia & New Zealand Job Listings with Salary, Super, Visa Sponsorship & Classification Data

The most complete SEEK jobs data extraction tool on Apify. Scrape live job listings from seek.com.au and seek.co.nz with structured salary parsing (base + 11.5% super), visa sponsorship detection (482 / TSS / 186 / ENS), work arrangement (on-site / hybrid / remote), and full classification taxonomy — ready for recruiter intelligence, HR market pricing, candidate offer prep, ANZ talent supply/demand analytics, and equity research on labour markets.

Apify Actor


What This Actor Does

The SEEK Scraper is a production-ready Apify Actor that extracts the live public job-listings database from SEEK — the dominant employment marketplace across Australia and New Zealand. SEEK hosts a daily-changing inventory of roughly 150,000–200,000 active vacancies spanning every industry classification, from entry-level retail in regional Queensland through to senior FAANG-tier engineering roles in Sydney, Melbourne and Auckland.

In a single run the actor returns structured JSON records for each listing, including:

  • Job identityjobId, title, listing URL, posting age, featured/premium flag
  • Employercompany, companyLogo, recruiter / agent name (when listed via agency)
  • Location — full location string + parsed city, state (NSW / VIC / QLD / WA / SA / TAS / ACT / NT), postcode
  • Classification taxonomy — SEEK classification + subClassification (e.g. Information & Communication Technology → Developers / Programmers)
  • Compensation — raw salary string + parsed salaryMin, salaryMax, salaryPeriod (annual / hourly / daily / monthly), and a critical salaryHasSuper boolean flagging whether the figure is inclusive of, exclusive of, or plus superannuation
  • Work arrangement — on-site, hybrid, or remote
  • Work type — Full Time, Part Time, Contract / Temp, Casual
  • Visa sponsorship signalexplicit_sponsorship, open_to_sponsorship, or no_sponsorship (derived from description text, 482 / TSS / 186 / ENS detection, citizenship requirements)
  • Description, bullets, skills, screening questions — when detail-page scraping is enabled
  • ProvenancescrapedAt ISO-8601 timestamp on every record

This is the fastest path to populate or refresh an ANZ jobs / salary dataset for recruitment platforms, talent intelligence dashboards, RPO operations, equity-research labour-market models, and immigration-pathway research.

Why scrape SEEK yourself when this exists?

SEEK is a server-rendered Next.js application that ships a large __NEXT_DATA__ JSON blob and falls back to React-hydrated DOM cards. Most teams who try to build this in-house run head-first into the same wall:

  • Pagination caps out around 22 listings per page and ~550 results per search facet — you have to fan out queries across keyword × location × work-type combinations to escape the cap
  • The __NEXT_DATA__ shape is not stable — SEEK rotates between pageProps.jobListings, pageProps.data.jobs, pageProps.searchResults, pageProps.initialResults, and a nested dehydratedState.queries[0].state.data.data structure
  • Salary is a free-text field; one in three listings hides the figure inside the description body and the rest mix $120k–$150k + super, $60/hr, $850 per day and $8,000 per month in the same dataset
  • The superannuation modifier is the single most important compensation signal in Australia (current SG rate 11.5%, rising to 12% in 2025) and there is no structured field for it — you have to regex plus super vs inclusive of super vs + super vs excl. super
  • Visa sponsorship status is buried in long-form description prose using inconsistent phrasing (482 visa, TSS visa, 186 nomination, will sponsor, PR pathway, vs must hold valid working rights, Australian citizens only)
  • Hybrid / remote tags appear inline as (Hybrid) / (Remote) parentheticals rather than a structured field
  • AU and NZ live on separate origin domains (au.seek.com vs www.seek.co.nz) with subtly different markup, currency assumptions, and state taxonomy (AU states vs NZ regions)
  • Rotating Cloudflare-style protections occasionally throw 429s — naive scrapers crash; serious ones must back off, rotate sessions, and retry idempotently
  • Daily changes invalidate any cached snapshot — recruiters need today's inventory, not last week's

This actor solves all of that: it downloads, parses both __NEXT_DATA__ and DOM-fallback cards, normalises every salary into machine-readable numbers, derives the super flag, detects visa sponsorship language, splits location into city / state / postcode, and pushes ready-to-use JSON — no headless browser, no Playwright budget, no schema babysitting.


Quick Start

One-Click Run

  1. Click "Try for free" on the Apify Store page
  2. Enter a keyword (e.g. software engineer) and a location (e.g. sydney)
  3. Set country to au (default) or nz, leave everything else at default
  4. Hit Start — your dataset of structured jobs is ready in under a minute

API Run (Python)

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("haketa/seek-scraper").call(run_input={
"country": "au",
"keyword": "data engineer",
"location": "melbourne",
"workType": "full-time",
"workArrangement": "hybrid",
"dateRange": "7",
"scrapeDetails": True,
"maxRecords": 200,
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
print(
job["title"],
"|", job["company"],
"|", job["city"], job.get("state") or "",
"|", f"${job['salaryMin']:,.0f}–${job['salaryMax']:,.0f}"
if job.get("salaryMin") else "(salary hidden)",
"+ super" if job.get("salaryHasSuper") else "",
"|", job.get("visaSponsorship") or "—",
)

API Run (Node.js / TypeScript)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('haketa/seek-scraper').call({
country: 'au',
keyword: 'registered nurse',
location: 'all-nsw',
workType: 'full-time',
dateRange: '14',
maxRecords: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Pulled ${items.length} NSW nursing jobs from SEEK`);
const sponsored = items.filter(j => j.visaSponsorship === 'explicit_sponsorship');
console.log(`${sponsored.length} explicitly offer visa sponsorship`);

API Run (cURL)

curl -X POST "https://api.apify.com/v2/acts/haketa~seek-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"country": "nz",
"keyword": "civil engineer",
"location": "auckland",
"workType": "full-time",
"scrapeDetails": true,
"maxRecords": 100
}'

API Run (Direct Start URLs)

If you already have SEEK search URLs in your stack, pass them as startUrls and skip filter assembly entirely:

{
"startUrls": [
"https://au.seek.com/software-engineer-jobs/in-sydney",
"https://au.seek.com/data-analyst-jobs/in-melbourne?worktype=242",
"https://www.seek.co.nz/marketing-manager-jobs/in-auckland"
],
"scrapeDetails": true,
"maxRecords": 0
}

How It Works

SEEK's public search pages are Next.js server-rendered. Each page ships a giant <script id="__NEXT_DATA__"> JSON blob containing the same listings React hydrates from. This actor:

  1. Builds canonical search URLs from your keyword / location / workType / dateRange inputs (or accepts your own startUrls)
  2. Issues HTTPS GETs via got-scraping with realistic browser headers and en-AU accept-language — no Puppeteer, no Playwright, no Chromium overhead
  3. Parses __NEXT_DATA__ first — trying five known result paths so the parser survives SEEK's silent schema rotations
  4. Falls back to DOM regex parsing of article / [data-testid*="job-card"] / a[href*="/job/"] selectors when __NEXT_DATA__ is empty or restructured
  5. Salary parsing — three-tier strategy: structured field → super-flag regex (plus super, inclusive of super, excl. super) → description body fallback ($120k–$150k pa, up to $180,000)
  6. Location parser — splits "Surry Hills, Sydney NSW 2010" into city: "Sydney", state: "NSW", postcode: "2010" with regex covering all eight AU state abbreviations
  7. Visa sponsorship detection — three-tier keyword cascade: explicit_sponsorship (482 visa, will sponsor, sponsorship provided) → open_to_sponsorship (may consider sponsorship, PR pathway) → no_sponsorship (Australian citizens only, must hold a valid visa)
  8. Pagination — increments ?page=N until the page returns zero listings, until maxPages is hit, or until maxRecords is reached
  9. Optional detail-page enrichment — when scrapeDetails: true, each job URL is fetched for full description, skills, screening questions, and a second-pass salary / visa parse from the long-form body
  10. DeduplicationjobId (or listing URL fallback) is tracked in-memory so cross-page duplicates are dropped before being pushed to the dataset
  11. Resilient retries — 429 rate-limit responses trigger exponential back-off (5s, 10s, 15s); transient 5xxs retry up to 3× with proxy session rotation
  12. Datacenter proxy by default — SEEK does not require residential IPs; the Apify SHADER (datacenter) pool is sufficient and dramatically cheaper

Source endpoints

SurfaceURL patternEngineAuth
AU search resultshttps://au.seek.com/{keyword}-jobs/in-{location}?page=NHTTP + CheerioNone
NZ search resultshttps://www.seek.co.nz/{keyword}-jobs/in-{location}?page=NHTTP + CheerioNone
AU job detailhttps://au.seek.com/job/{jobId}HTTP + CheerioNone
NZ job detailhttps://www.seek.co.nz/job/{jobId}HTTP + CheerioNone
Hydration payloadinline <script id="__NEXT_DATA__">JSON parseNone

Internal work-type code map

SEEK's search URL accepts numeric work-type codes — the actor handles translation:

Input valueSEEK codeMeaning
full-time242Full-time permanent
part-time243Part-time permanent
contract244Contract / Temp
casual245Casual / Vacation
all(omitted)All work types

Input Parameters

{
"country": "au",
"keyword": "software engineer",
"location": "sydney",
"workType": "full-time",
"workArrangement": "hybrid",
"dateRange": "7",
"scrapeDetails": false,
"maxRecords": 200,
"maxPages": 0,
"requestDelay": 1000,
"proxyConfiguration": { "useApifyProxy": true }
}

Parameter reference

ParameterTypeDefaultDescription
startUrlsarray<string>[]Direct SEEK search URLs (e.g. https://au.seek.com/software-engineer-jobs/in-sydney). When provided, overrides all other filters.
countrystringauSEEK market: au (seek.com.au) or nz (seek.co.nz).
keywordstring""Job title or free-text keyword. Examples: software engineer, registered nurse, data analyst, civil engineer, accountant. Spaces auto-converted to hyphens.
locationstring""City, state, region or remote. Examples: sydney, melbourne, brisbane, perth, adelaide, auckland, wellington, all-nsw, all-vic, all-qld, all-wa, remote. Empty = nationwide.
workTypestringallfull-time, part-time, contract, casual, or all.
workArrangementstringallonsite, hybrid, remote, or all. Filtered post-fetch from listing card text.
dateRangestring0Only listings from the last N days. Valid: 0 (all time), 1, 3, 7, 14, 31.
scrapeDetailsbooleanfalseWhen true, the actor fetches each job detail page for the full description, skills list, screening questions, visa-sponsorship inference, and a second-pass salary extraction from description text. ~3-4× slower but unlocks the richest fields.
maxRecordsinteger0Cap on total jobs returned. 0 = unlimited. SEEK caps any single search facet at ~550 results — for larger pulls, fan out multiple runs by city or classification.
maxPagesinteger0Cap on pagination depth. 0 = unlimited. ~22 results per page.
requestDelayinteger1000Milliseconds between requests. 1000–2000 ms recommended; raise to 3000+ if you hit 429s.
proxyConfigurationobject{ useApifyProxy: true }Apify proxy settings. Datacenter (SHADER) is sufficient — residential is not required for SEEK.

Output Schema

Every record is a flat JSON object using the same shape regardless of country (AU or NZ), so a single downstream consumer can ingest both markets without per-country branching.

Core listing fields

FieldTypeDescription
jobIdstringSEEK's internal job identifier (numeric, 6+ digits)
titlestringJob title as posted (e.g. Senior Software Engineer)
companystringEmployer or recruiting agency name
companyLogostringURL to advertiser branding image (when present)
listingUrlstringCanonical job-detail URL on SEEK
listedAtstringPosting age string as displayed (e.g. 2d ago, Listed 14 hours ago)
isFeaturedbooleantrue for premium / featured / sponsored placements
agentNamestringRecruiter / agent name when listed via agency (else null)
scrapedAtstringISO-8601 UTC timestamp the record was extracted

Location fields

FieldTypeDescription
locationstringRaw location string as posted (e.g. Surry Hills, Sydney NSW)
citystringParsed city (e.g. Sydney, Melbourne, Auckland)
statestringParsed AU state code (NSW, VIC, QLD, WA, SA, TAS, ACT, NT) — null for NZ regions
postcodestring4-digit AU postcode when present in the location string

Classification fields

FieldTypeDescription
classificationstringTop-level SEEK industry (e.g. Information & Communication Technology)
subClassificationstringSecond-level taxonomy (e.g. Developers/Programmers)
workTypestringFull time, Part time, Contract/Temp, Casual
workArrangementstringOn-site, Hybrid, Remote, or null

Compensation fields

FieldTypeDescription
salaryRawstringOriginal salary text as posted (e.g. $120,000 – $150,000 + super)
salaryMinnumberParsed lower bound in dollars
salaryMaxnumberParsed upper bound in dollars
salaryPeriodstringannual, hourly, daily, or monthly
salaryHasSuperbooleantrue if salary is plus / inclusive of / explicitly mentions superannuation; false if explicitly excluded; null if unspecified

Sponsorship & content fields (populated when scrapeDetails: true)

FieldTypeDescription
visaSponsorshipstringexplicit_sponsorship, open_to_sponsorship, no_sponsorship, or null
descriptionstringFull job description with HTML stripped
bulletsarray<string>Selling-point bullets shown on the listing card
skillsarray<string>Structured skills list when SEEK exposes one
screeningQuestionsarrayPre-screening questions when present

Example: AU software-engineering listing

{
"jobId": "78234511",
"title": "Senior Software Engineer (Backend Go/Rust)",
"company": "Atlassian",
"companyLogo": "https://image-service-cdn.seek.com.au/logo/atlassian.png",
"location": "Sydney NSW",
"city": "Sydney",
"state": "NSW",
"postcode": "2000",
"classification": "Information & Communication Technology",
"subClassification": "Developers/Programmers",
"workType": "Full time",
"workArrangement": "Hybrid",
"salaryRaw": "$170,000 – $200,000 + super",
"salaryMin": 170000,
"salaryMax": 200000,
"salaryPeriod": "annual",
"salaryHasSuper": true,
"visaSponsorship": "explicit_sponsorship",
"bullets": [
"Greenfield platform team",
"Hybrid: 2 days in Sydney CBD office",
"Visa sponsorship available for the right candidate"
],
"description": "We're hiring a senior backend engineer to join our platform team in Sydney…",
"skills": ["Go", "Rust", "PostgreSQL", "Kafka", "AWS"],
"isFeatured": true,
"agentName": null,
"listingUrl": "https://au.seek.com/job/78234511",
"listedAt": "2d ago",
"scrapedAt": "2026-05-16T03:14:22.481Z"
}

Example: NZ healthcare listing (no salary disclosed)

{
"jobId": "78219003",
"title": "Registered Nurse — ICU (Night Shifts)",
"company": "Auckland District Health Board",
"companyLogo": null,
"location": "Auckland",
"city": "Auckland",
"state": null,
"postcode": null,
"classification": "Healthcare & Medical",
"subClassification": "Nursing - Critical Care & Emergency",
"workType": "Full time",
"workArrangement": "On-site",
"salaryRaw": null,
"salaryMin": null,
"salaryMax": null,
"salaryPeriod": null,
"salaryHasSuper": null,
"visaSponsorship": "open_to_sponsorship",
"bullets": [
"Aotearoa's largest tertiary hospital",
"Relocation support for international candidates",
"12-hour rotating shift roster"
],
"description": "Auckland DHB is recruiting experienced ICU RNs…",
"skills": null,
"isFeatured": false,
"agentName": null,
"listingUrl": "https://www.seek.co.nz/job/78219003",
"listedAt": "5h ago",
"scrapedAt": "2026-05-16T03:14:22.481Z"
}

Reference Tables

Visa sponsorship signal levels

ValueTrigger phrases (excerpt)Meaning
explicit_sponsorshipvisa sponsorship, 482 visa, TSS visa, 186 visa, ENS nomination, will sponsor, sponsorship provided, offering sponsorship, sponsor the right candidateEmployer explicitly states sponsorship is on offer
open_to_sponsorshipsponsorship considered, may consider sponsorship, open to sponsorship, international candidates, overseas candidates welcome, PR pathway, permanent residency pathway, skilled migrationEmployer signals openness — candidate-specific decision
no_sponsorshipAustralian citizens only, must have working rights, no sponsorship, not able to sponsor, will not sponsor, Australian or New Zealand citizen, must hold a valid visaEmployer rules out sponsorship — local working rights required
null(no signal detected)Description is silent on sponsorship — use cautiously

Salary period values

ValueMeaningDetection patterns
annualPer annum (default)Default when no other period detected; pa, p.a., per annum, annually
hourlyPer hourper hour, /hr, p.h., hourly
dailyPer dayper day, /day, daily
monthlyPer monthper month, /month, monthly

Australian state codes returned in state

CodeState / Territory
NSWNew South Wales
VICVictoria
QLDQueensland
WAWestern Australia
SASouth Australia
TASTasmania
ACTAustralian Capital Territory
NTNorthern Territory

New Zealand listings return state: null and rely on city (e.g. Auckland, Wellington, Christchurch, Hamilton, Tauranga, Dunedin) for regional segmentation.

SEEK top-level classifications (sample of the most populous)

ClassificationSub-classifications include
Information & Communication TechnologyDevelopers/Programmers, Engineering - Software, Architects, Database Dev/Admin, Help Desk & IT Support
Healthcare & MedicalNursing, Medical Specialists, General Practitioners, Allied Health, Aged Care
Trades & ServicesElectricians, Plumbers, Carpentry & Cabinet Making, Air Cond/Refrig, Automotive Trades
ConstructionProject Management, Estimating, Foreperson/Supervisor, Surveying, Health & Safety
Mining, Resources & EnergyMining Operations, Oil & Gas Engineering, Mining Engineering, Mining Health & Safety
Education & TrainingChildcare & Outside School Hours Care, Teaching - Primary, Teaching - Secondary, Tertiary Education
Hospitality & TourismChefs/Cooks, Front Office & Guest Services, Bar & Beverage Staff, Management
SalesAccount & Relationship Management, Sales Representatives/Consultants, New Business Development
EngineeringCivil/Structural Engineering, Electrical/Electronic Engineering, Mechanical Engineering, Project Engineering
Banking & Financial ServicesBanking - Business, Banking - Retail/Branch, Financial Planning, Mortgages, Risk Management

Use Cases

Recruiter Intelligence & Talent Sourcing

In-house TA teams and external agencies use SEEK data to:

  • Build live talent-pool maps by city × classification × work-arrangement (e.g. every hybrid backend engineer role in Sydney posted in the last 7 days)
  • Benchmark posting velocity — how many ICU RN jobs went live this week vs last across Greater Melbourne hospital networks
  • Reverse-engineer competitor hiring strategy — when Atlassian, Canva, or Xero pivot to remote-first, the change appears in SEEK postings within days
  • Pre-qualify candidates with current advertised salary ranges so offers don't anchor to outdated data
  • Identify net-new employers entering a market by diffing this week's company list against last week's

HR Market Pricing & Compensation Benchmarking

Compensation teams, total-rewards consultants, and HRIS analysts use the structured salaryMin / salaryMax / salaryHasSuper fields to:

  • Price open roles against live ANZ market medians by classification × city × seniority
  • Validate vendor surveys (Mercer, Aon, Korn Ferry, Hays Salary Guide) against real-time SEEK postings
  • Model super-inclusive vs exclusive comp — Australia's 11.5% SG modifier materially shifts apples-to-apples comparisons
  • Quantify the remote-pay-premium by comparing on-site vs remote vs hybrid salary distributions for the same role
  • Track wage inflation quarter-over-quarter using archived scheduled runs

Candidate Offer Prep & Career Coaching

Career coaches, exec-search consultants, and individual candidates use SEEK data to:

  • Anchor a counter-offer with 50–200 comparable listings showing current market range
  • Identify negotiation leverage — roles paying + super vs inclusive of super differ by ~10% in take-home
  • Decide between cities — pre-move comp comparisons (Sydney vs Melbourne vs Brisbane vs Perth)
  • Target sponsorship-friendly employers by filtering for visaSponsorship: explicit_sponsorship

Talent Supply & Demand Analytics

Workforce-strategy consultancies, government economic-development agencies, and academic labour-economists use SEEK to:

  • Quantify skills gaps — count Cybersecurity Engineer openings nationally vs estimated supply from university completions
  • Map regional demand — heatmap construction PM vacancies across Perth vs Brisbane vs the regional WA mining belt
  • Track classification rotation — measure the year-on-year shift from on-site retail to fulfilment / logistics
  • Power workforce-planning dashboards for state government skills initiatives (Jobs and Skills Australia, NZ MBIE)
  • Detect emerging job titles before they appear in BLS-equivalent taxonomies

Immigration & PR-Pathway Research

Migration agents, immigration lawyers, education agents, and prospective migrants use SEEK to:

  • Identify Subclass 482 / TSS / 186 ENS sponsor employers filtered by visaSponsorship: explicit_sponsorship
  • Build sponsor lists by ANZSCO occupation code (approximated via SEEK subClassification)
  • Demonstrate genuine market demand for skilled-migration visa applications
  • Advise on regional Designated Area Migration Agreements by querying postings in Adelaide / Darwin / Tasmania / regional NSW
  • Match study-visa graduates with TSMIT-compliant graduate roles

Journalism & Data-Driven Reporting

Business-news desks (AFR, Sydney Morning Herald, NZ Herald, ABC News) and freelance data journalists use SEEK data to:

  • Cover labour-market stories with live numbers — "ICT job openings drop 23% QoQ across Sydney" with primary-source data
  • Quantify return-to-office trends — measure the on-site / hybrid / remote mix month-over-month
  • Investigate wage stagnation by classification and metro
  • Report on visa-sponsorship availability during immigration policy debates

Equity Research & Labour-Market Macro Signals

Sell-side equity analysts, hedge-fund alt-data teams, and macro researchers use ANZ job-posting velocity as a high-frequency leading indicator:

  • Read corporate hiring intent — Wesfarmers, Woolworths, Telstra, BHP, Rio Tinto, Fortescue, CBA, Westpac, NAB, ANZ posting velocity is a forward-earnings signal
  • Detect M&A integration signals post-deal close
  • Track tech-sector contraction / expansion ahead of ASX-listed tech earnings prints
  • Build cross-sector hiring indices to validate ABS Labour Force Survey releases
  • Compare ANZ momentum vs US (Levels.fyi / Salary.com) to isolate currency / sovereign risk

Vendor Sales & B2B Lead Generation

SaaS sales teams selling into HR, recruitment, and people-ops use SEEK data to:

  • Identify accounts actively hiring for the buyer-persona role their software solves (e.g. companies hiring DevOps engineers → infrastructure-monitoring SaaS prospect list)
  • Time outreach — companies posting 5+ engineering roles per month are pre-qualified expansion accounts
  • Enrich CRM (Salesforce, HubSpot, Pipedrive) with current classification and hiring-volume signals
  • Build territory plans keyed on company hiring activity per metro

Sample Queries & Recipes

Recipe 1: All Sydney tech jobs posted in the last 7 days

{
"country": "au",
"keyword": "software engineer",
"location": "sydney",
"workType": "full-time",
"dateRange": "7",
"scrapeDetails": true,
"maxRecords": 500
}

Recipe 2: Every visa-sponsorship-explicit role across all of NSW

Pull broadly, then filter downstream on visaSponsorship:

{
"country": "au",
"keyword": "",
"location": "all-nsw",
"dateRange": "14",
"scrapeDetails": true,
"maxRecords": 1000
}
sponsored = [j for j in items if j["visaSponsorship"] == "explicit_sponsorship"]

Recipe 3: Hybrid data-analytics roles across all five mainland AU capitals

Run the actor five times in parallel, varying the location:

{
"country": "au",
"keyword": "data analyst",
"location": "melbourne",
"workArrangement": "hybrid",
"workType": "full-time",
"dateRange": "7"
}

Repeat with location of sydney, brisbane, perth, adelaide.

Recipe 4: New Zealand registered-nurse market scan

{
"country": "nz",
"keyword": "registered nurse",
"location": "",
"workType": "full-time",
"dateRange": "31",
"scrapeDetails": true
}

Recipe 5: Contract / day-rate roles only (consultancy / IT contractor market)

{
"country": "au",
"keyword": "project manager",
"location": "all-vic",
"workType": "contract",
"dateRange": "7"
}

Then filter for daily-rate postings:

day_rates = [j for j in items if j.get("salaryPeriod") == "daily"]

Recipe 6: Remote-only ANZ roles for compensation benchmarking

{
"country": "au",
"keyword": "",
"location": "remote",
"workArrangement": "remote",
"scrapeDetails": true,
"maxRecords": 500
}

Recipe 7: Direct-URL fan-out (advanced)

Pre-build your own faceted SEEK URL list (city × classification) and process the lot in one run:

{
"startUrls": [
"https://au.seek.com/jobs/in-sydney?classification=6281",
"https://au.seek.com/jobs/in-melbourne?classification=6281",
"https://au.seek.com/jobs/in-brisbane?classification=6281",
"https://au.seek.com/jobs/in-perth?classification=6281",
"https://www.seek.co.nz/jobs/in-auckland?classification=6281"
],
"scrapeDetails": false,
"maxRecords": 0
}

Integration Examples

Google Sheets (via Apify Integration)

  1. Set up an Apify Schedule to run this actor every morning at 8:00 AEST
  2. Add the "Save to Google Sheets" integration to the schedule
  3. Wake up to a refreshed ANZ jobs sheet — pivot by city, classification, salaryMin and share across your TA / comp team

Make.com / Zapier / n8n

Use the native Apify connector on any major automation platform. Useful triggers:

  • New listings (today's run minus yesterday's run) → Slack channel
  • New explicit_sponsorship postings → Slack channel for migration-agent team
  • Salary outliers (top decile for a subClassification) → spreadsheet + Slack alert
  • Specific company starting to hire (e.g. company == "Canva") → CRM task

Power BI / Tableau / Looker

Connect the Apify REST API as a live data source. Refresh nightly. Build dashboards covering:

  • Active job count per AU state / NZ region
  • Median salary by classification × city × month
  • Visa-sponsorship availability heatmap
  • On-site vs hybrid vs remote distribution by metro
  • Top-50 employers by posting volume per quarter

Postgres / Snowflake / BigQuery

Use the Apify webhook integration to POST run results directly to your warehouse ingestion endpoint after every scheduled run. Suggested table partitioning: scrapedAt date + country + state for AU, scrapedAt + country + city for NZ.

Salesforce / HubSpot CRM Enrichment

Run nightly, then upsert against Account records keyed on company. Trigger workflow actions on:

  • Posting count surge (5+ new openings in a week) → assign SDR
  • New office in a new metro → re-territory the account
  • Specific subClassification postings matching ICP → create Opportunity

ATS / Recruiting Platforms (Greenhouse, Lever, Workable, JobAdder)

Bulk-import live SEEK postings as competitive intelligence; tag each company so recruiters see "this company also has 12 open roles on SEEK" alongside their internal pipeline.

Webhooks → custom services

Configure an Apify webhook to POST the dataset URL to your own service on ACTOR.RUN.SUCCEEDED. Pair with the Apify Dataset SDK for streaming reads.


Major ANZ Markets & Regional Coverage

Metro / RegionCountryApprox. metro pop.Why it matters
SydneyAU5.4MLargest tech, finance and professional-services hub — Atlassian, Canva, CBA, Macquarie, Westpac
MelbourneAU5.2MTech, healthcare, education and culture capital — REA Group, MYOB, Telstra, NAB
BrisbaneAU2.6MMining HQs, infrastructure, Olympics 2032 build-out — BHP, Rio, Suncorp
PerthAU2.2MMining and resources epicentre — Fortescue, Woodside, South32
AdelaideAU1.4MDefence, space, advanced manufacturing — BAE, ASC, Naval Group
CanberraAU0.5MFederal government, defence, public-service consulting
DarwinAU0.15MDefence, energy, regional designated migration area
NewcastleAU0.5MHeavy industry, energy transition, Hunter Valley wine
AucklandNZ1.7MLargest NZ city — finance, tech, healthcare, supply-chain HQs
WellingtonNZ0.4MCapital — government, film/VFX (Weta), tech (Xero)
ChristchurchNZ0.4MRebuild-era construction, agritech, aerospace (Rocket Lab)
HamiltonNZ0.18MAgritech, dairy science, regional health
TaurangaNZ0.16MBay of Plenty horticulture, port logistics
DunedinNZ0.13MOtago University, healthcare, biotech

Cost & Performance

MetricValue
Enginegot-scraping + Cheerio (HTTP, no headless browser)
Runtime (50 listings, no detail pages)30–60 seconds
Runtime (500 listings + detail pages)8–15 minutes
Cost per run (default Apify proxy)Pay-per-event, typically under $0.10 for a 500-listing scrape
Pricing modelPay-per-event — actor-start + per-dataset-item
Data freshnessLive at run time (SEEK is a live marketplace)
Auth requiredNone — no SEEK login, no API key
Proxy requiredDatacenter sufficient (Apify SHADER pool); residential not required
ConcurrencySafe to run multiple parallel jobs across different country × location × keyword facets
Memory footprint128–512 MB sufficient (1024 MB cap configured)
Rate-limit handlingExponential back-off on 429, up to 3 retries per page with session rotation
Pagination ceiling~22 listings/page × ~25 pages = ~550 results per search facet (SEEK platform cap — fan out by location / keyword to escape)

  • Public data only — every field in this dataset is published by SEEK at seek.com.au and seek.co.nz and is publicly accessible without authentication
  • No PII / no candidate data — this actor scrapes employer-published job postings, not candidate profiles or résumés
  • No emails / no phone numbers are returned by default — SEEK does not surface recruiter contact info on listings
  • Salary figures are employer-published advertised ranges — they are not employee compensation records
  • GDPR / Australian Privacy Act / NZ Privacy Act compliance for downstream use is the consumer's responsibility, particularly around any subsequent merging with candidate-side data
  • The actor honours requestDelay defaults to avoid imposing meaningful load on SEEK's infrastructure
  • ToS deference — SEEK's Terms of Use prohibit certain commercial uses; review SEEK's terms and consult counsel for your specific use case. This actor exists to make public data engineering tractable; it does not authorise any specific downstream application
  • No CAPTCHA solving / no auth bypass — the actor uses only publicly-served HTML pages; if SEEK introduces auth walls on a surface, the actor will return empty for that surface rather than circumventing protection
  • Cross-border data transfers (e.g. AU listing data ingested into US-based warehouses) should be reviewed under the consumer's data-residency policy

Important: This actor extracts public job-posting data. It is not a tool for harvesting candidate personal information, sending unsolicited contact, or any application prohibited by SEEK's Terms of Use or applicable spam / consumer-protection law (Spam Act 2003, NZ Unsolicited Electronic Messages Act 2007, CAN-SPAM, TCPA, GDPR, CCPA).


Frequently Asked Questions

How fresh is the data?

Live at run time. SEEK is a real-time job marketplace — every actor run hits today's inventory. Postings can appear or disappear between consecutive runs on the same day.

How many records can I expect per run?

It depends entirely on your filter combination. A broad query (keyword: "", location: "") can saturate the ~550-result SEEK per-facet cap quickly. A narrow query (software engineer in adelaide) might return 40–80 listings. Across all classifications, AU + NZ combined currently host 150,000–200,000 active listings at any time.

Does this actor require a SEEK login or API key?

No. SEEK's search and detail pages are publicly accessible. You only need an Apify account.

Does the actor work on the Apify Free Plan?

Yes — full functionality on the free tier for small runs. Pay-per-event pricing means a 50-listing test run costs pennies.

Can I scrape both Australia and New Zealand in one run?

Not in a single run — country is a per-run parameter. Run twice (one with country: "au", one with country: "nz") and merge downstream. Or pass mixed startUrls from both domains directly.

That's SEEK's platform-side pagination ceiling, not an actor limit. To exceed it, fan out across multiple narrower queries (by city, suburb, classification, or keyword variation) and merge the resulting datasets. Deduplication on jobId is handled within each run; across runs, dedupe in your downstream pipeline.

Does SEEK block scrapers or require CAPTCHA?

SEEK uses standard anti-abuse measures (occasional 429 rate-limits, IP reputation checks). The actor handles these with exponential back-off and session rotation via Apify's datacenter proxy pool. Residential proxies are not required.

Does scrapeDetails: true slow things down a lot?

Yes — every job's detail page requires its own HTTP request plus the configured requestDelay. A 500-listing run with detail pages takes roughly 8–15 minutes vs 30–60 seconds without. Only enable it when you need the full description, skills list, or accurate visa-sponsorship inference.

What if salary isn't in the listing card?

The actor's three-tier salary parser tries: (1) structured fields, (2) regex on the listing-card text, (3) regex on the long-form description body (when scrapeDetails: true). Many AU/NZ employers still don't disclose salary publicly; for those, all salary* fields will be null.

What does salaryHasSuper actually tell me?

In Australia, employer superannuation (currently 11.5%, rising to 12% in 2025) is a material modifier. Three states:

  • true — salary is plus / inclusive of / explicitly mentions super (read salaryRaw to disambiguate)
  • false — salary explicitly excludes super
  • null — silent on super (assume base-only for AU listings)

For total-comp comparisons, multiply base by 1.115 (AU) when salaryHasSuper is false or null to estimate super-inclusive equivalent.

Can I filter by NZ region (Auckland, Wellington, Canterbury)?

Yes — pass country: "nz" and location: "auckland" / "wellington" / "christchurch" / "all-canterbury" etc. NZ doesn't use AU-style state codes, so state will be null and you rely on city for segmentation.

Can the actor detect ANZSCO occupation codes?

Not directly — SEEK exposes its own classification / subClassification taxonomy, not ANZSCO. You can build a mapping table downstream (ANZSCO 261313 Software Engineer ↔ SEEK Developers/Programmers, etc.) for migration / visa workflows.

Can I run this on a schedule automatically?

Yes — use Apify's built-in Scheduler with any cron expression. Daily 8am Sydney time is a common cadence for recruitment-intel dashboards. Combine with the Webhook integration for fully automated pipelines.

What formats can I export the data in?

JSON, CSV, Excel (XLSX), HTML, XML, RSS — all directly from the Apify dataset view. The API also supports JSON Lines for streaming consumers.

How do I handle SEEK schema changes?

The actor already attempts five different __NEXT_DATA__ paths plus DOM fallback parsing. If SEEK ships a breaking change, open an issue on the actor's Apify Store page — schema-drift fixes are typically shipped within 24–48 hours.

Can I get historical SEEK listings?

Not from SEEK directly — SEEK doesn't expose an archive. To build a longitudinal dataset, schedule this actor daily and archive each dataset run; Apify retains run datasets on most plans.

How do I report a bug or request a feature?

Open an issue on the Apify Store actor page or contact the developer directly through the Apify Console. Schema-drift bugs are prioritised.

Does this work for SEEK regional sites in Asia (Indonesia / Philippines / Malaysia)?

No — this actor targets seek.com.au and seek.co.nz only. SEEK has divested most of its Asian properties (JobStreet / JobsDB) into separate brands; coverage for those markets is on the roadmap as a separate actor.


If you need adjacent labour-market, ANZ-geographic, or vertical data sources, these sibling actors pair naturally with the SEEK Scraper:

Jobs, Salary & Careers (direct siblings)

Australia / New Zealand adjacents

Other employer-research / B2B data sources

Global marketplace siblings (for multi-market research)


Comparison vs. Alternatives

ApproachSetup timeData freshnessSalary parsingVisa-sponsorship signalCost (500 listings)
This actor< 1 minuteLive at runThree-tier + super flagThree-tier text inferenceUnder $0.10
Manual SEEK browsing + copy-pasteHoursLiveNoneNoneFree + your time
Custom Playwright scraper2–5 days devLiveDIYDIYFree + infra + maintenance
Custom Cheerio + got scraper1–2 days devLiveDIYDIYFree + infra + maintenance
Paid recruitment-data API (e.g. LinkUp, Adzuna, Greenhouse Job Board partners)Hours setupDaily / weeklySometimesRarely$500–5,000+/month minimums
SEEK Recruiter native toolsAccount setupLiveAggregatedNonePaid SEEK Recruiter subscription

Why Pay-Per-Event Pricing?

Most data scrapers either charge a flat monthly subscription (you pay even when idle) or per-Compute-Unit (unpredictable). This actor uses pay-per-event, which means:

  • You only pay when the actor runs and produces data
  • Charges scale linearly with how many job records you actually consume
  • Transparent line-item billing inside the Apify Console
  • No monthly minimums — sample with maxRecords: 20 for pennies before committing
  • Predictable unit economics for downstream products that bill per job-record consumed

Changelog

VersionDateNotes
1.0.02026-05Initial public release — AU + NZ coverage, __NEXT_DATA__ + DOM fallback parsing, three-tier salary parser, super-flag detection, three-tier visa-sponsorship inference, optional detail-page enrichment, datacenter-proxy support

Keywords

SEEK scraper · SEEK jobs data · SEEK Australia scraper · SEEK New Zealand scraper · seek.com.au scraper · seek.co.nz scraper · Australia job listings API · NZ jobs scraper · Sydney Melbourne salary data · SEEK salary scraper · ANZ recruitment data · SEEK API alternative · Australian job market data · NZ job market data · Sydney jobs scraper · Melbourne jobs scraper · Brisbane jobs scraper · Perth jobs scraper · Adelaide jobs scraper · Auckland jobs scraper · Wellington jobs scraper · Christchurch jobs scraper · 482 visa sponsor list · TSS visa employer scraper · 186 ENS sponsor list · PR pathway employer data · Australian salary benchmark · NZ salary benchmark · Australian compensation data · ANZ HR market pricing · ANZSCO occupation data · SEEK classification taxonomy · Australia hybrid jobs data · Australia remote jobs data · superannuation salary parser · plus super vs inclusive super · SEEK job board API · Australia recruitment intelligence · NZ recruitment intelligence · Apify SEEK actor · SEEK data extraction · SEEK lead generation · ANZ workforce planning data · skilled migration sponsor list · candidate offer benchmark Australia · talent supply demand ANZ · equity research labour market Australia · job posting velocity alt-data · SEEK competitor intelligence · TA market intelligence ANZ


Support

  • Bug reports: Use the Issues tab on the Apify Store page
  • Feature requests: Same place — please describe your use case and target market (AU / NZ / both)
  • Direct contact: Through the Apify developer profile

If this actor saves your recruiting, HR, comp, or research team time, a 5-star rating on the Apify Store helps other ANZ-focused operators discover it. Thank you!