SEEK Job Scraper (AU & NZ)
Pricing
from $2.00 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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 salary —
salaryTextparsed intosalaryMin/salaryMax/salaryCurrency/salaryTypeautomatically. - 📄 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 output —
compactmode andexcludeEmptyFieldsfor lean records. - 🔗 Start URLs — paste any SEEK search or job URL straight from your browser.
Input
| Field | Type | Description |
|---|---|---|
query | string | Keywords, e.g. "python". Leave blank to browse all jobs. |
queries | array | Multiple keyword searches in one run. |
country | enum | AU (default) or NZ. |
startUrls | array | SEEK search-results or /job/<id> URLs. |
location | string | e.g. "Sydney NSW", "Auckland". |
classification / subClassification | string | SEEK category IDs (e.g. 6281 = ICT). |
workType | array | fullTime, partTime, contract, casual. |
workArrangement | array | onsite, hybrid, remote. |
dateRange | enum | 1, 3, 7, 14, 31 days. |
sortMode | enum | relevance (default) or date. |
salaryMin / salaryMax | integer | Salary range in local currency (set both). |
includeKeywords / excludeKeywords | array | Keep jobs matching an include term; drop jobs matching an exclude term. |
keywordMatch* | boolean | Limit keyword matching to title/company/description/category/bulletPoints. None on = all fields. |
fromDate / toDate | string | Keep jobs posted within this date window (YYYY-MM-DD; toDate inclusive). |
maxAgeMinutes | integer | Keep only jobs posted within N minutes before the run. |
customFilters | array | Rule-based filters on any output field, e.g. [{"field":"salaryMin","operator":"gte","value":100000}]. Operators: includes, notIncludes, equals, notEquals, gt, gte, lt, lte. |
maxResults | integer | Max jobs per query (0 = unlimited, capped at 5000). Default 50. |
maxPages | integer | Max search pages per query. Default 25. |
includeDetails | boolean | Fetch each job's detail page. Default true. |
descriptionMaxLength | integer | Truncate description text (0 = no limit). |
descriptionFormat | enum | all, text, html, markdown. |
incrementalMode | boolean | Track changes across runs; emit only NEW/UPDATED/REAPPEARED by default. |
stateKey | string | Stable name for the tracking state (auto-derived if blank). |
emitUnchanged / emitExpired | boolean | Also emit UNCHANGED / EXPIRED jobs. |
skipReposts | boolean | Detect and drop reposts; kept jobs are tagged isRepost/repostOfId. |
telegramToken + telegramChatId | string | Notify Telegram (BotFather token + chat ID). |
slackWebhookUrl / discordWebhookUrl | string | Notify a Slack / Discord incoming webhook. |
webhookUrl + webhookHeaders | string / object | POST structured JSON to any endpoint, with optional custom headers. |
notificationLimit | integer | Max jobs listed per message (default 5; total is still reported). |
notifyOnlyChanges | boolean | Only notify about NEW/UPDATED/REAPPEARED jobs (needs incremental mode). |
includeRunSummary | boolean | Prepend a one-line summary to each notification (default true). |
compact | boolean | Core fields only. |
excludeEmptyFields | boolean | Drop 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:
changeType—NEW,UPDATED,UNCHANGED,REAPPEAREDorEXPIREDfirstSeenAt/lastSeenAt— when the job was first and most recently seenisRepost/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 churn | Records 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.
- ✈️ Telegram —
telegramToken(from @BotFather) +telegramChatId. - 💬 Slack —
slackWebhookUrl(Incoming Webhook). - 🎮 Discord —
discordWebhookUrl(channel webhook). - 🪝 Generic webhook —
webhookUrlreceives a structured JSON payload (run metadata + ajobsarray) with optionalwebhookHeaders. 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.