SEEK Job Scraper (AU & NZ) avatar

SEEK Job Scraper (AU & NZ)

Pricing

from $2.00 / 1,000 results

Go to Apify Store
SEEK Job Scraper (AU & NZ)

SEEK Job Scraper (AU & NZ)

Scrape job listings from SEEK (seek.com.au & seek.co.nz) by keyword, location, category and more.

Pricing

from $2.00 / 1,000 results

Rating

5.0

(1)

Developer

Corvuslab

Corvuslab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

SEEK Job Scraper — Australia & New Zealand 🇦🇺 🇳🇿

Extract job listings from SEEK (seek.com.au and seek.co.nz) by keyword, location, category, work type, date or salary — with structured salary data, full descriptions, company profiles, incremental change tracking and built-in notifications.

Great for salary and market research, recruitment intelligence, competitor monitoring, and feeding structured job data into dashboards or AI agents.

Key features

  • 🌏 Two-market coverage — one actor scrapes both SEEK Australia and New Zealand.
  • 🔍 Keyword & batch search — one query or many in a single run, deduplicated by job ID.
  • 🎯 Rich filters — location, classification/sub-classification, work type, work arrangement (on-site/hybrid/remote), "listed in last N days", salary range, and sort by relevance or date.
  • 💰 Structured salarysalaryText parsed into salaryMin / salaryMax / salaryCurrency / salaryType automatically.
  • 📄 Detail enrichment — full description as plain text, HTML and Markdown, plus the company profile.
  • 🔁 Incremental mode — on recurring runs, emit and charge for only NEW / UPDATED / REAPPEARED / EXPIRED jobs. Saves heavily on daily monitoring (see below).
  • ♻️ Repost detection — flag or drop jobs re-listed under a new ID.
  • 🧮 Post-filters — keyword include/exclude, date windows, and custom field rules.
  • 🔔 Notifications — push matching jobs to Telegram, Slack, Discord or a generic JSON webhook when a run finishes.
  • 🧰 AI-friendly outputcompact mode and excludeEmptyFields for lean records.
  • 🔗 Start URLs — paste any SEEK search or job URL straight from your browser.

Input

FieldTypeDescription
querystringKeywords, e.g. "python". Leave blank to browse all jobs.
queriesarrayMultiple keyword searches in one run.
countryenumAU (default) or NZ.
startUrlsarraySEEK search-results or /job/<id> URLs.
locationstringe.g. "Sydney NSW", "Auckland".
classification / subClassificationstringSEEK category IDs (e.g. 6281 = ICT).
workTypearrayfullTime, partTime, contract, casual.
workArrangementarrayonsite, hybrid, remote.
dateRangeenum1, 3, 7, 14, 31 days.
sortModeenumrelevance (default) or date.
salaryMin / salaryMaxintegerSalary range in local currency (set both).
includeKeywords / excludeKeywordsarrayKeep jobs matching an include term; drop jobs matching an exclude term.
keywordMatch*booleanLimit keyword matching to title/company/description/category/bulletPoints. None on = all fields.
fromDate / toDatestringKeep jobs posted within this date window (YYYY-MM-DD; toDate inclusive).
maxAgeMinutesintegerKeep only jobs posted within N minutes before the run.
customFiltersarrayRule-based filters on any output field, e.g. [{"field":"salaryMin","operator":"gte","value":100000}]. Operators: includes, notIncludes, equals, notEquals, gt, gte, lt, lte.
maxResultsintegerMax jobs per query (0 = unlimited, capped at 5000). Default 50.
maxPagesintegerMax search pages per query. Default 25.
includeDetailsbooleanFetch each job's detail page. Default true.
descriptionMaxLengthintegerTruncate description text (0 = no limit).
descriptionFormatenumall, text, html, markdown.
incrementalModebooleanTrack changes across runs; emit only NEW/UPDATED/REAPPEARED by default.
stateKeystringStable name for the tracking state (auto-derived if blank).
emitUnchanged / emitExpiredbooleanAlso emit UNCHANGED / EXPIRED jobs.
skipRepostsbooleanDetect and drop reposts; kept jobs are tagged isRepost/repostOfId.
telegramToken + telegramChatIdstringNotify Telegram (BotFather token + chat ID).
slackWebhookUrl / discordWebhookUrlstringNotify a Slack / Discord incoming webhook.
webhookUrl + webhookHeadersstring / objectPOST structured JSON to any endpoint, with optional custom headers.
notificationLimitintegerMax jobs listed per message (default 5; total is still reported).
notifyOnlyChangesbooleanOnly notify about NEW/UPDATED/REAPPEARED jobs (needs incremental mode).
includeRunSummarybooleanPrepend a one-line summary to each notification (default true).
compactbooleanCore fields only.
excludeEmptyFieldsbooleanDrop null/empty fields.

