SEEK Jobs Scraper AU & NZ โ Filters, No Login
Pricing
from $0.98 / 1,000 saved jobs
SEEK Jobs Scraper AU & NZ โ Filters, No Login
Collect public SEEK jobs in Australia and New Zealand for hiring research. Filter by location, work type, salary and date. Get full job text and new jobs only. No login.
Pricing
from $0.98 / 1,000 saved jobs
Rating
0.0
(0)
Developer
Cliqto Media
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Features
Share
Collect public SEEK jobs in Australia and New Zealand for hiring research, salary checks and job alerts. Search by keyword and location, then export job cards, full job text or new jobs only, with no login.
Good for recruiters, analysts and job sites. The smallest useful run is one keyword and one city with maxItems set to 20: it takes about 5 seconds and costs $0.043 on the Apify Free plan.

Table of contents
- What it does
- How it works
- Quick start
- Use cases
- Input
- Output
- Pricing
- Limits
- API, export and integrations
- Troubleshooting
- FAQ
- Related Actors
- Support
What it does
The Actor searches public jobs on SEEK Australia and SEEK New Zealand and saves one row per job. A row has the job ID, title, employer, location, category, work type, salary text, salary numbers when SEEK writes them, listing date and job link. You can also add the full job text and the listing end date.
Good fit
- You need a list of jobs for a role and a place, as a table or JSON.
- You check salaries for a role in one city or across many cities.
- You run the same search every day and want only the jobs you have not seen.
- You feed a job board, a CRM or an AI agent with public job data.
How it works
- You enter keywords, a location and the filters you need.
- The Actor reads SEEK search results page by page and adds the job text if you asked for it.
- It saves the jobs to a dataset that you can open as a table or download.
Quick start
-
Open the Input tab and enter a role in Search keywords, for example
data analyst(box 1 in the picture). -
Enter a city in Location, for example
Sydney(box 2 in the picture). -
Check Maximum jobs. Keep
20for a first run (box 3 in the picture). -
Click Start (the button is outside the picture).
-
Open the Output tab when the run ends. You see a table with one row per job (box 5 in the second picture).
Expected result: 20 public SEEK jobs in the dataset after about 5 seconds, with status SUCCEEDED.
Use cases
| Buyer job | Input path | Output entity | Key fields | Next integration |
|---|---|---|---|---|
| Find open roles for a recruiting list | keywords, where, classification | One job row | title, companyName, location, url | CSV to a CRM |
| Check pay for a role | keywords, moreLocations, salaryRange | One job row | salary, salaryMin, salaryMax, salaryPeriod | Google Sheets or BI tool |
| Get a daily alert of new jobs | keywords, where, onlyNew, sortBy | New job rows only | jobId, title, listedAt, url | Schedule and Slack or Notion summary |
| Study job text and skills | keywords, includeDescription | One job row with text | description, expiresAt, subClassification | AI agent or text analysis |
Input
Input fields
| Field | Plain name | Type | Required | Default / prefill | Allowed values | Effect | Example | Recommendation |
|---|---|---|---|---|---|---|---|---|
keywords | Search keywords | string | No | data analyst (prefill too) | Text | Main search text | nurse | Use a role name |
where | Location | string | No | Sydney (prefill too) | Text | Main search place | Melbourne | Use a city or state |
moreKeywords | More keywords (optional) | array of strings | No | Empty | Up to 10 | Adds searches | ["BI analyst"] | Add close role names |
moreLocations | More locations (optional) | array of strings | No | Empty | Up to 10 | Adds searches | ["Perth"] | Keep 20 searches or fewer in all |
radiusKm | Distance from location | string | No | any | any, 5, 10, 25, 50, 100 | Limits distance from the location | 25 | Use with a city |
country | Country | string | No | AU | AU, NZ | Selects the SEEK site | NZ | Match it to your locations |
classification | Classification ID | string | No | Empty | SEEK category number | Limits to one category | 6281 (IT), 1211 (healthcare) | Copy the number from a SEEK search link |
workType | Work type | string | No | any | any, Full time, Part time, Contract/Temp, Casual/Vacation | Limits work type | Full time | Use for a clear job type |
workArrangement | Work arrangement | string | No | any | any, On-site, Hybrid, Remote | Limits to one arrangement | Remote | Some jobs do not show this |
salaryRange | Annual salary range | string | No | Empty | min-max in dollars a year, up to 1000000 | Limits salary | 60000-150000 | Use whole numbers |
dateRange | Posted in the last days | integer | No | 0 | 0 to 31; 0 means any date | Keeps recent jobs only | 7 | Use with onlyNew for alerts |
maxItems | Maximum jobs | integer | No | 20 (prefill too) | 1 to 400 | Stops the run at this number | 100 | Start small |
sortBy | Sort by | string | No | relevance | relevance, date | Sets the result order | date | Use date with onlyNew |
onlyNew | Only new jobs | boolean | No | false | true, false | Saves jobs not seen in earlier runs | true | Use for repeat runs |
includeDescription | Add full job description | boolean | No | false | true, false | Adds description and expiresAt; costs more; takes longer | true | Turn on only if you need the text |
deliveryConnector | Send results to (optional) | string | No | Empty | Your Slack or Notion connector | Sends a summary after the run | Pick from the list | See Send results to Slack or Notion |
deliveryTarget | Notion page or channel (optional) | string | No | Empty | Notion page link or Slack channel ID | Where the summary goes | C0123456789 | Needed with deliveryConnector |
Empty input: a run with {} uses the defaults, so it searches for data analyst in Sydney and saves up to 20 jobs. An empty keywords value or an unknown field stops the run with reason INVALID_INPUT. It saves no rows and costs only the start fee.
Interacting settings
| When | Input A | Input B | Effective behavior | Example | Cost/result effect |
|---|---|---|---|---|---|
| Several searches | keywords + moreKeywords | where + moreLocations | Every keyword runs with every location, one after another. Each job is saved once. | 2 keywords ร 3 locations = 6 searches | The first searches can use all of maxItems |
| Repeat alerts | onlyNew | sortBy | Only jobs not seen before are saved. date shows the latest jobs first. | onlyNew: true, sortBy: date | An unchanged run saves 0 rows and costs only the start fee |
| Same alert, other limit | onlyNew | maxItems, sortBy, includeDescription | These three fields do not start a new history. Other search fields do. | Change maxItems from 20 to 50 | Earlier jobs stay marked as seen |
| Recent jobs | dateRange | Any search | SEEK has fixed date windows, so the Actor asks for the next wider window, then removes older jobs. | dateRange: 5 | Removed jobs are not charged, but they use up scan limits |
| Country and place | country | where | The place must be in the selected country. A search that finds only other countries goes on to the next search. | country: NZ, where: Sydney | 0 rows, reason LOCATION_OUTSIDE_COUNTRY, start fee only |
| Job text and time | includeDescription | Run timeout | The Actor stops before the timeout and keeps what it has saved. | 400 jobs take about 4 minutes | With a short timeout you get partial results and reason TIME_LIMIT |
| Delivery | deliveryConnector | deliveryTarget | Both are needed. A delivery error never fails the run. | Notion page link | No extra charge |
Input examples
Small search
{"keywords": "data analyst","where": "Sydney","maxItems": 20}
Expected behavior: one search for data analyst jobs in Sydney.
Expected output: 20 job rows without job text.
Limit or cost note: $0.043 on the Free plan.
New Zealand jobs with text
{"keywords": "software engineer","where": "Auckland","country": "NZ","includeDescription": true,"maxItems": 20}
Expected behavior: one search on SEEK New Zealand, then one job text for each row.
Expected output: 20 job rows with description and expiresAt filled when SEEK answers.
Limit or cost note: $0.061 on the Free plan.
Daily alert for many cities
{"keywords": "registered nurse","where": "Melbourne","moreLocations": ["Brisbane", "Perth"],"classification": "1211","workType": "Full time","salaryRange": "60000-150000","dateRange": 7,"sortBy": "date","onlyNew": true,"maxItems": 100}
Expected behavior: three searches, one after another. The first run saves up to 100 jobs and remembers them.
Expected output: later runs save only jobs not seen before.
Limit or cost note: first run up to $0.155 on the Free plan. An unchanged run costs $0.015.
Output
Output fields
| Field | Meaning | Type | Can be empty? | Example / enum | Source / notes |
|---|---|---|---|---|---|
jobId | SEEK job ID | string | No | 95654610 | Stable ID |
title | Job title | string | No | Data Analyst | Job card |
advertiser | Who placed the job | string | Yes | Hill's Pet Nutrition | May differ from the employer |
location | City or area | string | Yes | Sydney NSW | Job card |
area | Wider area | string | Yes | New South Wales NSW | Job card |
classification | Category | string | Yes | Information & Communication Technology | First category |
workType | Work type | string | Yes | Contract/Temp | Job card |
salary | Salary text | string | Yes | $100,000 - $150,000 | Null when not shown |
listedAt | Listing time, UTC | string | Yes | 2026-11-03T02:46:25.000Z | Job card |
url | Job link | string | No | https://au.seek.com/job/95654610 | Built from the job ID |
teaser | Short text | string | Yes | Data Analyst (12-month Contract)โฆ | Contact details removed |
bulletPoints | Short bullet list | array | No | [] | Empty array if none |
fetchedAt | When the row was read, UTC | string | No | 2026-11-06T00:48:57.387Z | Set by the Actor |
country | SEEK site | string | No | AU, NZ | From input |
source | Data source | string | No | SEEK | Fixed |
licence | Reuse licence | null | Always | null | SEEK gives no reuse licence with the job |
companyName | Employer name | string | Yes | Hills Pet Nutrition | When SEEK shows it |
subClassification | Sub-category | string | Yes | Database Development & Administration | First sub-category |
workArrangement | Work arrangement | string | Yes | On-site, Hybrid, Remote | When SEEK shows it |
logoUrl | Logo link | string | Yes | https://bx-branding-gateway.cloud.seek.com.au/โฆ | When SEEK shows it |
salaryMin | Lowest pay | number | Yes | 100000 | Only when written in salary |
salaryMax | Highest pay | number | Yes | 150000 | Only when written in salary |
salaryCurrency | Pay currency | string | Yes | AUD, NZD | When salary shows a dollar amount |
salaryPeriod | Pay period | string | Yes | hour, day, week, month, year | When written in salary |
searchKeywords | Search that found the job | string | No | data analyst | From input |
searchLocation | Location that found the job | string | Yes | Sydney | From input |
description | Full job text | string | Yes | Text | Only with includeDescription. Contact details removed. Up to 20,000 characters |
expiresAt | Listing end time, UTC | string | Yes | ISO time | Only with includeDescription |
Output entities and surfaces
| Situation | Dataset/API/KVS/live view | Result shape | User action |
|---|---|---|---|
| Normal item | Dataset, API, Output tab | One row per job | Open the table or download it |
| Domain-empty | Empty dataset. RUN_SUMMARY with status: not_found | Status SUCCEEDED, 0 rows | Use wider keywords or filters |
| Partial | Saved rows stay. RUN_SUMMARY shows the reason and hasMore | Status SUCCEEDED with a warning in the status line | Read the reason, then raise the limit or narrow the search |
| Technical failure | Saved rows stay. RUN_SUMMARY shows status and reason | Status FAILED | See Troubleshooting |
RUN_SUMMARY is a record in the run's key-value store. It has the counts of saved, scanned, filtered and skipped jobs, the reason the run stopped, and the warnings.
Output example
Input: the Small search example. This is one full row from a real run. null means that SEEK did not show the value, or that includeDescription was off.
{"jobId": "95654610","title": "Data Analyst","advertiser": "Hill's Pet Nutrition","location": "Sydney NSW","area": "New South Wales NSW","classification": "Information & Communication Technology","workType": "Contract/Temp","salary": null,"listedAt": "2026-11-03T02:46:25.000Z","url": "https://au.seek.com/job/95654610","teaser": "Data Analyst (12-month Contract) owning BI reporting ecosystem across Tableau and Domo.","bulletPoints": [],"fetchedAt": "2026-11-06T00:48:57.387Z","country": "AU","source": "SEEK","licence": null,"companyName": "Hills Pet Nutrition","subClassification": "Database Development & Administration","workArrangement": "Hybrid","logoUrl": "https://bx-branding-gateway.cloud.seek.com.au/64af5417-599b-4a63-9b91-6c36d26ded21.1/jdpLogo","salaryMin": null,"salaryMax": null,"salaryCurrency": null,"salaryPeriod": null,"searchKeywords": "data analyst","searchLocation": "Sydney","description": null,"expiresAt": null}
Send results to Slack or Notion
Pick your connector in the optional deliveryConnector field. After the run saves its data, the Actor posts a short summary (up to 25 rows and a link to the full dataset) there. Put a Notion page link or a Slack channel ID in deliveryTarget: in Notion every run is added on top of that one page, so your workspace does not fill up with new pages. A delivery error never fails the run and costs nothing extra. Connect a service once in Apify Console โ MCP connectors.
Use case โ fields
| Use case | Fields to use |
|---|---|
| Recruiting list | title, companyName, advertiser, location, url |
| Pay check | salary, salaryMin, salaryMax, salaryCurrency, salaryPeriod |
| New job alert | jobId, title, listedAt, url |
| Job text analysis | description, classification, subClassification, expiresAt |
Pricing
Pricing unit
The Actor uses pay per event. You do not pay platform usage: the developer pays it.
- Run start: $0.015 for each run at the default memory. The start fee scales with run memory (per GB).
- Each saved job: from $0.00098 to $0.0014, based on your Apify plan.
- Each job text: from $0.00063 to $0.0009, only when
includeDescriptionis on and SEEK returns the text.
| Apify plan | Each saved job | Each job text |
|---|---|---|
| Free | $0.0014 | $0.0009 |
| Bronze | $0.00126 | $0.00081 |
| Silver | $0.00112 | $0.00072 |
| Gold, Platinum, Diamond | $0.00098 | $0.00063 |
A valid search with no results, a filter with no matches and an unchanged onlyNew run all save 0 rows and cost only the start fee. Jobs removed by a filter or already seen are not charged. A partial or failed run costs the start fee plus the rows and job texts it saved. The Actor stops when your run charge limit is reached, keeps the saved rows and reports reason CHARGE_LIMIT.
Cost examples
| Scenario | Input scope | Expected item/event count | Base charge | Optional charge | Stop/cap behavior |
|---|---|---|---|---|---|
| One job | maxItems: 1 | 1 start, 1 job | $0.0164 | None | Stops at 1 job |
| Small search | maxItems: 20 | 1 start, 20 jobs | $0.043 | None | Stops at 20 jobs |
| Normal search | maxItems: 100 | 1 start, 100 jobs | $0.155 | None | Stops at 100 jobs |
| Normal search with text | maxItems: 100, includeDescription: true | 1 start, 100 jobs, 100 texts | $0.155 | $0.09 | Stops at 100 jobs |
| Largest search | maxItems: 400 | 1 start, 400 jobs | $0.575 | None | Stops at 400 jobs |
| Largest search with text | maxItems: 400, includeDescription: true | 1 start, 400 jobs, 400 texts | $0.575 | $0.36 | Stops at 400 jobs or at the time limit |
| No match or unchanged alert | Any | 1 start, 0 jobs | $0.015 | None | Ends with 0 rows |
All amounts are for the Free plan and the default memory of 256 MB. On Gold and higher, 100 jobs cost $0.113, or $0.176 with job text.
Limits
- One run saves up to 400 jobs and reads up to 25 pages per search and 60 pages in all.
- SEEK shows only part of a very large result list. If you need more, split the search by location or category.
- One run can do up to 20 searches.
- Without job text a run stops with reason
DEADLINEafter 180 seconds and keeps the saved rows. With job text it can run until 15 seconds before the run timeout, up to 1 hour. - If SEEK does not answer job text requests 3 times in a row, the Actor stops asking and saves the remaining rows without text. These rows have no job text charge.
onlyNewremembers up to 20,000 job IDs for each search setup. Run these searches one after another, not at the same time.- Above 20,000 IDs the run fails with reason
STATE_LIMIT. Rows and history saved before that point are kept. Use a narrower search setup. - If Apify blocks the job history store, the run still saves jobs and warns "New job history is not available". That run does not remember what it found.
- Each SEEK request waits up to 12 seconds and is tried at most twice.
- A job with changed text is not treated as new. The Actor does not report closed jobs and does not create schedules for you.
- The Actor reads only public jobs. It does not log in, apply to jobs or read employer accounts or applicant data. It removes emails and phone numbers from job text.
- Public access does not grant a reuse licence. Check the SEEK terms before you reuse the data. This Actor is an independent tool and is not endorsed by SEEK.
API, export and integrations
- API: start a run with the Apify API and read the dataset items.
- Export: download the dataset as JSON, CSV, Excel, XML or RSS.
- Scheduling: create an Apify schedule for daily
onlyNewruns. - Webhooks: add an Apify webhook to act when a run ends.
- SDK and MCP: use the Apify client for JavaScript or Python, or the MCP server below.
Use with AI agents (MCP)
Add this Actor as a tool through https://mcp.apify.com?tools=cliqtomedia/seek-jobs-scraper.
Smallest input:
{"keywords": "data analyst","where": "Sydney","maxItems": 20}
Main output fields: jobId, title, companyName, location, url.
Measured on a real run: 20 jobs in about 5 seconds, $0.043 on the Free plan.
Limits: 400 jobs and 20 searches per run. Only public SEEK jobs in Australia and New Zealand. Turn on includeDescription for job text; it costs more and takes longer.
Troubleshooting
The run has 0 rows
Symptom: status SUCCEEDED, empty dataset, status: not_found in RUN_SUMMARY.
Likely reason: the search or filters match no jobs, or onlyNew found nothing new.
Check: run the same search on SEEK, and look at filtered and duplicates in RUN_SUMMARY.
Action: use wider keywords, remove a filter or raise dateRange.
Reason is LOCATION_OUTSIDE_COUNTRY
Symptom: 0 rows and reason LOCATION_OUTSIDE_COUNTRY.
Likely reason: the location is in the other country, for example Sydney with country: NZ.
Check: compare where and country.
Action: change country or the location.
The run has fewer jobs than expected
Symptom: fewer rows than maxItems, with hasMore: true and a reason such as SCAN_LIMIT, TIME_LIMIT or CHARGE_LIMIT.
Likely reason: the run reached a limit from the Limits section, or your charge limit.
Check: read the status line and RUN_SUMMARY.
Action: raise the run timeout or charge limit, or split the search.
Some rows have no job text
Symptom: description is null with includeDescription: true, and descriptionsMissing is above 0.
Likely reason: SEEK did not answer for these jobs, or the job closed.
Check: read the warnings in RUN_SUMMARY.
Action: run again later. Rows without text have no job text charge.
The run failed with a reason that starts with SOURCE
Symptom: status FAILED and a reason such as SOURCE_SCHEMA, SOURCE_HOST_CHANGED or SOURCE_TRUNCATED. Rows saved before the error stay in the dataset.
Likely reason: SEEK changed, moved or blocked its public pages.
Check: open SEEK in a browser and run the example from Quick start.
Action: if the example also fails, write in the Issues tab.
The summary did not reach Slack or Notion
Symptom: the run succeeded, but there is no summary, and delivery in RUN_SUMMARY shows an error.
Likely reason: the connector is not connected, or deliveryTarget is wrong.
Check: open Apify Console โ MCP connectors.
Action: connect the service again, then check the page link or the channel ID.
FAQ
Do I need a SEEK account?
No. The Actor reads only public jobs and needs no login.
Does it work for New Zealand?
Yes. Set country to NZ.
Why is the salary empty?
Many employers do not show pay on SEEK. Then salary and the salary number fields are null.
Why do advertiser and companyName differ?
advertiser is who placed the job, for example a recruiting agency. companyName is the employer name when SEEK shows it.
How do I get only new jobs?
Set onlyNew to true and keep the same search fields in each run. The first run saves all jobs it finds and remembers them.
Do I pay for jobs that a filter removes?
No. You pay only for jobs saved in the dataset.
Related Actors
- StepStone Jobs Scraper DE, AT, BE, NL โ New Jobs, No Login for jobs in Germany, Austria, Belgium and the Netherlands.
- Google Jobs Scraper - Salary, Apply Links & Dates, No Login for jobs from many sites, with salary and apply links.
- Glassdoor Jobs & Reviews Scraper for jobs and company reviews.
- Remote Jobs Aggregator - RemoteOK, WWR & Himalayas, No login for remote jobs from several job boards.
- Wellfound Jobs Scraper: Startup Jobs to CSV & JSON for startup jobs.
Support
Use the Issues tab of this Actor. Include the run ID, the input mode and the error text if it is not sensitive. Never send tokens, cookies, passwords or private data.

