SEEK Jobs Scraper: Australia Salaries & New Job Alerts avatar

SEEK Jobs Scraper: Australia Salaries & New Job Alerts

Pricing

from $1.04 / 1,000 jobs

Go to Apify Store
SEEK Jobs Scraper: Australia Salaries & New Job Alerts

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

mogged

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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.

FieldMeaning
verdictJob, displayed company, location, work mode and pay in one sentence
jobId, urlSEEK listing identifier and canonical job link
title, company, companyIdAdvertised title, displayed company and advertiser ID
locationsSource location labels, including suburb or region when supplied
workModeoffice, hybrid, remote, or null, from the source arrangement tag
employmentTypeFull time, part time, contract or another source employment label
salaryTextAdvertised salary label, retaining conditions such as bonus or super
salaryMin, salaryMaxExplicit monetary bounds parsed from that label
salaryCurrency, salaryPeriodExplicit currency, otherwise AUD or NZD; year, month, day, hour, or null
salaryDisclosedWhether an explicit monetary amount was found
postedAt, postedAgoTextSource posting timestamp and relative display text
isNewSinceLastRunTrue for a delivered watched job; null when history is disabled
descriptionContact-filtered public description when details are requested
experienceMin, experienceMaxExplicit years in the description; unknown bounds stay null
skillsLiteral requirement lines below an identifiable Skills heading, when present
educationLiteral description lines mentioning qualifications, when present
industry, roleCategorySource classification and subclassification
companyProfileId, companyIndustryCompany-profile metadata when the detail response supplies it
expiresAtSource expiry timestamp when details are available
detailsIncluded, detailsStatusWhether a description was delivered and its availability status
companyRating, companyReviewCountPublic SEEK company-profile rating and review total, with details
applicants, department, applyUrlNull when the public response does not supply a verified value
teaser, bulletPointsShort source description and selling points
country, scrapedAt, fieldNotesMarket, 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

  1. Enter one or more keywords and Australian locations.
  2. Choose a global maxItems limit and optionally enable descriptions or a daily watch.
  3. 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

InputHow to use it
keywordsArray of titles, skills or search terms
locationsArray of Australian cities or regions; keyword searches default to Sydney
experienceYearsStrict optional filter using explicitly stated description experience
salaryMinLakhMinimum annual lower bound in units of 100,000 local currency
workModeAny, office, remote or hybrid
postedWithinDaysExact age limit in days, measured against the run's observation time
companiesOptional case-insensitive substrings of displayed company names
startUrlsOptional public search, supported category or individual job URLs
maxItemsTotal delivered jobs, from 1 to 5,000; default 20
includeDetailsFetch a description and extra detail fields; default false
onlyNewSinceLastRunEnable saved watch history; default false
watchIdStable watch name; default default
proxyConfigurationOptional 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.

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

ExampleApproximate 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.