Example input

{
"query": "registered nurse",
"country": "NZ",
"location": "Auckland",
"dateRange": "7",
"sortMode": "date",
"maxResults": 100,
"includeDetails": true
}

Output

Each job is pushed to the run's default dataset. Example record (abridged):

{
"jobId": "92981016",
"title": "Registered Nurse - Dermatology and Skin Cancer",
"company": "Skintel Limited",
"location": "Rosedale, Auckland",
"locationCountry": "NZ",
"salaryText": "$40 – $50 per hour",
"salaryMin": 40,
"salaryMax": 50,
"salaryCurrency": "NZD",
"salaryType": "hourly",
"workType": "Full time",
"workArrangement": "On-site",
"category": "Healthcare & Medical",
"subCategory": "Nursing - General Medical & Surgical",
"teaser": "Join a leading skin cancer and dermatology clinic!",
"url": "https://www.seek.co.nz/job/92981016",
"isSponsored": false,
"postedDate": "2026-06-26T22:46:48.331Z",
"searchQuery": "registered nurse",
"sourceCountry": "NZ",
"scrapedAt": "2026-06-30T13:00:00+00:00",
"description": "…",
"descriptionMarkdown": "…"
}

In compact mode only jobId, title, company, location, salaryText, workType, postedDate, url, applyUrl and searchQuery are returned.

Incremental fields

When incrementalMode is on, every record also carries:

  • changeTypeNEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED
  • firstSeenAt / lastSeenAt — when the job was first and most recently seen
  • isRepost / repostOfId — set when repost detection matches an earlier listing

Incremental mode & monitoring savings

Running on a schedule? Turn on incrementalMode. The first run builds a baseline; every run after that emits — and charges for — only the jobs that changed. Unchanged jobs are recognised before their detail page is even fetched, so you skip both the work and the cost.

Because this actor is pay-per-result, your cost after the baseline scales with how much the market actually changes ("churn"), not with the total number of listings you monitor:

Daily churnRecords emitted per run (after baseline)Approx. saving vs a full re-scrape
5% (stable niche)~5%~90%
15% (moderate)~15%~80%
30% (fast-moving)~30%~65%

These figures apply to the per-result portion of the cost over a month of daily runs; the exact amount depends on the price configured for this actor. Set emitExpired to also receive listings that have dropped off, and emitUnchanged if you want the full set every run.

Keep maxResults / maxPages consistent between scheduled runs — they define the set of jobs being tracked.

Notifications

Get alerted the moment matching jobs appear. Fill in only the channels you want; each fires independently when a run finishes and there are matching jobs.

  • ✈️ TelegramtelegramToken (from @BotFather) + telegramChatId.
  • 💬 SlackslackWebhookUrl (Incoming Webhook).
  • 🎮 DiscorddiscordWebhookUrl (channel webhook).
  • 🪝 Generic webhookwebhookUrl receives a structured JSON payload (run metadata + a jobs array) with optional webhookHeaders. Ideal for n8n / Make / Zapier.

Pair with incrementalMode + notifyOnlyChanges to be alerted only about NEW/UPDATED/REAPPEARED jobs on scheduled runs. Credentials are stored encrypted.

Use cases

  • Salary and market research across AU & NZ.
  • Track salary trends and hiring demand over time.
  • Monitor new and changed listings on a schedule without re-processing everything.
  • Build recruitment and outreach lists from company and role data.
  • Feed structured job data into dashboards, data warehouses or AI agents.

Pricing

This actor uses pay-per-event pricing: a small per-run start fee plus a small fee per job record. You only pay for the jobs you actually receive — and with incremental mode on, only for the ones that changed.

FAQ

Do I need a SEEK account or login? No. The actor reads SEEK's public job listings; no credentials are required.

Can I scrape both Australia and New Zealand? Yes — set country to AU or NZ (run once per market, or use startUrls from either site).

Why are some company fields empty? companyUrl and companyDescription are only available for advertisers that have a SEEK company profile.

Is it legal to scrape seek.com.au / seek.co.nz? This actor extracts publicly available data from SEEK. Web scraping of public information is generally considered legal, but you should always review the target site's terms of service and ensure your use case complies with applicable laws and regulations, including GDPR where relevant.


This is an unofficial actor and is not affiliated with, endorsed by, or connected to SEEK. "SEEK" is a trademark of its respective owner and is used here only to describe the site this actor works with.