Seek Jobs Scraper: Australia and New Zealand, Pay, Company
Pricing
from $1.80 / 1,000 jobs
Seek Jobs Scraper: Australia and New Zealand, Pay, Company
Seek.com.au and Seek.co.nz jobs (title, company, suburb, pay, work type, full description, closing date) by keyword and place; $1.80 per 1,000 jobs. Company website, size and rating, Seek's filters, up to 550 per search. No contact names, free error rows.
Pricing
from $1.80 / 1,000 jobs
Rating
0.0
(0)
Developer
Arcadium Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 hours ago
Last modified
Categories
Share
Seek Jobs Scraper
Give it job titles and places in Australia or New Zealand (or Seek search URLs) and it returns one clean JSON row per Seek job: title, company, location down to suburb and postcode, pay, work type, on-site / hybrid / remote, classification, listing and closing dates, the full description, and the company's website, size and rating when it has a Seek profile. $1.80 per 1,000 jobs. You only pay for jobs you get back; a place Seek does not know comes back as a free error row that says why.
It is built for recruiters and staffing agencies in Australia and New Zealand, labour-market and salary research, job boards and aggregators, sales teams looking for companies that hire, and AI agents that need "who is hiring for X in Y" as data.
Use with AI agents
The actor takes plain JSON and returns one flat row per job, so an AI agent or MCP client (for example through mcp.apify.com) can call arcadium/seek-jobs directly. Input example for "data analyst jobs in Sydney and Melbourne listed this week":
{ "keywords": ["data analyst"], "locations": ["Sydney NSW", "Melbourne VIC"], "postedWithinDays": "7", "maxJobsPerSearch": 100 }
"Remote nursing jobs in New Zealand, search rows only":
{ "keywords": ["registered nurse"], "country": "NZ", "workArrangements": ["remote"], "includeDetails": false }
Read title, companyName, location, salaryLabel, salary, workTypes, workArrangements, listedAt and url. 100 jobs cost $0.18 plus the start fee. A place Seek does not know, or a URL that is not a Seek search, comes back as a free row with rowType: "error", a code (not_found, unavailable, blocked, invalid_input) and a message, never as a failed run. Retry on blocked and unavailable later.
What you get
| Field | What it holds |
|---|---|
jobId, url, title, normalizedTitle | The job: Seek's id (stable between runs), its page, the title and Seek's normalised role title. |
companyName, advertiserName, companyProfileUrl | The hiring company and the account that placed the ad (employer or recruitment agency). |
location, area, suburb, state, postcode, country | Where the job is. |
classification, subClassification, workTypes, workArrangements | Seek's category, full time / part time / contract / casual, on-site / hybrid / remote. |
salaryLabel, salary | Pay as written ("$140k-$170k+Super") and parsed ({min, max, currency, period} in AUD or NZD). |
listedAt, listedAgo, expiresAt | Listing date, Seek's "1d ago", and the closing date. |
teaser, bulletPoints, description | The search summary, the ad's selling points and the full description (plain text or HTML). |
applyOnSeek, featured | Apply on Seek or on the employer's site; paid placement. |
companyWebsite, companySize, companyIndustry, companyRating, companyReviewCount | From the company's Seek profile, when it has one. |
source, sourceType, searchKeyword, searchLocation, position | Which search the job came from and its rank in it. |
jobsDb | With jobsDbExport: {companyDomain, fingerprint} to merge with other job sources. |
Output example:
{"rowType": "job","platform": "seek","jobId": "95426731","url": "https://www.seek.com.au/job/95426731","title": "Data Analysis Officer","companyName": "Macquarie University","advertiserName": "Macquarie University","advertiserId": "28800385","companyProfileUrl": "https://au.seek.com/companies/macquarie-university-432440","location": "Sydney NSW","area": "Ryde & Macquarie Park","suburb": "North Ryde","state": "New South Wales","postcode": "2113","country": "AU","classification": "Information & Communication Technology","subClassification": "Other","workTypes": ["Full time"],"workArrangements": ["Hybrid"],"salaryLabel": null,"salary": null,"listedAt": "2026-10-22T03:18:06Z","listedAgo": "8h ago","expiresAt": "2026-11-21T03:18:04.000Z","teaser": "We are hiring an enthusiastic Data Analysis Officer to join our team!","bulletPoints": [],"description": "$102,136 - 112,741 per annum (HEW Level 6), plus 17% employer's superannuation and annual leave loading\nFull-time, 16-month fixed-term contract ...","normalizedTitle": "Data Analytics Officer","applyOnSeek": false,"featured": false,"companyWebsite": "http://mq.edu.au/","companySize": "1,001-5,000 employees","companyIndustry": "Education, Training & Professional Development","companyRating": 3.4,"companyReviewCount": 85,"detailsIncluded": true,"source": "data analyst in Sydney NSW (AU)","sourceType": "search","searchKeyword": "data analyst","searchLocation": "Sydney NSW 2000","position": 11,"scrapedAt": "2026-10-22T12:00:00.000Z"}
Input
| Field | What it does |
|---|---|
keywords | Job titles or keywords; each is searched in every location. |
locations | Places as you type them on Seek ("Sydney NSW", "Brisbane", "Auckland"). Empty = the whole country. |
country | AU (default, seek.com.au) or NZ (seek.co.nz). |
startUrls | Seek search URLs; keywords, place and filters are read from the URL. |
maxJobsPerSearch | Jobs per search, 1 to 550 (default 100). |
maxItems | Stop after this many jobs in total. A cost cap. |
postedWithinDays, workTypes, workArrangements, classificationIds, sortBy | Seek's own search filters and sort. |
includeDetails | Full description, closing date, address parts and company profile (on by default; one small request per job). |
descriptionFormat, maxDescriptionChars | text (default), html or none; cut long descriptions. |
jobsDbExport | Add the jobsDb merge fields. |
includeErrorRows | A free row for every input without jobs (on by default). |
Common input names of other Seek scrapers are accepted as they are (keyword, searchTerms, location, where, searchUrls, maxResults, maxJobs), so an existing input can be pasted in.
Use it from code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("arcadium/seek-jobs").call(run_input={"keywords": ["electrician"],"locations": ["Perth WA", "Brisbane QLD"],"workTypes": ["full-time"],"maxJobsPerSearch": 200,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():if item["rowType"] == "job":print(item["title"], item["companyName"], item["suburb"], item["salaryLabel"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('arcadium/seek-jobs').call({startUrls: ['https://www.seek.co.nz/nurse-jobs/in-Auckland'],maxJobsPerSearch: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.filter((i) => i.rowType === 'job').length, 'jobs');
Pricing
You pay per job delivered, the same on every Apify plan, with or without job details. Error rows and jobs that two of your searches both found are free.
| Apify plan | Per 1,000 jobs |
|---|---|
| Free | $1.80 |
| Starter (Bronze) | $1.80 |
| Scale (Silver) | $1.80 |
| Business (Gold) | $1.80 |
| Platinum | $1.80 |
| Diamond | $1.80 |
Plus a one-off $0.001 per GB of memory when a run starts (the run uses 512 MB).
Set a maximum cost per run in the Apify run options and the actor stops before it goes over.
Use cases
- Recruiting and staffing in Australia and New Zealand: who is hiring for a role in a city, with pay and work arrangement.
- Salary research: advertised pay per title, place and classification.
- Sales prospecting: companies that are hiring, with their website and size.
- Job boards and aggregators: fresh listings per keyword with
postedWithinDays. - Labour-market research: hiring by classification, work type and region.
Limitations
- Seek shows at most 550 jobs per search. Split large searches by place,
postedWithinDays,workTypesorclassificationIds. - Pay is what the advertiser wrote; many ads hide it, and
salarystays null when the text is not a clear amount or range. - Company website, size and rating exist only for companies with a Seek profile.
- Ads that send you to the employer's site (
applyOnSeek: false) do not expose the outside link. - Place names are matched by Seek; check
searchLocationto see what it matched.
Privacy
Public job ads only, read the way an anonymous visitor's browser reads Seek. No login, no account. No contact names or phone numbers are collected (Seek's phone and questionnaire fields are not read); emails and phone numbers in titles, summaries and descriptions are replaced with [email] and [phone], and greeting names are removed. "Private Advertiser" ads and posters that could be a private person get a null company name.
FAQ
Why do some jobs have no company name? The ad was placed as "Private Advertiser", or the poster's name could be a private person's. We leave those out on purpose.
Do I pay more for the full description?
No. includeDetails costs the same per job; turn it off only to make runs faster.
Something looks wrong in the output. Who do I tell? Open an issue on the actor page with the run link. We read them all.