How to use it: 3 steps
- Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
data analystin Search keywords. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
Search public SEEK job listings in Australia and New Zealand. Get job titles, employers, locations, salary text and dates without a SEEK login. A 20-job search costs $0.051 on the Free plan: $0.015 per start plus $0.0018 per saved job.
Who uses it
Recruiters in AU and NZ
Build a list of employers that hire for a role.
Pay researchers
Compare advertised pay for a role across cities.
Job alert builders
Get newly seen jobs each day on a schedule.
Price
Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.
| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.015 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Saved job | $0.0018 (from $0.0015 on paid Apify plans) | One unique SEEK listing card saved to the dataset. |
Examples
- One job: about $0.02.
- 1,000 jobs: about $1.81.
- Every day 100 jobs, for 30 days: about $5.85 a month.
Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 2,700 jobs.
Prices checked on 24 October 2026. See the current price on Apify.
Questions
Do I need a SEEK account?
No. The tool reads public job cards. You only need an Apify account.
Is the salary a number?
No. It is the text shown on the job card, or empty.
Does only new find edited jobs?
No. It finds job IDs it has not seen before.
Does an empty search cost money?
Yes, only the start fee. No job fee is charged.
Can I get every job or 1000 jobs at once?
No. A run saves at most 400 jobs and scans at most 25 pages. Check hasMore. Split research into distinct locations or queries if needed; overlapping searches can return the same ID.
Are salaries complete and numeric?
No. salary is the public card label or null. Hidden values are not estimated.
Does onlyNew detect edits or expired jobs?
No. It detects previously unseen IDs. Existing IDs stay in history; edited or missing cards are not emitted as changes.
Details
Step by step on Apify
- Open Input.
- Keep Search keywords as
data analyst, Location asSydneyand Country asAU. - Keep Maximum jobs at
20and Only new jobs off. - Click Start.
- Open the dataset Jobs view. Check
jobId,title,advertiserandurl.
Use cases
| Task | Suggested input | Key fields |
|---|---|---|
| Build a hiring research list | Keywords + location | title, advertiser, url |
| Compare advertised pay | salaryRange + work type | salary, location, classification |
| Track newly seen roles | onlyNew: true | jobId, listedAt, fetchedAt |
Tips for better results
- Pick the right country. Use Auckland with NZ and Sydney with AU.
- Use a classification ID, like 6281 for IT, to cut unrelated jobs.
- Split big searches by city or keyword. One run saves up to 400 jobs.
Limits and good to know
Data comes from SEEK Australia and SEEK New Zealand. Read the SEEK website terms before reusing the data. Public access does not grant a reuse licence. This Actor is an independent tool and is not endorsed by SEEK.
- Listing cards only. No login, CAPTCHA solving, profile export or full descriptions
- At most 25 pages, 100 requests, 10 MB of response data and 180 seconds of source work. A larger platform timeout does not expand these limits
- No claim that every matching SEEK job is returned. Search ordering, promoted cards and source page limits can reduce results
- Salary labels can be hidden, nonnumeric or hourly even when the search uses an annual range
- Keyword relevance and location radius come from SEEK. Exact text matching is not promised
- Source changes, blocked requests and invalid responses cause failure. A scan cap is best effort and returns a successful partial result
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"jobId": "94975181",
"title": "Category Analytics Assistant",
"advertiser": "Care Pharmaceuticals",
"location": "Bondi Junction, Sydney NSW",
"area": "All Sydney NSW",
"classification": "Sales",
"workType": "Full time",
"salary": null,
"listedAt": "2026-09-30T07:57:38.000Z",
"url": "https://www.seek.com.au/job/94975181",
"teaser": "Support the Head of Category and broader sales team providing data lead analytical insights to drive business growth and success.",
"bulletPoints": [
"Exciting opportunity to work with iconic brands",
"Competitive salary and bonus potential",
"Fast paced and friendly team"
],
"fetchedAt": "2026-10-14T10:59:01.984Z",
"country": "AU",
"source": "SEEK",
"licence": null
}Use it from code
Actor ID: cliqtomedia/seek-jobs-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/seek-jobs-scraper").call(run_input={
"keywords": "data analyst",
"where": "Sydney"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~seek-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keywords": "data analyst", "where": "Sydney"}'# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool
tool = ApifyActorsTool("cliqtomedia/seek-jobs-scraper")
result = tool.invoke({"run_input": {"keywords": "data analyst", "where": "Sydney"}})
print(result)The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.
Data fields (16)
| Field | Type | Meaning |
|---|---|---|
jobId | string | Original numeric SEEK job ID as a string. |
title | string | Public listing title. |
advertiser | string | Public advertiser description; may differ from employer company name. |
location | string | First SEEK location display label. |
area | string | Broader location hierarchy label when supplied by SEEK. |
classification | string | First SEEK job classification display label. |
workType | string | Employment type labels joined with commas. |
salary | string | Raw public salary label, or null when not disclosed. No numeric salary is inferred. |
listedAt | string | Original listing time as an ISO UTC timestamp, or null if absent. |
url | string | Public SEEK job URL for the selected country. |
teaser | string | Short public listing-card text with contact details redacted. |
bulletPoints | array | Public listing-card bullets, with contact details redacted; empty array if absent. |
fetchedAt | string | ISO UTC time when the card was read. |
country | string | SEEK market: AU or NZ. |
source | string | Data source name: SEEK. |
licence | null | Null because SEEK does not supply a reuse licence with the card. |
Input settings (9)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Search keywords | keywords | string | "data analyst" |
| Location | where | string | "Sydney" |
| Country | country | string | "AU" |
| Classification ID | classification | string | "" |
| Work type | workType | string | "any" |
| Annual salary range | salaryRange | string | "" |
| Posted in the last days | dateRange | integer | 0 |
| Maximum jobs | maxItems | integer | 20 |
| Only new jobs | onlyNew | boolean | false |
