SEEK Jobs Scraper avatar

SEEK Jobs Scraper

Pricing

from $1.50 / 1,000 job scrapeds

Go to Apify Store
SEEK Jobs Scraper

SEEK Jobs Scraper

Scrape jobs from SEEK Australia and New Zealand (seek.com.au, seek.co.nz): title, company, salary (parsed), classification, work type, work arrangement, bullet points and full descriptions. Search by keywords and filters or paste SEEK URLs. Incremental mode outputs only new jobs.

Pricing

from $1.50 / 1,000 job scrapeds

Rating

0.0

(0)

Developer

rj

rj

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 hours ago

Last modified

Categories

Share

SEEK Jobs Scraper: Extract Jobs from seek.com.au and seek.co.nz (Australia & New Zealand)

SEEK Jobs Scraper pulls job listings from SEEK, the largest job board in Australia and New Zealand, and returns clean, structured job data: title, company, location, salary (as listed and parsed into min / max / currency / per hour or year), classification and sub-classification, work type, work arrangement (on-site / hybrid / remote), bullet points, listing date and, optionally, the full description.

It reads the same JSON search API that SEEK's own website uses, so it is fast and cheap: no login and no browser. 550 jobs without descriptions take about 6 requests and a few seconds. You only pay for the jobs you get.

What can this SEEK scraper do?

  • 🔎 Search like on SEEK. Keywords, location (suburb, city, region, state or postcode), classification, work type, work arrangement, date listed (today / 3 / 7 / 14 / 31 days) and salary range (annual, monthly or hourly). Filters run on SEEK's side, so you only pay for matching jobs.
  • 🔗 Or paste SEEK URLs. Copy any search results URL from your browser (/developer-jobs-in-information-communication-technology/in-All-Melbourne-VIC?daterange=7&worktype=242) and the filters in it are used as-is. Single job links (/job/12345678) work too.
  • 🇦🇺 🇳🇿 Australia and New Zealand. seek.com.au and seek.co.nz, with salaries in AUD or NZD.
  • 💰 Salaries you can sort and filter. SEEK's free-text salary ("$150-$170K+ superannuation", "$35.73 – $38.53 per hour", "ASO5 ($92,122 - $102,456) plus 12% superannuation") is parsed into min, max, currency and interval. When the ad hides its salary and you fetch descriptions, a salary stated in the description is used instead (marked source: "description").
  • 📄 Full descriptions. One extra request per job adds the description as HTML and plain text, the expiry date, whether you apply on SEEK or an external site, a verified-advertiser flag and the company profile (industry, size, website).
  • 🔁 Incremental monitoring. Turn on Only new jobs and schedule the Actor. Each run outputs, and charges for, only jobs that were not seen before. A repeat run with nothing new costs one request and no jobs.
  • 🧩 Same schema as our other jobs Actors. id, company, title, location, isRemote, workplaceType, employmentType, salary{min,max,currency,interval,text,source}, postedAt, jobUrl, applyUrl, descriptionText / descriptionHtml match our ATS Jobs Scraper and Workday Jobs Scraper, plus SEEK-specific fields.
  • 💸 Pay per job. No start fee and no compute charges to worry about.

Why this scraper instead of the alternatives?

SEEK Jobs ScraperThe two most-used SEEK Actors (Nov 2026)
Price per job$0.0015, no start fee$0.002–$0.0025; one also charges $0.01 per run
Shown salary parsed into min / max / currency / interval✅ Included, with a fallback to a salary stated in the descriptionText only at one, parsed at the other
Estimates of hidden salaries❌ Not offeredOne sells this as a $0.003-per-result add-on
Incremental "only new jobs" mode✅ One request when nothing is newOne of the two
Paste search URLs from the browser✅ Path and query filtersBoth
Same output schema as our ATS / Workday scrapers✅❌

How to scrape SEEK jobs

  1. Click Try for free or Start.
  2. Type your keywords and location, choose Australia or New Zealand, and add filters if you like. Or paste SEEK search URLs into SEEK search URLs.
  3. Set Max jobs per search and choose whether to include full job descriptions.
  4. Click Start. Then download the jobs as JSON, CSV, Excel or HTML, or get them through the API.

Input example

{
"keywords": "data engineer",
"location": "All Sydney NSW",
"country": "AU",
"classifications": ["information-communication-technology"],
"workTypes": ["full-time", "contract-temp"],
"workArrangements": ["hybrid", "remote"],
"dateRange": "7",
"salaryMin": 120000,
"salaryType": "annual",
"sortBy": "date",
"maxJobs": 100,
"includeDescription": true,
"onlyNewJobs": false
}

Or with URLs copied from SEEK:

