SEEK Jobs, Salary & Skills Analyzer
Pricing
from $2.50 / 1,000 job analyseds
SEEK Jobs, Salary & Skills Analyzer
Scrape SEEK job listings across Australia and New Zealand with salary analysis, skills intelligence and market research data. Automatically gets past SEEK's 550-result search limit, deduplicates by job ID, and returns a market summary with median salaries, top skills and seniority breakdown.
Pricing
from $2.50 / 1,000 job analyseds
Rating
0.0
(0)
Developer
Zapticx
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
21 hours ago
Last modified
Categories
Share
SEEK Jobs, Salary & Skills Analyzer — Australia & New Zealand
Scrape SEEK job listings with salary analysis, skills intelligence and market research data. Covers SEEK Australia and SEEK New Zealand, returns clean job records with full descriptions, and adds a structured market summary: median salaries, salary percentiles, top skills with frequencies, seniority mix and work-arrangement breakdown.
Built by Zapticx.
Two things set it apart from a plain SEEK scraper:
- It gets past SEEK's 550-result search limit. SEEK returns at most 550 results for any one search. This Actor automatically splits a large search across SEEK's own filters and merges the results, deduplicated by job ID. A search of 1,774 jobs that a normal scraper truncates at 550 returns 1,803 unique jobs here — 3.3× the data.
- It never passes a guess off as an employer's salary. Salary figures come only from what the employer actually published, parsed from real salary text and labelled with a parse confidence.
What you can do with it
| Use case | How |
|---|---|
| Salary benchmarking | Median, mean and p10–p90 salary percentiles for any role, location or industry — annualised so hourly and salaried ads compare directly. |
| Skills demand analysis | Which skills appear in which share of ads for a role, across tech, healthcare, trades, finance, sales and admin. |
| Recruitment market research | Who is hiring, how many roles, at what seniority, on-site vs hybrid vs remote. |
| Competitor hiring intelligence | Track a company's live ads, their salary bands and the skills they are buying. |
| Job board / aggregator feeds | Bulk, deduplicated job data with canonical URLs and full descriptions. |
| Talent supply and pay-gap studies | Compare pay and skills between Australia and New Zealand, or between states and cities. |
| Lead generation for recruiters | Employers actively advertising, with advertiser IDs and company profile links. |
Quick start
{"keywords": "registered nurse","country": "AU","location": "Sydney NSW","maxResults": 200,"datePosted": "Last 30 days","fetchDescriptions": true}
Every enumerated field is validated against a verified allow-list before any request is made. SEEK does not reject unknown filter values — it silently ignores them and returns the entire ~160,000-job corpus with an HTTP 200. A typo would otherwise cost you a full run and hand back confidently wrong data. Instead you get an immediate, specific error naming the valid options.
More input examples
Whole-country salary benchmark, past the 550 cap
{ "keywords": "software engineer", "country": "AU", "maxResults": 2000 }
Remote roles only, last week
{"keywords": "data analyst", "country": "AU","workArrangement": "Remote", "datePosted": "Last 7 days", "maxResults": 300}
A whole industry in New Zealand
{"country": "NZ", "classification": "Healthcare & Medical","maxResults": 1000, "sortMode": "Date"}
Fast bulk listing without descriptions (about 10× cheaper and faster)
{ "keywords": "warehouse", "country": "AU", "maxResults": 5000,"fetchDescriptions": false }
Output example — one job
{"jobId": "94506219","title": "Software Engineer","canonicalUrl": "https://au.seek.com/job/94506219","country": "AU","company": "Murdoch Children's Research Institute","advertiserId": "20759263","advertiserVerified": true,"location": "Parkville, Melbourne VIC","suburb": "Parkville", "state": "Victoria", "postcode": "3052","classification": "Information & Communication Technology","subclassification": "Engineering - Software","employmentType": "Contract/Temp","workArrangement": "On-site","salaryDisclosed": true,"salaryText": "$90,521 - $113,587 p.a plus super","salaryMin": 90521, "salaryMax": 113587,"salaryCurrency": "AUD", "salaryType": "annual","salaryMidpoint": 102054,"annualizedSalaryMin": 90521, "annualizedSalaryMax": 113587,"salaryParseConfidence": "high","skills": ["Python", "TypeScript", "SQL", "React", "AWS", "Terraform", "CI/CD"],"skillCategories": ["Programming", "Data", "Frameworks", "Cloud & DevOps"],"seniority": null,"yearsExperience": null,"remoteType": "onsite","postedDate": "2026-09-08T23:35:10Z","description": "Job description: Role Type: 12-month Full Time Contract ...","searchQuery": "software engineer","scrapedAt": "2026-09-10T04:21:07+00:00"}
Output example — the market summary
One MARKET_SUMMARY record per run, free of charge:
{"recordType": "MARKET_SUMMARY","country": "AU","searchQuery": "registered nurse","totalUniqueJobsAnalyzed": 500,"salaryDisclosedCount": 132,"salaryDisclosedCoveragePct": 26.4,"medianDisclosedAnnualSalary": 98035.75,"meanDisclosedAnnualSalary": 101204.10,"disclosedSalaryPercentiles": {"p10": 84082, "p25": 89083, "p50": 98036, "p75": 98800, "p90": 125300},"disclosedSalaryRange": { "min": 61000, "max": 210000 },"topSkills": [{ "skill": "Registered Nurse", "count": 480, "pctOfJobs": 96.0 },{ "skill": "AHPRA Registration", "count": 340, "pctOfJobs": 68.0 },{ "skill": "Aged Care", "count": 170, "pctOfJobs": 34.0 }],"seniorityDistribution": { "unspecified": 260, "senior": 150, "manager": 62 },"workArrangementDistribution": { "On-site": 402, "Hybrid": 76, "Remote": 22 },"remoteTypeDistribution": { "onsite": 402, "hybrid": 76, "remote": 22 },"yearsExperienceStated": { "count": 96, "median": 3.0 },"coverage": {"reportedJobs": 9075,"uniqueJobsCollected": 500,"rawJobsCollected": 543,"duplicatesRemoved": 43,"partitionsUsed": 6,"partitionsTruncated": 0,"collectionCompleteWithinPartitions": true,"reportedTotalIsApproximate": true}}
How salary analysis works
This is the part most job scrapers get wrong, so it is worth being precise.
Only about 30–40% of SEEK listings publish a salary at all. That is SEEK's data, not a limitation here. For the ones that do:
salaryTextis what the employer wrote, kept verbatim.salaryMin/salaryMaxare parsed from that text and only from that text. The parser was built against 1,618 distinct real SEEK salary strings and reads 82.9% of them into numbers — including awkward real formats like$90,521 - $113,587 p.a plus super,$37 – $45 per hour,$140-150K,$129,048.40 – $177,622.12 per yearand$900-$1000/day.salaryParseConfidence(high/medium/low) tells you how clean the read was, so you can filter to high-confidence figures for benchmarking.- Text like "Competitive salary" or "Award Rate" sets
salaryDisclosed: falsewith null figures. It is not a salary and is never treated as one. annualizedSalaryMin/annualizedSalaryMaxconvert hourly, daily and weekly rates to an annual figure (38-hour week, 52 weeks) so everything is comparable. If the period cannot be determined, these stay null rather than guessing.- Market statistics use disclosed salaries only, and are suppressed rather than published as noise when the sample is too small — fewer than 5 comparable salaries for a median, fewer than 20 for percentiles.
How the 550-result limit is handled
SEEK enforces a hard cap: a search returns results only while
page × pageSize ≤ 550. Past that it replies with an empty page and no error,
so a naive scraper silently stops at 550 and reports success.
When you ask for more than that, this Actor splits your search across SEEK's own filters — work arrangement, then employment type, then industry, then sub-industry, then salary band — recursing until every slice fits inside the window, then merges everything and deduplicates by SEEK job ID. You are never charged twice for the same job.
The coverage block reports exactly what happened: partitions used, raw vs
unique jobs, duplicates removed, and whether any slice was left unreachable.
One caveat reported honestly: SEEK's own result counts are approximate and
sometimes understate reality — a New Zealand search reporting 94 jobs returned
528 real, unique ones. So reportedJobs is published as context only, never
used as a denominator, and never used to decide when to stop collecting.
Skills, seniority and experience
Extracted deterministically — dictionary and pattern matching, no LLM. That means reproducible, explainable results at no per-job cost.
The taxonomy is cross-sector: technology, healthcare, trades and safety tickets, finance, sales and marketing, administration, and general workplace skills. It is tuned for precision over recall, because a wrong skill silently corrupts the aggregate frequencies. "You will excel in this role" does not count as Microsoft Excel; "Good Clinical Practice (GCP)" does not count as Google Cloud; a "Reconciliation Action Plan" does not count as bookkeeping.
seniority is read from the job title and role-framing phrases only, so an ad
that mentions reporting to the Head of Engineering does not get classified as an
executive role. yearsExperience is populated only when the ad states a number
explicitly.
Performance and pricing
| Search | Unique jobs | Requests | Runtime | Peak memory |
|---|---|---|---|---|
| 50 jobs, descriptions on | 50 | 63 | 16s | 42 MB |
| 500 jobs, descriptions on | 500 | 535 | 83s | 59 MB |
| 1,000 jobs, descriptions on | 1,000 | 1,036 | 153s | 75 MB |
| 2,000 jobs, descriptions off | 2,000 | 63 | 33s | 68 MB |
Pricing is pay-per-event: $0.005 per run start, $0.0025 per unique job.
The MARKET_SUMMARY record is free. Deduplicated jobs are charged once — if a
job is reachable through three different partitions, you pay for it once.
1,000 jobs with full descriptions, skills and salary analysis costs $2.51.
Input reference
| Field | Type | Notes |
|---|---|---|
keywords | string | Job title, skill or company. Empty = everything matching your filters. |
country | AU / NZ | Which SEEK market. |
location | string | e.g. Sydney NSW, All Melbourne VIC, All Auckland. Empty = whole country. |
maxResults | integer | Unique jobs to return. Above 550 triggers automatic partitioning. |
fetchDescriptions | boolean | Full descriptions for skills analysis. Default on. |
workType | select | Full time, Part time, Contract/Temp, Casual/Vacation. |
workArrangement | select | On-site, Hybrid, Remote. |
classification | select | One of SEEK's 30 industries. |
subclassification | select | Narrower category, as Industry > Sub-category. |
datePosted | select | Any time, Last 3 / 7 / 14 / 30 days. |
salaryMin / salaryMax | integer | Annual. SEEK matches on overlap. |
sortMode | select | Relevance or Date. |
proxyConfiguration | proxy | Optional; not required. |
Limitations
- Salary is disclosed on only ~30–40% of listings. Statistics are computed on that subset and the sample size is always reported.
- Median and percentile statistics are suppressed on small samples rather than published as noise.
- SEEK's result counts are approximate, especially for New Zealand. Treat
reportedJobsas context, not a target. - A single search cannot exceed 550 results without partitioning, and a
slice that still exceeds the window after every filter has been applied will
be reported as truncated in
partitionsTruncated. - Skills come from the job description, so running with
fetchDescriptions: falsegives much weaker skills analysis. - Jobs that expire mid-run resolve without a description. This is normal and does not fail the run.
- Keyword matching is SEEK's, not ours. SEEK returns semantically related roles at depth, so a large harvest for "manager" will include senior roles that do not contain the literal word.
Data source, terms and your responsibility
This Actor is an independent tool built by Zapticx. It is not affiliated with, endorsed by, sponsored by, or connected to SEEK Limited or any SEEK company. "SEEK" is a trademark of its owner and is used here only to describe what this tool reads.
It collects employer-published job advertisements. It does not collect candidate profiles, applicant data, or any content behind a login.
How it accesses SEEK. It reads undocumented JSON endpoints that SEEK's own website uses. These are not an official, public or supported SEEK API, and SEEK's developer programme does not offer job-listing retrieval. Because the endpoints are undocumented, no continued availability is promised — SEEK may change or withdraw them at any time and without notice, and this Actor may stop working as a result. When that happens the Actor detects the change and fails loudly rather than returning a partial or misfiltered dataset.
SEEK's Website Terms and Conditions restrict automated access. Section 9(b) states that you must not use, or assist anyone to use, an automated process, script, tool, bot or scraper to access, query, search, copy, collect, mine or harvest information through SEEK's services, except through a technical interface SEEK has provided for that purpose. Section 7(d) prohibits data mining, robots and screen scraping except with SEEK's prior written consent.
You are responsible for your own use of this Actor and of the data it returns, including reviewing SEEK's current terms, obtaining any consent you require, and complying with applicable law — including the Australian Privacy Act and the New Zealand Privacy Act where any personal information (such as a named contact in an advertisement) is involved, and any anti-spam rules in your jurisdiction. If you are unsure whether your intended use is permitted, get legal advice before running it.
This Actor does not bypass authentication, does not solve or evade CAPTCHAs or bot-detection challenges, and does not access any part of SEEK that requires a login.
Support
If a run fails, the status message says what went wrong and whether the cause was your input, SEEK, or a genuinely empty result — those three are never reported as the same thing.
SEEK scraper · SEEK job scraper · SEEK API alternative · Australia job data · New Zealand job data · salary data scraper · job market research · recruitment data · skills demand analysis · seek.com.au scraper · seek.co.nz scraper · AU/NZ hiring intelligence. Built by Zapticx.