SEEK Jobs Scraper (AU & NZ)
Pricing
from $4.00 / 1,000 results
SEEK Jobs Scraper (AU & NZ)
Scrape SEEK job listings across Australia and New Zealand with parsed numeric salary, structured location and incremental mode.
Pricing
from $4.00 / 1,000 results
Rating
0.0
(0)
Developer
Axery
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Scrapes job listings from seek.com.au and seek.co.nz over plain HTTP — no browser, no login, no cookies. It reads SEEK's own public search API, the same endpoint the website calls to paint its results page.
What makes this different
Salary you can actually use. SEEK publishes salary only as a display string like "$80,000 – $90,000 per year + super", which you cannot sort, filter or average. This Actor splits it into numeric min/max, ISO-4217 currency and a period:
"salary": {"min": 80000, "max": 90000, "currency": "AUD","period": "year", "is_estimated": false,"raw": "$80,000 – $90,000 per year + super"}
raw is always kept, so if the parser ever misreads a format you still have the original — the data is never silently lossy.
Incremental mode. Turn on incremental and the Actor remembers which listings it has already returned. Subsequent runs return only new jobs, and you are charged only for those new rows. A daily monitor over 5,000 listings costs full price once, then a fraction of that per day.
One schema across boards. Every job Actor in this suite emits the same record shape, with a source-prefixed job_id (seek.com.au:93887114). Merge SEEK, JobStreet and RemoteOK results into one dataset and dedupe without writing a normalizer.
Honest coverage reporting. Each run writes a RUN_COVERAGE record to the key-value store saying what you asked for, what came back, and which limit applied.
Input
| Field | Type | Notes |
|---|---|---|
queries | array | Search keywords. Leave empty to browse by location/classification. |
site | enum | www.seek.com.au or www.seek.co.nz. |
where | string | Location as SEEK spells it, e.g. Sydney NSW. An unrecognised value returns zero results, not an error — prefer blank over a guess. |
classification | string | SEEK classification id, e.g. 6281 for ICT. |
workType | enum | Full time / Part time / Contract / Casual. |
salaryMin, salaryMax | integer | Annual salary band. Note SEEK excludes listings with no disclosed salary when this is set. |
dateRange | enum | Posted within N days. |
sortMode | enum | Newest first or most relevant. |
maxItems | integer | Per query. 0 = unlimited, still bounded by the ceiling below. |
incremental | boolean | Only return listings not seen in previous runs. |
proxyConfiguration | object | Residential recommended. |
Known limits
- Pagination ceiling. SEEK stops serving results at roughly page 50 (about 1,000 listings per query), regardless of what
totalCountreports. To go deeper, split the query by location, classification or salary band. The Actor stops cleanly at the ceiling and records it inRUN_COVERAGE. - Most listings have no salary. In a typical run only 1 in 5 to 1 in 8 rows carry a salary, because Australian advertisers frequently omit it. Empty
salary.minis usually correct data, not a parse failure — checksalary.raw, which isnullwhen SEEK showed nothing. - No detail endpoint. SEEK exposes no public JSON for a single job, and the job page carries no embedded state, so the full description body is not available over HTTP alone. The search response already includes
teaser,bulletPoints, salary, location and classification. remoteis strict. It is true only for genuinely location-free roles. Hybrid roles reportremote: falsewith"Hybrid"inwork_arrangements, because conflating the two makes the flag useless for filtering.
Sister Actors
| Actor | Covers |
|---|---|
| JobStreet Jobs Scraper | Indonesia, Malaysia, Singapore, Philippines, Thailand, Hong Kong — same platform, those brands' catalogues |
| RemoteOK Jobs Scraper | Remote-only roles, from RemoteOK's official public feed |
| Bayt Jobs Scraper | UAE, Saudi Arabia and the wider GCC |
Local development
pip install -r requirements.txtpython test_local.py "python developer" --max 20 --out sample_output.jsonpython test_local.py "data analyst" --site www.seek.co.nz --where "Auckland" --max 10
sample_output.json in this folder is real output from a live run, kept so the schema can be reviewed without running anything.