{
"startUrls": [
{ "url": "https://www.seek.com.au/developer-jobs-in-information-communication-technology/in-All-Melbourne-VIC?daterange=7&worktype=242" },
{ "url": "https://www.seek.co.nz/nurse-jobs/in-Auckland" },
{ "url": "https://www.seek.com.au/job/95576249" }
],
"maxJobs": 200
}
FieldDescription
keywordsWhat you would type into SEEK's "What" box.
locationSEEK's "Where" box: suburb, city, region, state or postcode. The log shows which location SEEK matched. Empty = whole country.
countryAU (seek.com.au) or NZ (seek.co.nz).
classificationsSEEK classifications, e.g. information-communication-technology, healthcare-medical. Names ("Healthcare & Medical") and SEEK IDs ("1211") work too.
workTypesfull-time, part-time, contract-temp, casual-vacation.
workArrangementson-site, hybrid, remote.
dateRangeany, 1 (today), 3, 7, 14, 31 days.
salaryMin / salaryMax / salaryTypeSEEK's salary filter (annual, monthly, hourly). SEEK also matches on salaries that advertisers hide, so some results show no salary.
sortBydate (newest first, default) or relevance.
startUrlsSEEK search or job URLs. When present, the form fields above are ignored and each URL keeps its own filters.
maxJobsLimit per search (the form search, or each URL). Default 100. 0 = all SEEK returns (at most 550).
includeDescriptionFetch each job's full details (default true). Turn off for a much faster listing-only scrape.
onlyNewJobsIncremental mode: only output jobs not seen in previous runs of the same search.
stateKeyName of the monitor (separate monitors keep separate memories).
proxyConfigurationOff by default. See "Blocking and proxies" below.

Output example

Every job is one dataset item (description shortened):

{
"id": "seek:au:95639309",
"jobId": "95639309",
"site": "AU",
"title": "Management Accountant",
"company": "Careermode Consulting Group",
"advertiserId": "62019353",
"advertiserName": "CareerMode Consulting Group",
"isPrivateAdvertiser": false,
"isVerifiedAdvertiser": true,
"location": "Brisbane QLD",
"locations": ["Brisbane QLD"],
"area": "CBD & Inner Suburbs",
"state": "QLD",
"postcode": null,
"countryCode": "AU",
"country": "Australia",
"isRemote": false,
"workplaceType": "onsite",
"workArrangement": "On-site",
"employmentType": "FULL_TIME",
"workType": "Full time",
"classification": "Accounting",
"classificationId": "1200",
"subClassification": "Management Accounting & Budgeting",
"subClassificationId": "6157",
"salary": {
"min": 110000,
"max": 130000,
"currency": "AUD",
"interval": "year",
"text": "$110,000 to $130,000 + Super",
"source": "listing"
},
"postedAt": "2026-11-02T07:27:53.000Z",
"postedAtText": "3h ago",
"expiresAt": "2026-12-02T12:59:59.999Z",
"jobUrl": "https://www.seek.com.au/job/95639309",
"applyUrl": "https://www.seek.com.au/job/95639309/apply",
"isExternalApply": false,
"teaser": "You’ll own budgeting, forecasting and analysis as the business moves through its next stage of growth and acquisition.",
"bulletPoints": [
"Move away from month-end processes and shape real business decisions",
"Focus on operational analysis and commercial insight",
"Work from home 2 days a week"
],
"descriptionText": "The Company\n\nCareerMode has been exclusively engaged by one of Australia’s fastest-growing ...",
"descriptionHtml": "<p><strong>The Company</strong></p><p>CareerMode has been exclusively engaged by ...",
"roleId": "management-accountant",
"badges": [],
"isFeatured": false,
"logoUrl": "https://bx-branding-gateway.cloud.seek.com.au/b5e2dffd-e37a-4bc3-b1a4-2e72d5a5c30d.1/jdpLogo",
"companyProfile": null,
"sourceUrl": "https://www.seek.com.au/jobs?where=Brisbane&keywords=accountant&sortmode=ListedDate",
"scrapedAt": "2026-11-02T11:15:39.246Z"
}

More real items are in samples/sample-output.json (contact details in the descriptions are redacted there; the Actor outputs descriptions as published).

Notes on the fields:

  • id is stable across runs. Use it to de-duplicate.
  • company is the name shown on the ad. advertiserName is the advertiser account, often the legal name or a recruitment agency. Private advertisers show "Private Advertiser" with isPrivateAdvertiser: true.
  • salary is null when the ad shows no salary. When the text has no numbers ("Competitive salary + super"), min and max are null and text keeps the wording. A bare $ is read as AUD on seek.com.au and NZD on seek.co.nz.
  • employmentType maps SEEK's work type: Full time → FULL_TIME, Part time → PART_TIME, Contract/Temp → CONTRACT, Casual/Vacation → TEMPORARY. workType keeps SEEK's wording.
  • workplaceType is onsite, hybrid or remote from the advertiser's work arrangement; isRemote is true only for remote.
  • expiresAt, isExternalApply, isVerifiedAdvertiser, area, companyProfile and the descriptions need Include full job description.
  • Recruiter phone numbers and other contact fields that SEEK holds separately are not collected. Descriptions are output as the advertiser published them.

A RUN_SUMMARY record in the run's key-value store lists, for every search: jobs output, jobs listed, the total SEEK reported, already-seen and duplicate jobs, requests, and any warnings or errors.

How much does it cost to scrape SEEK jobs?

