SEEK.com.au Scraper
Pricing
from $1.50 / 1,000 results
SEEK.com.au Scraper
Scrape seek.com.au for structured Australian job data: titles, companies, salaries, descriptions & classifications. 150k+ listings. Deduplication & daysOld filtering included.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Unfenced Group
Actor stats
1
Bookmarked
43
Total users
18
Monthly active users
14 hours ago
Last modified
Categories
Share

Extract structured job data from SEEK.com.au — Australia's largest job board with over 150,000 active listings across every industry and state. No API key required. Returns full job descriptions, salary details, and classification metadata in one run.
Why this scraper?
📋 Complete job data in three formats
Every listing includes the full job description as HTML, plain text, and Markdown — ready for storage, NLP pipelines, or email alerts without extra parsing.
💰 Structured salary extraction
Salary strings like "$80,000 – $90,000 per year" or "$32 per hour" are automatically parsed into salaryMin, salaryMax, salaryPeriod, and currency fields alongside the raw label.
🔁 Cross-run repost detection
The scraper tracks every job ID across runs with a 90-day memory. Reposted listings are flagged with isRepost: true and linked back to the original posting date — helping you filter duplicates in downstream workflows.
🗓️ Date and age filtering
Use daysOld to restrict results to listings posted within a rolling window (e.g. last 7 days), or sort by newest first to stay on top of fresh postings.
🎯 Flexible search and filtering
Filter by keyword, location (city, state, or all of Australia), work type (full time / part time / contract / casual), and industry classification ID. Combine filters for targeted scrapes.
🔗 Direct URL support
Pass any SEEK job URL directly via startUrls to scrape specific listings without running a full search — useful for ad-hoc lookups and integration testing.
Input parameters
| Parameter | Type | Default | descriptionHtml | String | Full job description as raw HTML. null if not fetched. |
| descriptionText | String | Plain-text version of the description, HTML tags removed. |
| descriptionMarkdown | String | Markdown version of the job description. |
|---|---|---|---|
| searchQuery | String | "" | Keywords to search (e.g. "data analyst"). Empty = browse all jobs. |
| location | String | "All Australia" | Location filter. Examples: "Sydney NSW", "Melbourne VIC", "Brisbane QLD". |
| workType | String | "" (all) | Employment type: "Full time", "Part time", "Contract/Temp", "Casual/Vacation". |
| classificationId | String | "" | SEEK industry/category ID for sector filtering. |
| sortMode | String | "ListedDate" | "ListedDate" (newest first) or "KeywordRelevance". |
| daysOld | Integer | — | Only return jobs posted within this many days. |
| maxResults | Integer | 100 | Stop after this many results. |
| fetchDetails | Boolean | true | Fetch full job description. Disable for fast summary-only runs. |
| skipReposts | Boolean | false | Exclude jobs already seen in previous runs. |
| startUrls | Array | [] | Specific SEEK job URLs to scrape directly. |
Output schema
Each result contains the following fields.
Always present:
| Field | Type | Description |
|---|---|---|
id | string | Unique job listing ID from the source platform. |
url | string | Direct URL to the job listing. |
title | string | Job title as published. |
company | string | Employer / company name. |
location | string | Full location as published (city, region, or country). |
locations | array | List of work location objects (city, postal code, etc.). |
salaryLabel | string | salaryLabel field. |
salaryMin | number | Minimum salary (null if not published by employer). |
salaryMax | number | Maximum salary (null if not published by employer). |
salaryPeriod | string | Salary period: YEAR / MONTH / WEEK / DAY / HOUR. |
currency | string | currency field. |
workTypes | array | workTypes field. |
workArrangement | string | workArrangement field. |
classifications | array | classifications field. |
teaser | string | teaser field. |
bulletPoints | array | bulletPoints field. |
isFeatured | boolean | isFeatured field. |
isExpired | boolean | isExpired field. |
contactMatches | array | contactMatches field. |
type | string | type field. |
value | string | value field. |
publishDate | string | Publication date (YYYY-MM-DD). |
publishDateISO | string | Publication date in ISO 8601 format. |
listingDateRaw | string | listingDateRaw field. |
contentHash | string | MD5 hash of key fields for change detection (16 chars). |
summary | string | Human-readable one-line summary of the listing. |
source | string | Source domain name (e.g. 'pracuj.pl'). |
scrapedAt | string | ISO 8601 timestamp of when this item was scraped. |
isRepost | boolean | True if this listing was seen in a previous run (90-day window). |
originalPublishDate | string | Original publish date if this is a repost (null otherwise). |
originalUrl | string | Original URL if this is a repost (null otherwise). |
With fetchDetails: true (default):
| Field | Type | Description |
|---|---|---|
description | string | Full job description as raw HTML (null if fetchDetails is false). |
descriptionText | string | Full job description as plain text (null if fetchDetails is false). |
descriptionMarkdown | string | Full job description in Markdown format (null if fetchDetails is false). |
Example output record:
{"id": "91324652","url": "https://www.seek.com.au/job/91324652","title": "Paralegal / Legal Assistant","company": "Dillon Legal","location": "Robina, Gold Coast QLD","locations": ["Robina, Gold Coast QLD"],"salaryLabel": "$65,000 – $75,000 per year","salaryMin": 65000,"salaryMax": 75000,"salaryPeriod": "YEAR","currency": "AUD","workTypes": ["Full time"],"workArrangement": "On-site","classifications": ["Legal Secretaries (Legal)"],"teaser": "Dillon Legal is seeking an experienced Legal Assistant...","bulletPoints": ["Permanent full-time role in Gold Coast","Supportive team environment","Competitive salary package"],"isFeatured": false,"isExpired": false,"contactMatches": [{ "type": "Email", "value": "samantha@dillonlegal.com.au" },{ "type": "Phone", "value": "5575 9990" }],"description": "<p>Dillon Legal is seeking...</p>","descriptionText": "Dillon Legal is seeking an experienced Legal Assistant...","descriptionMarkdown": "Dillon Legal is seeking an experienced Legal Assistant...","publishDate": "2026-04-03","publishDateISO": "2026-04-03","listingDateRaw": "2026-04-03T05:12:03.019Z","contentHash": "a3f1c8e2b4d09f17","summary": "Paralegal / Legal Assistant — Dillon Legal — Robina, Gold Coast QLD","source": "seek.com.au","scrapedAt": "2026-04-03T16:00:00.000Z","isRepost": false,"originalPublishDate": null,"originalUrl": null}
Examples
Example 1 — Browse all recent jobs in Sydney
{"location": "Sydney NSW","sortMode": "ListedDate","maxResults": 50,"fetchDetails": false}
Returns 50 most recent listings in Sydney with teaser and salary. No full description. Fast.
Example 2 — Full-time developer jobs posted in the last 7 days
{"searchQuery": "software developer","location": "All Australia","workType": "Full time","daysOld": 7,"sortMode": "ListedDate","maxResults": 200,"fetchDetails": true}
Returns up to 200 full-time developer jobs posted in the past week, with complete descriptions.
Example 3 — Nurse jobs in Queensland, skip already-seen reposts
{"searchQuery": "nurse","location": "Queensland","daysOld": 30,"maxResults": 500,"fetchDetails": true,"skipReposts": true}
Daily or weekly run that only returns new listings — reposts from the same employer are automatically skipped.
Example 4 — Scrape specific listings by URL
{"startUrls": [{ "url": "https://www.seek.com.au/job/91324652" },{ "url": "https://www.seek.com.au/job/91123354" }],"fetchDetails": true}
Retrieves full detail for each provided URL regardless of search filters.
Example 5 — Legal sector jobs, all states
{"searchQuery": "","location": "All Australia","classificationId": "1216","sortMode": "ListedDate","maxResults": 1000,"fetchDetails": true}
Scrapes all active legal sector jobs (classification ID 1216 = Legal) across Australia.
💰 Pricing
$1.50 per 1,000 results — you only pay for successfully retrieved listings. Failed retries and filtered reposts are never charged.
| Results | Estimated cost |
|---|---|
| 100 | ~$0.15 |
| 1,000 | ~$1.50 |
| 10,000 | ~$15.00 |
| 100,000 | ~$150.00 |
Flat-rate alternatives typically charge $29–$49/month regardless of usage. At 10,000 results/month, this scraper costs significantly less with no commitment.
Use the Max results cap in the input to control your spend exactly.
Pricing
This actor uses Pay Per Result pricing at $1.5 per 1,000 results.
| Volume | Cost |
|---|---|
| 100 results | $0.15 |
| 1,000 results | $1.5 |
| 10,000 results | $15.00 |
No subscription fees. Pay only for successfully scraped listings.
Performance
| Run size | fetchDetails | Estimated time |
|---|---|---|
| 100 results | false | ~30 seconds |
| 100 results | true | ~3 minutes |
| 1,000 results | true | ~25 minutes |
| 5,000 results | true | ~2 hours |
Performance varies with SEEK load and result set size. Runs with
fetchDetails: falseare significantly faster and suitable for building job feeds.
Known limitations
description: RequiresfetchDetails: true. When disabled, only theteaser(1–2 sentences) andbulletPointsare returned.contactMatches: Email and phone contacts are extracted when present in the job posting. Not all employers publish contact details.workArrangement: Remote / hybrid / on-site classification is provided only when the employer has specified it. Many listings omit this field (null).- Salary: Not published by all employers —
salaryLabeland numeric fields will benullwhen the employer has not disclosed salary. - SEEK NZ / SEEK Asia: This actor targets
seek.com.au(Australia) only. New Zealand and Asian markets are not covered. - Maximum results: SEEK's search index exposes approximately 150,000–200,000 active listings at any given time. Combined filters reduce this number significantly.
Technical details
- Source: seek.com.au — Australia's largest job board
- Memory: 256 MB
- Repost storage: KeyValueStore
seek-com-au-job-dedup, 90-day TTL - Retry: Automatic retry on network errors with exponential backoff, 3 attempts per request
- Rate limiting: Automatic backoff on 429 / 503 responses including
Retry-Afterheader support
Additional services
Need a custom actor, additional filters, scheduled runs, or integration support? Send an email to info@unfencedgroup.nl — we build on request.
Built by unfenced-group · Issues? Open a ticket or send a message.