# Seek Jobs Scraper — Australia & New Zealand, Cheap & Fast (`fabrikit/seek-jobs-scraper`) Actor

Seek Jobs Scraper for Australia and New Zealand: search seek.com.au and seek.co.nz by keyword, location, category, work type, date and salary. Gets titles, companies, salary, locations, bullet points and optional full descriptions. No login. Pay per result, no subscription.

- **URL**: https://apify.com/fabrikit/seek-jobs-scraper.md
- **Developed by:** [Fabrikit](https://apify.com/fabrikit) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 job results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Seek Jobs Scraper — Australia & New Zealand, Cheap & Fast

Seek Jobs Scraper pulls job listings from **seek.com.au** and **seek.co.nz** as clean JSON: title, company, location, category, work type, salary text, bullet points, listing date and (optionally) the full job description. No login, no browser, no cookies.

It works from Seek's own public search data, so it is fast and cheap: a run of 1,000 jobs usually finishes in a minute or two.

### What you can do with it

- Track hiring in a city, industry or company (market research, salary benchmarking).
- Build job feeds, alerts, newsletters or aggregators for Australia and New Zealand.
- Feed recruiter and sales tools with companies that are hiring right now.
- Analyse demand for skills (keywords) over time with daily scheduled runs.

### Features

- **Both sites**: Australia (`AU`) and New Zealand (`NZ`).
- **Filters**: keywords, locations (suburb, city, state, postcode), 30 job categories, work type (full time, part time, contract, casual), on-site / hybrid / remote, posted within N days, salary range (per year, month or hour), sort by relevance or newest.
- **Paste Seek URLs**: search result pages (with their filters) and single job pages (`/job/12345678`).
- **Goes past the ~500 jobs limit**: Seek only shows about 500 jobs per search. When you ask for more, the Actor splits the search automatically (category, work type, state, sub-category, days posted) and removes duplicates, so you can collect thousands of jobs in one run.
- **Optional full details** (add-on): full description as text and HTML, expiry date, advertiser verification, screening questions.
- **Privacy**: recruiter names, phone numbers and e-mail addresses are never returned; they are also scrubbed from descriptions.
- **Resilient**: automatic retries, and automatic fallback from datacenter to residential proxy if Seek blocks the requests.

### How to scrape Seek jobs

1. Pick the **site**: `AU` for seek.com.au or `NZ` for seek.co.nz.
2. Add **keywords** (job titles or skills) and **locations** (suburb, city, state or postcode). Each keyword is searched in each location; leave them empty for all jobs in the country.
3. Narrow down with **categories**, **work types**, **work arrangement** (on-site, hybrid, remote), **posted within N days** and a **salary range**.
4. Or paste **Seek URLs**: search result pages keep their filters, and single job pages (`/job/12345678`) are scraped directly.
5. Turn on **includeDetails** if you need the full description, expiry date and screening questions.
6. Set **maxItems**, run, and export the dataset as JSON, CSV or Excel.

### Input

| Field | Description |
|---|---|
| `site` | `AU` (default) or `NZ` |
| `keywords` | One search per keyword, e.g. `["nurse", "data analyst"]` |
| `locations` | One search per location, e.g. `["Sydney NSW", "Auckland"]` |
| `classifications` | Seek categories (multi-select) |
| `workTypes` | `full_time`, `part_time`, `contract`, `casual` |
| `workArrangement` | `any`, `onsite`, `hybrid`, `remote` |
| `postedWithinDays` | Only jobs listed in the last N days |
| `salaryMin`, `salaryMax`, `salaryType` | Salary filter (`annual`, `monthly`, `hourly`) |
| `sortBy` | `newest` (default) or `relevance` |
| `searchUrls` | Seek search or job URLs |
| `includeDetails` | Add full description etc. (billed as an extra event) |
| `maxItems` | Maximum jobs to return (default 50) |
| `proxyConfiguration` | Datacenter by default, residential fallback is automatic |

Example:

```json
{
  "site": "AU",
  "keywords": ["data analyst"],
  "locations": ["Sydney NSW"],
  "workTypes": ["full_time"],
  "postedWithinDays": 7,
  "includeDetails": true,
  "maxItems": 100
}
```

#### More input examples

Software engineer jobs in Melbourne with full descriptions (the "Software engineer jobs in Melbourne" example task):

```json
{ "site": "AU", "keywords": ["software engineer"], "locations": ["Melbourne VIC"], "includeDetails": true, "maxItems": 50 }
```

Registered nurse jobs in Brisbane (the "Registered nurse jobs in Brisbane" task):

```json
{ "site": "AU", "keywords": ["registered nurse"], "locations": ["Brisbane QLD"], "includeDetails": true, "maxItems": 50 }
```

Remote developer jobs in New Zealand posted in the last 3 days, without details (cheapest):

```json
{ "site": "NZ", "keywords": ["developer"], "workArrangement": "remote", "postedWithinDays": 3, "includeDetails": false, "maxItems": 200 }
```

Note: `includeDetails` is off by default in the API (the Console form pre-fills it on). Set it explicitly in API calls.

### Output

Each job is one dataset item (fields marked *details* are filled only with `includeDetails`):

```json
{
  "id": "95128645",
  "url": "https://www.seek.com.au/job/95128645",
  "title": "Engineer",
  "company": "Urban Utilities",
  "companyId": "61721412",
  "companyUrl": "https://au.seek.com/companies/urban-utilities-123456",
  "companyLogo": "https://bx-branding-gateway.cloud.seek.com.au/.../jdpLogo",
  "advertiserId": "61721412",
  "isVerifiedAdvertiser": true,
  "location": "Fortitude Valley, Brisbane QLD",
  "area": "Brisbane QLD",
  "country": "AU",
  "classification": "Engineering",
  "classificationId": "1209",
  "subClassification": "Water & Waste Engineering",
  "subClassificationId": "6191",
  "workType": "Full time",
  "workArrangement": "Hybrid",
  "salary": "$110,000 – $130,000 per year",
  "listingDate": "2026-10-08T00:29:06Z",
  "listedAgo": "5d ago",
  "teaser": "Engineer the future of Southeast Queensland ...",
  "bulletPoints": ["Shape the growth of Southeast Queensland", "Grow your career in water and development"],
  "isPremium": true,
  "description": "At Urban Utilities, our purpose is ...",
  "descriptionHtml": "<p>At Urban Utilities ...</p>",
  "status": "Active",
  "expiresAt": "2026-11-07T00:29:05.000Z",
  "screeningQuestions": null,
  "site": "AU",
  "scrapedAt": "2026-10-13T12:00:00.000Z"
}
```

Salary is returned as the text the advertiser published (many ads do not show one, then `salary` is `null`).

#### Output fields

| Field | Description |
|---|---|
| `id` / `url` | Seek job id and job page link. |
| `title` | Job title. |
| `company` / `companyId` / `companyUrl` / `companyLogo` | Advertiser shown on the ad, its Seek company page and logo. |
| `advertiserId` / `isVerifiedAdvertiser` | Seek advertiser id; verification flag (*details*). |
| `location` / `area` / `country` | Location text, wider area and site country. |
| `classification` / `subClassification` (+ ids) | Seek category and sub-category. |
| `workType` / `workArrangement` | Full time, part time, contract or casual; on-site, hybrid or remote. |
| `salary` | Salary text exactly as advertised, or `null`. |
| `listingDate` / `listedAgo` | When the job was listed. |
| `teaser` / `bulletPoints` | Short summary and selling points from the ad. |
| `isPremium` | Featured / premium ad flag. |
| `description` / `descriptionHtml` | Full description as text and HTML (*details*). |
| `status` / `expiresAt` | Ad status and expiry date (*details*). |
| `screeningQuestions` | Employer screening questions, when present (*details*). |
| `site` / `scrapedAt` | `AU` or `NZ`, and when the job was collected. |

### How much does it cost to scrape Seek?

Pay per event, no subscription:

| Event | When |
|---|---|
| `job-result` | each job saved to the dataset |
| `job-details` | only with `includeDetails` on, per job whose details were fetched |
| `apify-actor-start` | once per run (a fraction of a cent) |

From 30 October 2026, 1,000 jobs cost US$2 on the Apify Free plan; paid Apify plans pay less per job — see the **Pricing** tab. Full details add US$0.50 per 1,000 jobs on every plan, so 1,000 jobs with full descriptions cost US$2.50 on the Free plan. Set `maxItems` and your run budget cap on Apify to control spend; the Actor stops cleanly when the budget limit is reached.

### FAQ

**Does it need a login or cookies?** No. It only reads public listings.

**How many jobs can I get?** As many as match your search. A single Seek query is limited to about 500 results; the Actor splits larger searches automatically. Very large, unfiltered runs reach roughly 90% of what Seek reports because listings change while the run is going.

**Why is `salary` often empty?** Many employers do not publish pay. We never guess salary.

**Are recruiter contacts included?** No. Names, phones and e-mail addresses of recruiters are dropped and scrubbed from descriptions.

**Which proxy should I use?** Leave the default. The Actor starts with datacenter IPs and switches to residential IPs automatically when Seek blocks.

**Can I schedule it?** Yes: use Apify schedules with `postedWithinDays: 1` for a daily fresh-jobs feed, and the `id` field to deduplicate.

**Is the salary filter exact?** It uses Seek's own salary filter: jobs whose advertised range overlaps yours are returned. Seek's filter can also include ads that do not display a salary, so check the `salary` field.

**What if Seek blocks every request?** The Actor retries on residential IPs automatically. If no job at all can be retrieved, the run fails with a clear message instead of returning an empty dataset.

**Can I get jobs from one company only?** Paste the company's Seek search URL into `searchUrls`, or search by the company name as a keyword and filter the `company` field.

### Is it legal to scrape Seek?

This Actor only collects job ads that Seek shows publicly to any visitor, without logging in. It deliberately drops recruiter names, phone numbers and e-mail addresses, and scrubs contact details from descriptions, but job ads can still contain personal information, so data-protection laws such as Australia's Privacy Act, New Zealand's Privacy Act 2020, the EU GDPR, Chile's Ley 21.719 or the California CCPA may apply to how you use the data. You are responsible for a lawful purpose and for respecting Seek's terms of service, and job ad texts belong to the advertisers. This is general information, not legal advice.

### Integrations

Run the Seek Jobs Scraper from the Apify API or the JavaScript and Python clients, send new jobs onward with webhooks, or schedule a daily run with `postedWithinDays: 1` in Apify Console. It works with n8n, Make and Zapier (for example, to post new jobs to Slack or a Google Sheet), and with LangChain and LlamaIndex through their Apify integrations. AI agents in Claude, ChatGPT, Cursor and other MCP clients can find and run it through Apify's MCP server. Export as JSON, CSV or Excel, or read from the dataset API.

### Use with AI agents

Use this actor to search job ads on Seek Australia or New Zealand by keyword, location, category, work type, arrangement, date and salary, optionally with full descriptions.

```json
{ "site": "AU", "keywords": ["data analyst"], "locations": ["Sydney NSW"], "postedWithinDays": 7, "maxItems": 30 }
```

Main output fields: `title`, `company`, `location`, `classification`, `workType`, `workArrangement`, `salary`, `listingDate`, `url`, and with details `description`. It is pay-per-event: an agent pays a small start fee plus a fixed price per job saved (and per job with details), not for compute time.

### Related actors

- [ATS Jobs Scraper](https://apify.com/fabrikit/ats-jobs-api) — jobs straight from company career pages on Greenhouse, Lever, Ashby and SmartRecruiters.
- [Greenhouse Jobs Scraper](https://apify.com/fabrikit/greenhouse-jobs-scraper) — every job on one or many Greenhouse boards.
- [GetOnBrd Jobs Scraper](https://apify.com/fabrikit/getonbrd-jobs-scraper) — tech jobs in Latin America.
- [Trabajando.cl Jobs Scraper](https://apify.com/fabrikit/trabajando-cl-jobs-scraper) — job listings in Chile.

#### Ready-made examples

- [Software engineer jobs in Melbourne](https://apify.com/fabrikit/seek-jobs-scraper/examples/software-engineer-jobs-melbourne)
- [Registered nurse jobs in Brisbane](https://apify.com/fabrikit/seek-jobs-scraper/examples/nurse-jobs-brisbane)
- [Developer jobs in Auckland, New Zealand](https://apify.com/fabrikit/seek-jobs-scraper/examples/developer-jobs-auckland)

### Changelog

- **2026-10-16** — README expanded: how-to, more input examples, output field table, FAQ, legal notes, integrations and example tasks.
- **2026-10-15** — Published on the Apify Store. Tiered pricing announced, effective 2026-10-30 (lower per-job price on paid Apify plans).
- **2026-10-13** — Builds 0.1.1–0.1.3: initial release for Seek AU and NZ with filters, automatic search splitting beyond ~500 results, optional full details and residential proxy fallback.

### En español

Scraper de ofertas de empleo de **Seek Australia y Seek Nueva Zelanda**. Filtra por palabra clave, ciudad, categoría, tipo de jornada, modalidad (presencial, híbrido, remoto), días de publicación y sueldo; devuelve título, empresa, ubicación, sueldo publicado, puntos clave y, opcionalmente, la descripción completa. Supera el límite de ~500 resultados de Seek dividiendo la búsqueda automáticamente. No devuelve nombres, teléfonos ni correos de reclutadores. Se cobra por oferta guardada (y un extra por oferta con detalle completo); el precio vigente para tu plan está en la pestaña Pricing.

# Actor input Schema

## `site` (type: `string`):

Which Seek site to search: Australia (seek.com.au) or New Zealand (seek.co.nz).

## `keywords` (type: `array`):

Job titles or skills to search for, one search per entry (for example: nurse, data analyst, electrician). Leave empty for all jobs.

## `locations` (type: `array`):

Cities, suburbs, states or postcodes, one search per entry (for example: Sydney NSW, Melbourne, Auckland, 3000, Queensland). Leave empty for the whole country.

## `classifications` (type: `array`):

Only jobs in these Seek categories. Leave empty for all categories.

## `workTypes` (type: `array`):

Only these work types. Leave empty for all.

## `workArrangement` (type: `string`):

Filter by on-site, hybrid or remote jobs. 'Any' applies no filter.

## `postedWithinDays` (type: `integer`):

Only jobs listed in the last N days (1 = last 24 hours). Leave empty for no limit.

## `salaryMin` (type: `integer`):

Minimum pay in the unit chosen below. Only jobs whose advertised range overlaps are returned.

## `salaryMax` (type: `integer`):

Maximum pay in the unit chosen below.

## `salaryType` (type: `string`):

Whether the salary limits are per year, per month or per hour.

## `sortBy` (type: `string`):

Relevance or newest first.

## `searchUrls` (type: `array`):

Paste search result URLs copied from seek.com.au or seek.co.nz (with their filters), or single job URLs (https://www.seek.com.au/job/12345678). They are used in addition to the fields above.

## `includeDetails` (type: `boolean`):

Also fetch each job's full description (text and HTML), expiry date, advertiser verification and screening questions. Billed as an extra 'job-details' event per job.

## `maxItems` (type: `integer`):

Maximum number of jobs to return. Seek shows about 500 jobs per query, so larger limits are reached by splitting the search automatically.

## `proxyConfiguration` (type: `object`):

Datacenter proxy by default; the Actor automatically falls back to residential IPs if Seek blocks the requests.

## Actor input object example

```json
{
  "site": "AU",
  "keywords": [
    "data analyst"
  ],
  "locations": [
    "Sydney NSW"
  ],
  "workArrangement": "any",
  "salaryType": "annual",
  "sortBy": "newest",
  "includeDetails": true,
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `jobs` (type: `string`):

All jobs collected during the run

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "data analyst"
    ],
    "locations": [
        "Sydney NSW"
    ],
    "includeDetails": true,
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fabrikit/seek-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": ["data analyst"],
    "locations": ["Sydney NSW"],
    "includeDetails": True,
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("fabrikit/seek-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "data analyst"
  ],
  "locations": [
    "Sydney NSW"
  ],
  "includeDetails": true,
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call fabrikit/seek-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fabrikit/seek-jobs-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/ZtdSe3AxZIVj6Yj5S/builds/qbAxq7Vp7tVlryFjZ/openapi.json
