SEEK Jobs Scraper: Australia Salaries & New Job Alerts
Pricing
from $1.04 / 1,000 jobs
SEEK Jobs Scraper: Australia Salaries & New Job Alerts
Get SEEK jobs for software engineers, nurses or sales roles by keyword and city. Receive salary, experience, work mode, posted date and optional company ratings and descriptions. Monitor new jobs daily. About $0.0013 per job; details add $0.0004. 100 detailed jobs cost $0.17. No login.
Pricing
from $1.04 / 1,000 jobs
Rating
0.0
(0)
Developer
mogged
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
For recruiters, staffing teams, job-board operators and labour-market analysts who need a repeatable feed of public Australian job advertisements.
About $0.0013 per job: collecting 100 jobs costs about $0.13. Optional full descriptions add $0.0004 per job, so 100 jobs with descriptions cost about $0.17. A small $0.00005 start fee also applies. Paid-plan discounts reduce these amounts. No login, account cookies or external API key is needed.
Search for software engineers in Sydney, nurses in Brisbane or sales roles in Perth. Receive the displayed employer, location, advertised salary, work arrangement, employment type and exact listing timestamp. Enable a saved watch to build an initial baseline, then receive newly posted, previously unseen job IDs on later runs.
What you get
Each delivered job has a stable jobId and its own source URL. A plain-language verdict comes first, so the Dataset is useful without opening the nested fields. Missing information remains null; undisclosed pay does not become an estimated salary. Recruiter contact sections are removed from description text.
| Field | Meaning |
|---|---|
verdict | Job, displayed company, location, work mode and pay in one sentence |
jobId, url | SEEK listing identifier and canonical job link |
title, company, companyId | Advertised title, displayed company and advertiser ID |
locations | Source location labels, including suburb or region when supplied |
workMode | office, hybrid, remote, or null, from the source arrangement tag |
employmentType | Full time, part time, contract or another source employment label |
salaryText | Advertised salary label, retaining conditions such as bonus or super |
salaryMin, salaryMax | Explicit monetary bounds parsed from that label |
salaryCurrency, salaryPeriod | Explicit currency, otherwise AUD or NZD; year, month, day, hour, or null |
salaryDisclosed | Whether an explicit monetary amount was found |
postedAt, postedAgoText | Source posting timestamp and relative display text |
isNewSinceLastRun | True for a delivered watched job; null when history is disabled |
description | Contact-filtered public description when details are requested |
experienceMin, experienceMax | Explicit years in the description; unknown bounds stay null |
skills | Literal requirement lines below an identifiable Skills heading, when present |
education | Literal description lines mentioning qualifications, when present |
industry, roleCategory | Source classification and subclassification |
companyProfileId, companyIndustry | Company-profile metadata when the detail response supplies it |
expiresAt | Source expiry timestamp when details are available |
detailsIncluded, detailsStatus | Whether a description was delivered and its availability status |
companyRating, companyReviewCount | Public SEEK company-profile rating and review total, with details |
applicants, department, applyUrl | Null when the public response does not supply a verified value |
teaser, bulletPoints | Short source description and selling points |
country, scrapedAt, fieldNotes | Market, observation time and interpretation notes |
An hourly rate stays hourly. An unspecified salary period stays unknown. A recruitment agency remains the displayed company; the Actor does not guess the agency's client. Experience uses explicit description wording; seniority titles do not become numerical ranges.
Start in three steps
- Enter one or more
keywordsand Australianlocations. - Choose a global
maxItemslimit and optionally enable descriptions or a daily watch. - Run the Actor and export the Dataset as JSON, CSV, Excel or another Apify-supported format.
The 20-job prefill finished in 5.7 seconds. A 100-job cloud detail run delivered all 100 descriptions in 132 seconds; 43 jobs had company ratings and 47 had review totals. These are measured examples. Restrictive filters, retries and larger exports can take longer.
{"keywords": ["software engineer"],"locations": ["Sydney"],"maxItems": 20,"includeDetails": false}
Inputs and filtering
| Input | How to use it |
|---|---|
keywords | Array of titles, skills or search terms |
locations | Array of Australian cities or regions; keyword searches default to Sydney |
experienceYears | Strict optional filter using explicitly stated description experience |
salaryMinLakh | Minimum annual lower bound in units of 100,000 local currency |
workMode | Any, office, remote or hybrid |
postedWithinDays | Exact age limit in days, measured against the run's observation time |
companies | Optional case-insensitive substrings of displayed company names |
startUrls | Optional public search, supported category or individual job URLs |
maxItems | Total delivered jobs, from 1 to 5,000; default 20 |
includeDetails | Fetch a description and extra detail fields; default false |
onlyNewSinceLastRun | Enable saved watch history; default false |
watchId | Stable watch name; default default |
proxyConfiguration | Optional custom proxy or direct-connection settings |
salaryMinLakh retains the job Actor family's input name. For SEEK, 1 means AUD 100,000 a year in Australia, or NZD 100,000 for a New Zealand URL. Only disclosed annual lower bounds qualify. A job advertising an hourly rate, only an upper bound, or no pay is excluded by this strict filter. No hidden-salary estimates are used.
The experience filter reads descriptions because SEEK's search response has no structured experience range. Jobs without an explicit qualifying statement are excluded. This can require many detail requests even when few rows qualify. If descriptions are not requested, those filter-only reads do not create a description fee. Use a broad search first to understand coverage before applying this filter to a large export.
Search links, categories and New Zealand
Individual links use https://www.seek.com.au/job/ID. Search links may use /jobs?keywords=nurse&where=Brisbane or the normal keyword path, such as /software-engineer-jobs/in-All-Sydney-NSW.
Four category paths are supported explicitly: /jobs-in-information-communication-technology, /jobs-in-healthcare-medical, /jobs-in-accounting and /jobs-in-engineering. They are mapped to the source classification rather than treated as literal keywords. Unsupported links produce a free note and do not fetch arbitrary websites.
New Zealand uses the same engine through seek.co.nz start URLs. For example:
{"startUrls": ["https://www.seek.co.nz/jobs?keywords=nurse&where=Auckland"],"maxItems": 20}
Manual keyword and location inputs search Australia. Use a New Zealand URL to select that market. A source listing ID is deduplicated across the entire run, even if it appears through more than one URL.
Monitor new jobs every day
Save a task with onlyNewSinceLastRun enabled and a descriptive watchId, then attach an Apify schedule to that task. Keep the same watch name on each run. Different watch names have independent histories, and histories are scoped to this Actor and your Apify account.
{"keywords": ["software engineer"],"locations": ["Sydney"],"maxItems": 100,"onlyNewSinceLastRun": true,"watchId": "sydney-software-daily"}
The first successful run delivers a baseline. Later runs combine saved IDs with the previous observation timestamp, so older jobs beyond the first baseline page are not suddenly reported as fresh. The source search is ordered by posting date. A completed page entirely before the watch timestamp ends that search.
If a later run fills its limit, its timestamp does not advance past an unfinished backlog. Run the same watch again to collect remaining fresh IDs. Failures and a spending-limit stop also retain the previous timestamp. The Actor does not interpret a missing search result as a closed vacancy, and it does not emit changes to an already delivered ID.
Overlapping runs for one watch are blocked by an atomic storage lock. An unfinished earlier run must be resumed before that watch continues. This protects its delivery history after a migration, timeout or interruption. Changing watchId starts an independent baseline; it does not repair or erase the previous history.
Prices and spending limits
| Example | Approximate list-price job charges |
|---|---|
| 20 jobs | $0.026 |
| 100 jobs | $0.13 |
| 100 jobs with full descriptions | $0.17 |
| 1,000 jobs | $1.30 |
| 1,000 jobs with full descriptions | $1.70 |
Bronze receives 5% off, Silver 10%, and Gold or higher 20%. The start fee is separate. Notes, summaries, duplicates, already delivered watch IDs, unavailable jobs and unavailable descriptions have no corresponding job or detail charge. Platform usage is included in the listed Actor prices.
A row is saved before its job charge. Stable charge keys and the Dataset ledger support restart recovery. The Actor checks that the buyer's spending limit can cover the complete row, including requested details, before delivery. It stops cleanly when that limit leaves insufficient room. A spending limit below a complete detailed row can therefore return a free note instead of a partially charged result.
Use through the API
Start an asynchronous run, wait for completion, then read its default Dataset. Keep your token in an environment variable.
curl -X POST \"https://api.apify.com/v2/acts/moggedhq~seek-jobs-scraper/runs" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"keywords":["nurse"],"locations":["Brisbane"],"maxItems":20}'
Use the returned run's defaultDatasetId with /v2/datasets/DATASET_ID/items. Dataset rows with jobId are jobs. Free rows have recordType: "NOTE" or recordType: "SUMMARY". Pipelines should filter on jobId before counting vacancies or importing into a jobs table.
The default key-value store also contains SUMMARY: delivered jobs, new jobs, top companies, salary ranges grouped by currency and pay period, source failures, exclusions and spending-limit status. Do not compare the maximum daily rate with the minimum annual salary; the summary keeps those groups separate.
Use with AI agents (MCP)
Connect an MCP-compatible client to Apify's MCP server. Ask it to find SEEK jobs for a keyword and city, set maxItems, run this Actor and inspect the Dataset. For daily monitoring, have the agent reuse a saved task and watch name. A search request can be as simple as: “Get 20 hybrid software-engineering jobs in Sydney with advertised salaries and posted dates.”
Coverage and honest limits
The Actor reads public signed-out JSON responses. It does not log in, solve human checks, use account cookies or try to access applicant profiles. Browser job pages may present a human check even while the public JSON route remains available. Source refusals are retried serially with fresh sessions, and Retry-After is honoured. A final source refusal becomes a free note or a partial summary.
Each search reads at most 550 source positions. maxItems is a delivered-row cap, not a guarantee that every search can supply that many matching jobs. Broad terms, several cities or separate tasks may provide better coverage than one very restrictive query. A daily watch can miss jobs that appear and disappear between observations, and a backlog beyond the source window cannot be recovered from a current search.
Descriptions are plain text with contact-bearing sections removed. That can remove contextual sentences as well as contact details. The result is suitable for job analysis, not a byte-for-byte archive. Company ratings and review totals come from the public SEEK company profile with details; no individual reviews are collected. Applicant counts remain null. Salary ranges represent the advertisement, not verified compensation or an offer to a particular candidate.
FAQ
Why is a salary null? Many employers omit pay, use a non-numeric phrase or give no reliable range. The original label is retained when present; no estimate fills the gap.
Are description charges automatic? Only when includeDetails is true and a nonempty description is delivered. Unavailable descriptions add no detail charge.
Will a repeated daily run charge for the same jobs again? With a saved watch, previously delivered IDs are skipped. Without a watch, each independent run is a new requested snapshot.
Does a watch find updated or closed jobs? No. It tracks newly posted, unseen IDs within the observed search window. It does not infer closure or emit updated old IDs.
What happens after a reboot? Saved rows are recovered from the Dataset and reconciled with accepted charge counts. The same job row is not intentionally delivered or charged twice in that run.
SEEK jobs, SEEK scraper, Australia jobs and daily new-job monitoring in one consistent job-data feed.