Seek Jobs Scraper: Australia and New Zealand, Pay, Company avatar

Seek Jobs Scraper: Australia and New Zealand, Pay, Company

Pricing

from $1.80 / 1,000 jobs

Go to Apify Store
Seek Jobs Scraper: Australia and New Zealand, Pay, Company

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

Arcadium Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

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

FieldWhat it holds
jobId, url, title, normalizedTitleThe job: Seek's id (stable between runs), its page, the title and Seek's normalised role title.
companyName, advertiserName, companyProfileUrlThe hiring company and the account that placed the ad (employer or recruitment agency).
location, area, suburb, state, postcode, countryWhere the job is.
classification, subClassification, workTypes, workArrangementsSeek's category, full time / part time / contract / casual, on-site / hybrid / remote.
salaryLabel, salaryPay as written ("$140k-$170k+Super") and parsed ({min, max, currency, period} in AUD or NZD).
listedAt, listedAgo, expiresAtListing date, Seek's "1d ago", and the closing date.
teaser, bulletPoints, descriptionThe search summary, the ad's selling points and the full description (plain text or HTML).
applyOnSeek, featuredApply on Seek or on the employer's site; paid placement.
companyWebsite, companySize, companyIndustry, companyRating, companyReviewCountFrom the company's Seek profile, when it has one.
source, sourceType, searchKeyword, searchLocation, positionWhich search the job came from and its rank in it.
jobsDbWith 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

FieldWhat it does
keywordsJob titles or keywords; each is searched in every location.
locationsPlaces as you type them on Seek ("Sydney NSW", "Brisbane", "Auckland"). Empty = the whole country.
countryAU (default, seek.com.au) or NZ (seek.co.nz).
startUrlsSeek search URLs; keywords, place and filters are read from the URL.
maxJobsPerSearchJobs per search, 1 to 550 (default 100).
maxItemsStop after this many jobs in total. A cost cap.
postedWithinDays, workTypes, workArrangements, classificationIds, sortBySeek's own search filters and sort.
includeDetailsFull description, closing date, address parts and company profile (on by default; one small request per job).
descriptionFormat, maxDescriptionCharstext (default), html or none; cut long descriptions.
jobsDbExportAdd the jobsDb merge fields.
includeErrorRowsA 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 ApifyClient
client = 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 planPer 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, workTypes or classificationIds.
  • Pay is what the advertiser wrote; many ads hide it, and salary stays 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 searchLocation to 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.