Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
SEEK Jobs Scraper icon

SEEK Jobs Scraper

Scrape SEEK jobs in Australia and New Zealand: salary ranges, workplace type and full descriptions. No login. $0.81 per 1,000, flat at every volume.

141 runs on Apify $0.00081 per SEEK job ($0.81 / 1,000)
Run this in the cloudRun on Apify →

Job Market Scrapers

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust site, keywords, location (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.00081 per SEEK job = $0.81 per 1,000

You are charged forWhenPrice
SEEK jobOne real, deduplicated SEEK Australia or New Zealand job result.$0.00081

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-04, and they are what you are actually charged.

Inputs

FieldWhat it doesType
siteSearch SEEK Australia or New Zealand.string
keywordsJob title or search terms, for example software engineer or registered nurse.string
locationCity, region, or country. Leave blank for all locations.string
sortByRelevance keeps SEEK's usual order. Date gets the newest listings first, sorted by SEEK itself. SEEK still puts up to two sponsored ads at the top of every results page whatever their age; with Date they are kept and moved to where their own listing date puts them.string
jobUrlsPublic SEEK job URLs to fetch directly. Direct URLs are deduplicated with search results.array
jobIdsSEEK numeric job IDs to fetch directly.array
maxItemsMaximum unique job records returned.integer
maxPagesMaximum pages to request. SEEK normally returns up to 22 jobs per page.integer
datePostedOptional client-side age filter.string
workTypesOptional client-side employment type filters, such as Full time or Contract/temp.array
workplaceTypesOptional client-side workplace filters: Remote, Hybrid, or On-site.array
salaryMinOptional minimum numeric salary filter when SEEK exposes salary data.number
minApplicantsOptional. Keeps only jobs SEEK shows at least this many applicants for. Jobs with no count shown are left out. Each job is checked one at a time, so the run takes longer, and one run checks at most twice Maximum jobs (1,000 at most). A high minimum can return fewer jobs than you asked for.integer
includeDetailsFetch each job page and add description, requirements, and structured metadata. This uses more requests.boolean
useProxyFallbackRetry a refused or rate-limited request through Apify Proxy.boolean
maxProxyRetriesMaximum fresh proxy sessions across the run after a request is blocked.integer

What you get

A structured dataset — each result includes fields like:

titlecompanylocationworkplaceTypeemploymentTypesalarylistingDateurl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Job Market Scrapers

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

Career Site Jobs Scraper iconJob Market Scrapers

Career Site Jobs Scraper

Scrape open jobs from a career page, a domain or a company name. Works with 10 ATS platforms. Get title, location, department and apply URL.

Ready to run — no setup

Internshala Scraper iconJob Market Scrapers

Internshala Scraper

Scrape Internshala internships and fresher jobs by keyword, city, category, stipend or work from home. Duration, apply-by date, openings. $0.34/1,000.

Ready to run — no setup

XING Jobs Scraper iconJob Market Scrapers

XING Jobs Scraper

Scrape XING jobs in Germany, Austria and Switzerland. Company, employment type, career level, posted date, apply URL and salary. $0.51 per 1,000 jobs.

1 use cases

ZipRecruiter Scraper iconJob Market Scrapers

ZipRecruiter Scraper

Scrape ZipRecruiter jobs by keyword, city, remote or salary. Exact posted dates, apply URLs, pay marked published or estimated. $0.80 per 1,000.

Ready to run — no setup

LinkedIn Company Employees Scraper iconJob Market Scrapers

LinkedIn Company Employees Scraper

Find a company's employees on LinkedIn, no login. Give a company URL or name. Get name, headline, job title, location and profile URL. $1.80 per 1,000.

1 use cases

Indeed Jobs Scraper iconJob Market Scrapers

Indeed Jobs Scraper

Scrape Indeed jobs by keyword and location in 11 countries. Get company, salary, benefits, remote flag, employer rating and apply URL. $4.00 per 1,000.

16 use cases

See all Job Market Scrapers →

SEEK Jobs Scraper: jobs from Australia and New Zealand, with the pay as written

Search SEEK by keyword and location and get one row per job. Title, company, where it is, whether it is remote, hybrid or on-site, employment type, the posting date, the teaser and the link. No login, no cookies, no API key.

Salary is the part worth understanding before you build a report on it. SEEK lets the advertiser type the pay in free text, so one search comes back with $130K - $160K + Super sitting next to Rewarding hourly rates $$$. The label is kept exactly as written, and salaryMin and salaryMax are pulled out of it when there are numbers to pull.

includeDetails is not returning details at the moment. Rows still come back with everything the search card carries, plus a detailsError, but no description.

InputKeywords and a location, or direct SEEK job IDs and URLs
OutputOne row per job
Ceiling1,000 jobs per run
Account neededNone, and no SEEK login
Price$0.81 per 1,000 jobs, flat on every plan

🔍 What SEEK Jobs Scraper does

One actor covers both SEEK sites. site picks AU or NZ, and the rest of the input works the same either way.

It runs your search, pages through the results, and deduplicates on job ID. You can also hand it job IDs or job URLs directly, and those are merged with the search results rather than duplicating them.

datePosted, workTypes, workplaceTypes and salaryMin are applied to the rows after they come back, not by SEEK. So they narrow what you receive, and a tight filter on a broad search can leave you with far fewer rows than maxItems. Widen maxPages when that happens.

minApplicants runs after the fetch too, and it is slower. The search results carry no applicant count, so each job that passes your other filters is checked on its own, up to twice maxItems a run.

sortBy works the other way round. SEEK does the sorting itself, so date really starts at the newest listing and pages back from there. SEEK also pins up to two sponsored ads to the top of every page, whatever their age. With date they are kept but moved to where their own listingDate puts them, so a small run can end with an older sponsored job or two.

📥 What you give it

{
  "site": "NZ",
  "keywords": "data analyst",
  "location": "Auckland",
  "workplaceTypes": ["Remote"],
  "datePosted": "7days",
  "maxItems": 100
}
FieldDefaultWhat it is
siteAUAU for seek.com.au, NZ for seek.co.nz.
keywordsnoneJob title or search terms. The Console box starts at software engineer; an API call has to send its own.
locationnoneCity, region or country. Leave it empty for everywhere. The Console box starts at Sydney.
sortByrelevancerelevance is SEEK's usual order. date gets the newest listings first.
jobUrlsnonePublic SEEK job URLs to fetch directly.
jobIdsnoneSEEK numeric job IDs to fetch directly.
maxItems501 to 1,000 unique jobs.
maxPages51 to 50 search pages. SEEK normally returns up to 22 jobs a page.
datePostedanytoday, 3days, 7days, 14days or 30days.
workTypesnoneEmployment types to keep, such as Full time or Contract/temp.
workplaceTypesnoneRemote, Hybrid or On-site.
salaryMinnoneKeeps only jobs whose salary was parsed and reaches this number.
minApplicantsnoneKeeps only jobs SEEK shows at least this many applicants for. Jobs with no count shown are left out. One run checks at most twice maxItems jobs, 1,000 at most, so a high minimum can return fewer rows than asked.
includeDetailsoffFetches each job page for the description and structured fields. Not returning details at the moment: rows keep the search card's fields and get a detailsError.
useProxyFallbackonRetries a request that came back refused. Leave it on.
maxProxyRetries20 to 5 retries across the run after a refusal.
proxyConfigurationApify networkOptional network settings. Your own servers, if you give any, are used exactly as supplied.

If you feed jobIds or jobUrls with includeDetails off, the row comes back holding only the ID and the URL, and it is charged. The job page is never opened, so the title and company stay null, and an ID that does not exist is billed the same as one that does. Turn descriptions on when you feed IDs directly.

salaryMin drops every job whose salary could not be parsed, which on SEEK is a lot of them. Use it to shortlist, not to survey a market.

📤 What you get back

A real row from a recent run, with the teaser cut short:

{
  "ok": true,
  "site": "AU",
  "jobId": "94483533",
  "title": "Graduate Software Engineer",
  "company": "Arturia AI",
  "location": "Macquarie Park, Sydney NSW",
  "workplaceType": "On-site",
  "employmentType": "Full time",
  "salary": null,
  "salaryMin": null,
  "salaryMax": null,
  "listingDate": "2026-09-08T03:09:03Z",
  "teaser": "Graduate Software Engineer ...",
  "bulletPoints": [],
  "url": "https://www.seek.com.au/job/94483533",
  "source": "seek-api"
}
FieldWhat it is
salaryThe advertiser's own wording, untouched. null when they published no pay at all, which is common.
salaryMin, salaryMaxParsed out of that label. The parser takes the first two numbers it finds, so a label like 3 days a week, $500 per day gives you 3 and 500. Treat salary as the truth and these two as a convenience.
locationSeveral labels joined with ; when SEEK lists more than one.
jobIdStable. Use it as your deduplication key across runs.
listingDateWhen SEEK says it was posted.
bulletPointsThe short selling points from the search card, when the advertiser wrote any.
applicantCountOnly with minApplicants set: the applicant count SEEK showed when the job was checked.
sourceseek-api on a real job row.

With includeDetails on, rows also carry description, requirements, education, experience, validThrough, datePosted and hiringOrganization, plus detailsError when that page could not be read. Detail fetching is best effort: a row stays useful when an employer's page has changed or gone.

🧾 Reading the output

Three kinds of row can land in your dataset.

RowHow to spot itCharged
A jobok: true and source: "seek-api"yes
The sample row_sample: trueno
A diagnosticok: false and a codeno

Filter on _sample being absent, not on ok. The sample row is ok: true and looks like a real job in the table, which is exactly how it slips into a pipeline.

Diagnostics carry code, not errorCode:

CodeWhat it means
SAMPLE_INPUTYou started the run without keywords, IDs or URLs, so nothing was searched.
BAD_INPUTsortBy held something other than relevance or date, so nothing was searched.
NO_RESULTSThe search ran and matched nothing, or your filters removed everything.
BLOCKEDSEEK refused the request. Re-run it.
NETWORKSEEK was unreachable or answered with something unreadable. Re-run it.

▶️ How to run it

1. Open SEEK Jobs Scraper and click Try for free. 2. Pick SEEK site, Australia or New Zealand. 3. Type your terms into Keywords and a city into Location. 4. Leave Maximum jobs at 50 for a first run, then click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.

💰 How much does it cost?

$0.81 per 1,000 jobs. Flat on every Apify plan, no volume tiers.

You pay per job row delivered. Duplicates across search and direct IDs, jobs your filters removed, the sample row and diagnostic rows are all free, and switching descriptions on costs nothing extra per job.

💡 What people use it for

  • Recruiters pricing a role against what is actually being advertised this week, reading salary

rather than the parsed numbers.

  • Job boards pulling Australian and New Zealand listings on a schedule and deduplicating on

jobId.

  • Tracking how many remote roles a sector is posting, using workplaceTypes across repeat runs.
  • Watching a shortlist of employers by running their name as the keyword.
  • Pulling full adverts with includeDetails to see which skills keep appearing.

🚧 What it does not do

  • Australia and New Zealand only. No other SEEK market, and no other job board.
  • No logins, no applications. It reads public listings and does not apply to anything.
  • No candidate data. Job adverts only.
  • Salary parsing is rough by nature, because the source is free text. Numbers that are not pay

can end up in salaryMin.

  • 1,000 jobs per run is the ceiling. For more, split by location, by keyword, or run AU and NZ

separately.

  • Filters run after the fetch, so a narrow filter on a broad search returns few rows unless you

raise maxPages.

  • Rows land at the end of the run. If a search page fails partway through, the run finishes with

a diagnostic and the jobs already collected do not arrive. Re-run it, ideally smaller.

🧭 Which jobs scraper do you need?

If you wantUse
Jobs in Australia and New ZealandThis one
Jobs in Germany, Austria and SwitzerlandXING Jobs Scraper
Jobs in Germany, Austria, the UK, the Netherlands and BelgiumStepStone Jobs Scraper
Jobs across 11 countries on IndeedIndeed Jobs Scraper
Jobs posted on LinkedInLinkedIn Jobs Scraper

❓ Questions people ask

Do I need a SEEK account? No. A keyword is enough.

Does it cover New Zealand? Yes. Set site to NZ.

Why is salary null on so many rows? Because the advertiser did not publish pay. SEEK does not require it, and a large share of listings leave it out.

Why did salaryMin cut my results in half? It only keeps jobs whose pay could be read as numbers. Adverts that say "competitive" have nothing to compare.

How many jobs can one run return? Up to 1,000, with the default at 50.

Is scraping job listings legal? These are public job adverts. They can name real people, which GDPR and similar laws cover, so have a reason for collecting them, and keep to SEEK's terms and a sensible request rate. Apify's write-up on scraping and the law is a good place to start, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the site, the keywords and the run ID. The code on the diagnostic row usually names the problem on its own.