This Actor uses pay-per-event pricing. You pay $1.50 per 1,000 jobs ($0.0015 per job) for jobs that appear in your dataset. There is no start fee. Already-seen jobs in incremental mode, duplicates and failed searches cost nothing.

JobsPrice
100$0.15
1,000$1.50
10,000$15.00

Your Apify plan's free monthly credit applies. To cap spending, set Maximum cost per run in the run options. The scraper stops cleanly when the budget is reached and tells you so in the status message.

Scheduling and incremental monitoring of new jobs

Use this to get alerts for new jobs on SEEK, or to keep a job board in sync:

  1. Set up your search (form or URLs) and turn on Only new jobs. Give the monitor a name in Monitor name (e.g. nurses-auckland).
  2. Save the configuration as a Task and add a Schedule (e.g. every morning).
  3. The first run outputs all current matching jobs and saves them as the baseline.
  4. Every later run outputs only jobs listed since. Results are sorted newest first, and paging stops at the first page that was entirely seen before, so a run with nothing new makes one request and outputs nothing.

The memory is kept per search in a named key-value store (seek-jobs-scraper-state by default), under the key you choose. Changing a search's keywords, location or filters starts a new memory for it (changing only the date range or sort order does not). If you also set Max jobs per search, jobs beyond the limit are not remembered, so older ones can show up in a later run; for a clean "new since yesterday" feed, leave the limit at 0. Don't run two runs with the same monitor name at the same time.

SEEK's 550-result limit

SEEK's search returns at most 550 jobs for any one search, both on the website and in its API. When a search matches more, the log and RUN_SUMMARY say so. To get more jobs, split the search into narrower ones, for example by location, classification, work type or date listed, and add each as a separate start URL. Jobs that appear in several of your searches in one run are output (and charged) only once.

Blocking and proxies

SEEK is protected by Cloudflare. In testing (November 2026, from a home connection), every SEEK HTML page was challenged for non-browser clients, while SEEK's JSON API answered normally to this scraper's browser-like HTTP client. How Cloudflare treats a request depends on the IP address and the client, and Apify's datacenter IPs may be treated differently from the IPs we tested from.

  • The scraper runs without a proxy by default.
  • If SEEK answers with a challenge, the run stops at once (no hammering, no retries from the same IP), keeps any jobs already scraped, and the status message says so. You are not charged for jobs that weren't output.
  • If that happens, enable Proxy configuration with Apify Proxy, the RESIDENTIAL group and country AU (or NZ), and run again. With a proxy, the scraper also rotates to a new IP a few times before giving up.

Integrations and API

  • API. Start runs and fetch results with the Apify API, or the JavaScript and Python clients:

    curl -X POST "https://api.apify.com/v2/acts/rjmacarthy~seek-jobs-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{"keywords":"nurse","location":"Auckland","country":"NZ","maxJobs":50,"includeDescription":false}'
  • Webhooks. Get notified (or trigger your pipeline) when a run finishes.

  • Zapier, Make, n8n. Send new jobs to Google Sheets, Airtable, Slack, email or your CRM with no code.

  • Google Sheets, Slack, Airbyte, Keboola and more through Apify integrations.

  • AI agents. Use the Actor as a tool through the Apify MCP server.

FAQ

Do I need a SEEK account, cookies or a proxy? No account or cookies. A proxy is off by default and only needed if SEEK blocks the run (see "Blocking and proxies").

How fast is it? Without descriptions, 550 jobs take about 6 requests and a few seconds. With descriptions, each job needs one more request; at the default polite rate of 3 requests per second that is roughly 2–3 jobs per second.

Does it get more than 550 jobs per search? No. That's SEEK's own limit. Split large searches into narrower ones (see above).

Why does a job show no salary even though I filtered by salary? SEEK filters on the salary range the advertiser entered, even when the advertiser chose to hide it on the ad.

What does salary.source: "description" mean? The ad's salary field had no numbers, so the salary was taken from the description text (only with full descriptions on, and only when a dollar amount appears next to pay wording).

What happens with a URL that isn't a SEEK search or job? It's skipped with a clear warning in the log, and the other URLs continue.

Is it legal to scrape SEEK? The scraper collects job ads that employers publish to attract applicants, at a polite request rate, and doesn't collect contact fields beyond the published ad. SEEK's terms of use and its robots.txt restrict automated access to parts of the site, including the search API this Actor uses. Check that your use complies with SEEK's terms and the laws that apply to you, especially if you store or republish the data.

Limits

  • At most 550 jobs per search (SEEK's limit).
  • Descriptions need one request per job; large runs with descriptions are slower than listing-only runs.
  • Location is free text matched by SEEK. Check the log line "SEEK matched location ..." if results look off.
  • SEEK can change its private API at any time. The job-details query falls back to a minimal version (description only) if SEEK changes its schema, and the log says so.
  • Incremental state lives in a named key-value store in your account, created by the Actor itself. Deleting that store resets the monitor.

Ready-to-run examples

More scrapers by the same developer

Browse all my Actors on my Apify Store profile.

Support

Found a search that doesn't work, or need an extra field? Open an issue on the Issues tab with the input or URL. Fixes are usually quick.