SEEK Jobs Scraper: Every Job, Counted
Pricing
from $0.70 / 1,000 jobs
SEEK Jobs Scraper: Every Job, Counted
Every job a SEEK search lists in Australia or New Zealand, checked against SEEK's count. $1 per 1,000 jobs. Full description, salary and company profile.
Pricing
from $0.70 / 1,000 jobs
Rating
0.0
(0)
Developer
Luzi
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 hours ago
Last modified
Categories
Share
Get every job a SEEK search lists in Australia or New Zealand, checked against SEEK's own count for that search, and each job with its full description, salary, applicant count, work type, classification, expiry date, screening questions and the hiring company's profile (industry, size, website, rating and reviews). One row per job. No SEEK account or cookies needed.
Tested daily. Latest check: 25 of 25 python developer jobs in All Adelaide SA, matching SEEK's count; 973 jobs from three searches in Australia and New Zealand, two of them read whole (459 of 459).
What does this Actor do?
You give it keywords and a place, or links to SEEK job searches. For each search it reads SEEK's results and then each job's details, and saves one row per job, until it reaches your limit or the search has no more jobs. When the search has a count (up to 500 jobs), the run's final status tells you whether every job was read: "Saved 25 jobs from 1 search. That is every job the site lists for the search (25 of 25)."
SEEK repeats a few promoted jobs at the top of every results page, and its headline number counts those repeats. This Actor saves each job once and checks the search against the number of distinct jobs.
Each job comes with:
- its title, link, teaser, summary and the full description, as text and as HTML
- the date it was listed, when it expires, and whether it has expired
- the salary, when the job shows one
- work type (full time, part time, contract, casual) and work arrangement (on-site, hybrid, remote)
- SEEK's classification and subclassification, with their ids
- the place: suburb, city, state, postcode and country
- the advertiser, whether SEEK verified it and since when it advertises on SEEK
- the hiring company's SEEK profile, when it has one: industry, size, website, description, rating, number of reviews and perks
- the screening questions the employer asks applicants, when there are any
- the job's selling points, tags ("Expiring soon"), logo, cover image and video
- phone numbers the ad lists, when it lists any
- how many people applied and SEEK's application volume label, when SEEK shows them
- whether you apply on SEEK or on the employer's own site
- the search it was found in, and how many jobs SEEK counted for it
Why use it?
- Know you have the whole search. For a search of up to 500 jobs the run checks what it read against SEEK's own count, so a short read is never silent.
- The company comes with the job. Industry, size, website, rating and review count are on the row when the company has a SEEK profile.
- Track a job market. Run it daily with "Today" and "Newest first", and collect each day's new jobs in Australia or New Zealand.
- Use the data anywhere. Download as JSON, CSV or Excel, or send it to your own tools through Apify's API and integrations.
How to use it
- Pick the Country, then type one or more Keywords and a Location, or paste Search links, or both.
- Optionally, choose Classifications, Work types, Work arrangements, Date listed, a Salary range, Sort by and Max jobs per search.
- Click Start. When the run ends, open the Output tab to view the jobs or download them.
Run it with no input to see a sample: up to 100 "python developer" jobs in Adelaide, charged as usual.
Links that work
A SEEK job search on seek.com.au or seek.co.nz, such as
https://www.seek.com.au/data-engineer-jobs/in-All-Sydney-NSW?daterange=7 or
https://www.seek.co.nz/jobs?keywords=nurse&where=All%20Auckland. Its
keywords, place, classification, subclassification, work type, work
arrangement, date listed, salary and sort filters are used. Links on
au.seek.com and nz.seek.com work too. A classification written in the link's path
(/jobs-in-information-communication-technology) is not read: pick it under
Classifications instead. Other SEEK pages (a single job, a company) and
other sites stop the run before anything is read, naming the link.
Input
| Field | What it does | Default |
|---|---|---|
Country (market) | AU (seek.com.au) or NZ (seek.co.nz), for the keywords | AU |
Keywords (keywords) | Job titles or skills to search for, one search each | — |
Location (location) | A suburb, city, region or state, used for every keyword. Empty = whole country | — |
Classifications (classifications) | Only jobs in these SEEK classifications | all |
Work types (workTypes) | full-time, part-time, contract, casual | all |
Work arrangements (workArrangements) | on-site, hybrid, remote | all |
Date listed (datePosted) | any, or listed in the last 1, 3, 7, 14 or 31 days | any |
Salary type (salaryType) | annual, monthly or hourly: what the salary range is counted in | annual |
Salary from / to (salaryMin, salaryMax) | Only jobs paying in this range, in dollars | — |
Sort by (sortBy) | relevance or date (newest first) | relevance |
Search links (startUrls) | SEEK job search links | — |
Max jobs per search (maxJobsPerSearch) | Stop each keyword or link after this many jobs, 1 to 550 | 100 |
Give at least one keyword, a location, or one link. A location with no keywords searches every job there. Example input:
{"market": "AU","keywords": ["data engineer", "analytics engineer"],"location": "All Melbourne VIC","workArrangements": ["hybrid", "remote"],"datePosted": "7","maxJobsPerSearch": 200}
Output
One row per job. An example, with made-up values and the longer lists cut:
{"job_id": "95000001","url": "https://www.seek.com.au/job/95000001","title": "Data Engineer","company_name": "Example Pty Ltd","advertiser_id": "20000001","advertiser_name": "Example Pty Ltd","advertiser_verified": true,"advertiser_registered_at": "2012-05-01T00:00:00.000Z","is_private_advertiser": false,"employer_id": "7000","employer_name": "Example","employer_company_id": "800000","employer_company_url": "https://au.seek.com/companies/example-800000","company_profile_id": "7000","company_profile_url": "https://www.seek.com.au/companies/example-800000","company_industry": "Information & Communication Technology","company_size": "101-1,000 employees","company_website": "https://www.example.com","company_description": "We build example things.\nSince 1999.","company_rating": 4.1,"company_review_count": 42,"company_perks": ["Flexible hours", "Free snacks"],"company_logo_url": "https://image-service-cdn.seek.com.au/…","company_jobs_url": "https://au.seek.com/Example-jobs/at-this-company","logo_url": "https://image-service-cdn.seek.com.au/…","cover_image_url": "https://image-service-cdn.seek.com.au/…","location": "Melbourne VIC","suburb": "Melbourne","area": "CBD & Inner Suburbs","city": "Melbourne","state": "Victoria","postcode": "3000","country": "Australia","country_code": "AU","location_ids": ["21469"],"locations": [{"label": "Melbourne VIC","country_code": "AU","hierarchy": ["Melbourne VIC", "All Melbourne VIC"]}],"salary": "$140,000 – $160,000 + super","work_type": "Full time","work_type_id": "242","work_arrangements": ["Hybrid"],"work_arrangement_ids": ["2"],"classification": "Information & Communication Technology","classification_id": "6281","subclassification": "Engineering - Software","subclassification_id": "6287","classifications": [{"classification": "Information & Communication Technology","classification_id": "6281","subclassification": "Engineering - Software","subclassification_id": "6287"}],"role_id": "data-engineer","normalised_role_title": "Data Engineer","listed_at": "2026-10-14T01:02:03.000Z","listed_ago": "4d ago","expires_at": "2026-11-13T12:59:59.999Z","is_expired": false,"status": "Active","is_promoted": false,"display_type": "standard","apply_on_other_site": false,"is_verified": true,"has_role_requirements": true,"applicant_count": 90,"applicant_volume": "Medium application volume","badges": ["Hybrid"],"contacts": [{ "type": "Phone", "value": "03 9000 0000" }],"tags": ["Expiring soon"],"teaser": "Join a small team building our data platform…","abstract": "Hybrid role in the CBD.","bullet_points": ["Hybrid working", "Modern stack"],"screening_questions": ["Which of the following statements best describes your right to work in Australia?"],"video_url": null,"recruiter_name": null,"recruiter_photo_url": null,"details_read": true,"description_text": "About the role\n- Build our data platform…","description_html": "<p><strong>About the role</strong></p><ul><li>Build our data platform…</li></ul>","search_keyword": "data engineer","search_location": "All Melbourne VIC","search_location_resolved": "All Melbourne VIC","search_location_id": "1002","search_market": "AU","search_url": "https://www.seek.com.au/jobs?keywords=data%20engineer&where=All%20Melbourne%20VIC","search_total": 312,"search_listed": 318}
| Field | What it holds |
|---|---|
job_id | SEEK's id for the job |
url | The job's page |
title | The job's title |
company_name | The company hiring, as the ad names it |
advertiser_id | SEEK's id for the advertiser (the employer or its recruiter) |
advertiser_name | The advertiser's name |
advertiser_verified | true when SEEK verified the advertiser |
advertiser_registered_at | When the advertiser joined SEEK |
is_private_advertiser | true for a private advertiser |
employer_id | SEEK's id for the employer |
employer_name | The employer's name |
employer_company_id | The employer's company id, when it has a company page |
employer_company_url | The employer's company page |
company_profile_id | SEEK's id for the company profile |
company_profile_url | The company's SEEK profile, when it has one |
company_industry | The company's industry |
company_size | The company's size ("101-1,000 employees") |
company_website | The company's website |
company_description | The company's description, one paragraph a line |
company_rating | The company's rating on SEEK, out of 5 |
company_review_count | How many reviews the rating is from |
company_perks | The perks and benefits the company lists |
company_logo_url | The logo on the company's profile |
company_jobs_url | The advertiser's other jobs on SEEK |
logo_url | The logo on the job ad |
cover_image_url | The cover image on the job ad |
location | Where the job is, as SEEK shows it |
suburb | The suburb |
area | The area within the city, when SEEK gives one |
city | The city or region |
state | The state, territory or region |
postcode | The postcode |
country | The country |
country_code | AU or NZ |
location_ids | SEEK's ids for the place |
locations | Every place the ad lists, with its place names from narrow to broad |
salary | The pay, as shown. Empty when the job shows none |
work_type | Full time, Part time, Contract/Temp or Casual/Vacation |
work_type_id | SEEK's id for the work type |
work_arrangements | On-site, Hybrid or Remote |
work_arrangement_ids | SEEK's ids for them |
classification | SEEK's classification ("Information & Communication Technology") |
classification_id | Its id |
subclassification | SEEK's subclassification ("Engineering - Software") |
subclassification_id | Its id |
classifications | Every classification the ad lists |
role_id | SEEK's role id ("data-engineer") |
normalised_role_title | SEEK's name for the role |
listed_at | When the job was listed |
listed_ago | How long ago, as SEEK says it ("4d ago") |
expires_at | When the ad expires |
is_expired | true when the ad has expired |
status | Active or Expired |
is_promoted | true when SEEK showed the job as a promoted ad on the page that listed it, or an earlier one |
display_type | How SEEK lays the ad out in the results (standard for most) |
apply_on_other_site | true when you apply on the employer's own site |
is_verified | true when SEEK marks the ad verified |
has_role_requirements | true when the ad lists role requirements |
applicant_count | How many people applied, when SEEK shows it |
applicant_volume | SEEK's label for it ("Medium application volume") |
badges | The badges SEEK puts on the job ("Hybrid") |
contacts | Phone numbers the ad lists |
tags | SEEK's labels on the ad ("Expiring soon") |
teaser | The short text SEEK shows in the results |
abstract | The ad's summary |
bullet_points | The ad's selling points |
screening_questions | The questions the employer asks applicants |
video_url | The ad's video, when it has one |
recruiter_name | The recruiter named on the ad, when there is one |
recruiter_photo_url | That recruiter's photo |
details_read | false when the job was taken down while the run read it: the row then holds only what the results showed |
description_text | The full description, as plain text |
description_html | The full description, with its formatting |
search_keyword | The keyword the job was found under |
search_location | The location you searched |
search_location_resolved | The place SEEK searched for it |
search_location_id | SEEK's id for that place |
search_market | AU or NZ |
search_url | The search on SEEK |
search_total | How many distinct jobs SEEK counts for the search. Empty when the search filters on work type, work arrangement and salary at once |
search_listed | SEEK's headline number for the search, which counts promoted repeats too |
Not included: the apply link and an email address (SEEK shows them only to signed-in members), and the salary SEEK estimates for a job that shows none.
How much does it cost?
No surcharges and no paid options; an item that fails is not charged.
You pay for what you get:
- $1 per 1,000 jobs ($0.001 a job). Each job is charged once per run, even when two of your searches list it.
- No start fee, and nothing per search.
So a search that lists 400 jobs costs $0.40. If you set a maximum cost for a run, the Actor stops when it reaches it and keeps every job saved so far.
How long does a run take?
About 25 jobs in 15 to 25 seconds; 973 jobs from three searches in 6 to 10 minutes.
Good to know
- At most 550 jobs per search. That is what SEEK lists for one search. For more, split it: several cities instead of a whole state, or "Today" every day. A search of more than 500 jobs is read to SEEK's limit and is not checked against the count.
- SEEK decides what matches. Its count includes jobs that only loosely match a keyword; the Actor returns what SEEK lists.
- Counts move. SEEK's count for a busy search changes while it is read, so a search can read a job or two short of it. The final status says so, by search.
- One job, one row. A job found again in the same run, under the same or another search, is saved and charged once. It still counts toward each search that lists it, so every search is checked against its own count.
- A job taken down mid-run keeps the fields the results showed (title,
company, place, salary, teaser) and has
details_readset tofalse. - A search that cannot be read is reported in the run's status; the other searches carry on. The run fails only when none could be read.
- Running it daily? Remove repeats by
job_id.
More Actors from us
- AliExpress Product Scraper: Search Results & Prices: Every product of an AliExpress search to its last page, with exact sold counts and ratings.
- Amazon Product Scraper: Search Results & Prices: Every product on Amazon's search pages to the last page, sponsored marked, with monthly sales.
- App Store Reviews Scraper: All Reviews, Not 500: Every written App Store review of an app, not just the newest 500.
- Facebook Ads Library Scraper: Meta Ads by Keyword or Page: Meta Ad Library ads by keyword, Page or Ad Library link, with text, images, videos and dates.
- Facebook Comments Scraper: With Replies: Comments and replies from public Facebook posts, reels and videos, with reactions by type.
- Facebook Pages Scraper: Contacts, Followers & Ratings: Facebook Page details from links: exact follower count, phone, email, address, websites.
Use it from an AI agent or the API
One call starts a run and returns its items (Apify waits up to 300 seconds; for a
longer run, start it with POST /v2/acts/…/runs and read its dataset):
POST https://api.apify.com/v2/acts/luzivanlt~seek-jobs-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>
With the sample input as its JSON body:
{"market": "AU","keywords": ["python developer"],"location": "All Adelaide SA","datePosted": "any","salaryType": "annual","sortBy": "relevance","maxJobsPerSearch": 100}
Its inputs, in the order of the input form:
| Input | What it takes | Default |
|---|---|---|
market (Country) | Which SEEK to search: Australia (seek.com.au) or New Zealand (seek.co.nz). | "AU" |
keywords (Keywords) | Job titles or skills to search for, one search per keyword (e.g. "data engineer"). | — |
location (Location) | Where the jobs are, as you would type it on SEEK: a suburb, city, region or state (e.g. "All Sydney NSW", "Melbourne VIC 3000" or "All Auckland"). | — |
classifications (Classifications) | Only jobs in these SEEK classifications, for the keywords above. | — |
workTypes (Work types) | Only these work types, for the keywords above: full time, part time, contract/temp or casual/vacation. | — |
workArrangements (Work arrangements) | Only jobs on-site, hybrid or remote, for the keywords above. | — |
datePosted (Date listed) | Only jobs listed in this time, for the keywords above: any time, today, or the last 3, 7, 14 or 30 days. | "any" |
salaryType (Salary type) | What the salary range below is counted in: annually, monthly or hourly. | "annual" |
salaryMin (Salary from) | Only jobs paying at least this, in dollars, for the keywords above. | — |
salaryMax (Salary to) | Only jobs paying at most this, in dollars, for the keywords above. | — |
sortBy (Sort by) | The order SEEK lists the jobs in: relevance, or newest first. | "relevance" |
startUrls (Search links) | Links to SEEK job searches (seek.com.au or seek.co.nz; au.seek.com and nz.seek.com work too), e.g. https://www.seek.com.au/data-engineer-jobs/in-All-Sydney-NSW?daterange=7. | — |
maxJobsPerSearch (Max jobs per search) | Stop each keyword or link after this many jobs, from 1 to 550. | 100 |
Apify's MCP server, https://mcp.apify.com, lists it as luzivanlt/seek-jobs-scraper. To give an
AI agent this Actor as a tool, add the server to the agent's MCP config:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=luzivanlt/seek-jobs-scraper"}}}
The client signs in with OAuth, or add "headers": { "Authorization": "Bearer <APIFY_TOKEN>" }.
Charged per job delivered; the sample input above costs at most $0.10.
FAQ
Do I need a SEEK account or cookies? No. The Actor reads what anyone can see on SEEK without signing in.
Does it cover other SEEK sites (Jobstreet, JobsDB)? Not yet: Australia and New Zealand only.
Can I run it from my own code, on a schedule, or with other apps? Yes. Like any Apify Actor, you can start it through the Apify API, run it on a schedule, and connect it to other apps with Apify's integrations and webhooks.
Is it legal to scrape SEEK?
This Actor reads only public job ads. An ad can name a recruiter or list a phone number; treat those as personal data. Check SEEK's terms and the laws that apply to you (such as the Australian Privacy Act or the GDPR) before you use the data. If you are unsure, ask a lawyer.
Support
Found a problem or missing a feature? Open an issue on the Issues tab and include the run's link.
This Actor is not affiliated with, endorsed by or sponsored by SEEK.