# Seek Jobs Scraper — Australia & New Zealand (`crawloop/seek-jobs-scraper`) Actor

Seek Jobs Scraper for Australia and New Zealand. Search by keyword, location, or a listing URL and export title, company, salary, work type, and listing date as JSON.

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

## Pricing

from $1.49 / 1,000 job listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

> **Disclaimer:** Unofficial tool. Not affiliated with, sponsored by, or endorsed by SEEK. Data is read from the public job-search response only. No login. You are responsible for complying with applicable law and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.

**Seek scraper** for Australia and New Zealand (**Seek job scraper**, **Seek.com.au jobs**, **Seek.co.nz jobs**). A practical **Seek API alternative**: search by **keyword**, **location**, **work type**, **salary range**, or a **search URL**. Export **title**, **company**, **location**, **AUD/NZD salary**, **work type**, **remote/hybrid**, **classification**, **teaser**, and **listing date** as **JSON**, **CSV**, or **Excel**. Fast **HTTP**, **no headless browser**, **no login**. Call it from **Python**, **Node.js**, **cURL**, or **Apify MCP**.

Built for **recruiting intelligence**, **salary benchmarking**, and **hiring-intent** lists across Sydney, Melbourne, Brisbane, Auckland, and Wellington.

| Actor | Focus |
| :--- | :--- |
| Seek Jobs Scraper ◄── you are here | Australia and New Zealand job cards |
| [InfoJobs Job Scraper](https://apify.com/crawloop/infojobs-jobs-scraper) | Spain jobs, contract, and EUR salary |
| [APEC Jobs Scraper](https://apify.com/crawloop/apec-jobs-scraper) | France cadre jobs |
| [Stepstone Jobs Scraper](https://apify.com/crawloop/stepstone-jobs-scraper) | DACH commercial job board |
| [Arbeitsagentur Jobs Scraper](https://apify.com/crawloop/arbeitsagentur-jobs-scraper) | Germany public Jobsuche |
| [Glassdoor Scraper](https://apify.com/crawloop/glassdoor-scraper) | Employer reviews, salaries, and jobs |
| [Naukri Jobs Scraper](https://apify.com/crawloop/naukri-jobs-scraper) | India Naukri.com jobs |
| [Foundit Jobs Scraper](https://apify.com/crawloop/foundit-jobs-scraper) | Foundit.in / Monster India jobs |

### When to use this Actor

- You need a **Seek jobs scraper** that returns structured JSON for Australia or New Zealand
- You want **keyword + location + work type + salary range** without running a browser
- You need **company, location, salary label, work arrangement, and listing date** on each row
- You scrape Seek from **Python**, **Node.js**, or an **MCP** assistant
- You run a **daily monitor** and only want **new job ids** saved

### When not to use this Actor

- **Single job-ad pages** (`/job/…`). Those pages are behind a browser check. Use a search keyword or a search URL.
- **Resumes, candidate profiles, or apply-form automation.** This Actor reads public job cards only.
- **Guaranteed email or phone.** Search cards do not include direct contacts.
- **Seek Asia, Jobstreet, or Jobsdb.** This Actor covers Australia and New Zealand only.
- **A full job description.** The search card includes the teaser and bullet points. The ad page is not fetched.

### Key features

- **Australia and New Zealand** — `country` `AU` or `NZ`, or a start URL on either board
- **Search URL parsing** — `/python-jobs/in-All-Sydney-NSW` and query filters (`keywords`, `where`, `worktype`, `daterange`, `salaryrange`)
- **Native filters** — full time, part time, contract, casual; on-site, hybrid, remote; listed within 1–31 days; salary floor and ceiling
- **Salary on the card** — original label plus min, max, and period (`YEAR`, `MONTH`, `HOUR`) when the label contains numbers
- **HTTP JSON** — Chrome TLS against the public search endpoint, 256 MB, no browser
- **Proxy off by default** — the search endpoint responded without a proxy in testing
- **Monitor mode** — named Key-Value store of seen job ids; later runs save only new ids and stop when a date-sorted page is already known
- **Deduplicated job ids** across pages and keywords

### Use cases

| Use case | What you get |
| :--- | :--- |
| **Job aggregation** | Current Seek openings for a keyword and city |
| **Salary benchmarking** | Disclosed AUD or NZD bands with the pay period |
| **Remote and hybrid tracking** | Work arrangement from the card |
| **Recruiting intelligence** | Who is hiring, work type, classification, featured flag |
| **Daily what’s new** | `monitorMode` on a schedule — only new job ids are saved |

### Quick start

**Keyword and city:**

```json
{
  "keyword": "python",
  "location": "Sydney",
  "country": "AU",
  "maxItems": 50,
  "proxyConfiguration": { "useApifyProxy": false }
}
```

**Remote nursing roles listed in the last 7 days:**

```json
{
  "keyword": "registered nurse",
  "location": "Auckland",
  "country": "NZ",
  "workArrangement": "remote",
  "dateRange": "7",
  "maxItems": 50
}
```

**Search URL:**

```json
{
  "startUrls": [
    { "url": "https://www.seek.com.au/python-jobs/in-All-Sydney-NSW?daterange=7&worktype=242" }
  ],
  "maxItems": 50
}
```

### Input

| Field | Type | Description |
| :--- | :--- | :--- |
| `keyword` | string | Free-text search. Empty browses a location or classification |
| `searchKeywords` | string\[] | Extra keywords, each searched separately |
| `location` | string | Seek where text (`Sydney`, `All Melbourne VIC`, `Auckland`) |
| `country` | `AU` or `NZ` | Board. A start URL host overrides this for that URL |
| `startUrls` | request list | Search URLs. `/job/` pages are skipped |
| `workType` | enum | Full time, part time, contract, casual |
| `workArrangement` | enum | On-site, hybrid, remote |
| `dateRange` | enum | Listed within 1, 3, 7, 14, or 31 days |
| `salaryMin` / `salaryMax` | integer | Salary window in AUD or NZD |
| `salaryType` | enum | `annual`, `monthly`, or `hourly` |
| `classification` | string | Seek classification id, for example `6281` (ICT) |
| `sortBy` | enum | Relevance or newest. Monitor mode forces newest |
| `companyName` | string | Case-insensitive company match after search |
| `maxItems` / `maxPages` | integer | Caps. About 20 jobs per page |
| `monitorMode` | boolean | Save only job ids not seen in the named store |
| `proxyConfiguration` | object | Leave off unless a run returns HTTP 403 |

### Output

One dataset row per job card.

| Field | Type | Description |
| :--- | :--- | :--- |
| `jobId` | string | Seek job id |
| `title` | string | Listing title |
| `companyName` | string | Hiring company |
| `location` | string | Location label from the card |
| `country` / `currency` | string | `AU`/`NZ` and `AUD`/`NZD` |
| `salaryLabel` | string | Salary text as shown, when disclosed |
| `salaryMin` / `salaryMax` / `salaryPeriod` | number / string | Parsed from the label when it contains amounts |
| `workType` / `workArrangement` | string | Full time, contract, hybrid, remote, and similar |
| `classification` / `subclassification` | string | Seek category names |
| `teaser` / `bulletPoints` | string / string\[] | Card summary |
| `listingDate` | string | ISO listing time |
| `isFeatured` | boolean | Promoted card |
| `url` | string | Job URL on the board that was searched |
| `scrapedAt` | string | ISO-8601 UTC |

```json
{
  "source": "seek",
  "jobId": "94685930",
  "title": "Accountant",
  "companyName": "Example Practice",
  "location": "Carlton, Melbourne VIC",
  "country": "AU",
  "currency": "AUD",
  "salaryLabel": "$80,000 – $90,000 per year",
  "salaryMin": 80000,
  "salaryMax": 90000,
  "salaryPeriod": "YEAR",
  "workType": "Full time",
  "workArrangement": "Hybrid",
  "classification": "Accounting",
  "teaser": "Month-end reporting for a Melbourne practice.",
  "bulletPoints": ["Ledgers", "BAS"],
  "listingDate": "2026-09-18T01:08:16Z",
  "isFeatured": false,
  "url": "https://www.seek.com.au/job/94685930"
}
```

### Integration examples

#### Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/seek-jobs-scraper').call({
  keyword: 'python',
  location: 'Sydney',
  country: 'AU',
  maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.slice(0, 5));
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient(token)
run = client.actor("crawloop/seek-jobs-scraper").call(
    run_input={
        "keyword": "python",
        "location": "Sydney",
        "country": "AU",
        "maxItems": 50,
    }
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item.get("title"), item.get("companyName"), item.get("salaryLabel"), item.get("url"))
```

#### cURL

```bash
curl "https://api.apify.com/v2/acts/crawloop~seek-jobs-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keyword":"python","location":"Sydney","country":"AU","maxItems":50}'
```

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp). Connect your Apify account, then call `crawloop/seek-jobs-scraper`.

Example prompts:

- "Run Seek Jobs Scraper for python in Sydney, Australia, max 50, and return title, companyName, salaryLabel, location, and url as JSON"
- "Scrape Seek registered nurse jobs in Auckland, New Zealand, listed in the last 7 days that are remote"
- "Pull Seek accountant openings in Melbourne, then run InfoJobs Job Scraper for the same title in Madrid"

### Suite next step

This Actor covers Seek in Australia and New Zealand. For Spain, run [InfoJobs Job Scraper](https://apify.com/crawloop/infojobs-jobs-scraper). For France cadre roles, run [APEC Jobs Scraper](https://apify.com/crawloop/apec-jobs-scraper). For Germany’s public Jobsuche feed, run [Arbeitsagentur Jobs Scraper](https://apify.com/crawloop/arbeitsagentur-jobs-scraper). For the DACH commercial board, run [Stepstone Jobs Scraper](https://apify.com/crawloop/stepstone-jobs-scraper).

### FAQ

**Is this an official Seek API?**
No. It calls the public search JSON the website uses. You do not need Seek developer credentials.

**Can I paste a Seek search URL?**
Yes. `startUrls` accepts keyword paths and filtered query strings. Individual `/job/` pages are skipped because those pages are behind a browser check.

**Do I need a proxy?**
Leave proxy off. Testing reached the search JSON without one. Enable a proxy only if a run fails with HTTP 403.

**Is salary always present?**
No. Many ads omit pay. `salaryMin` and `salaryMax` are set only when the salary label contains amounts. Read `salaryPeriod` before comparing two numbers.

**Does this cover Seek Asia?**
No. Australia (`AU`) and New Zealand (`NZ`) only.

**What is monitor mode?**
With `monitorMode` on, seen job ids are stored in a named Key-Value store. The first run is the baseline. Later scheduled runs save only ids that were not seen before, and stop when a newest-first page is already known.

**Can I export JSON, CSV, or Excel?**
Yes. Every run writes a dataset you can download as JSON, CSV, or Excel, or pull with the Apify API.

### Related Actors

| Actor | Focus |
| :--- | :--- |
| Seek Jobs Scraper ◄── you are here | Australia and New Zealand jobs |
| [InfoJobs Job Scraper](https://apify.com/crawloop/infojobs-jobs-scraper) | Spain jobs |
| [APEC Jobs Scraper](https://apify.com/crawloop/apec-jobs-scraper) | France cadre jobs |
| [Stepstone Jobs Scraper](https://apify.com/crawloop/stepstone-jobs-scraper) | DACH commercial job board |
| [Arbeitsagentur Jobs Scraper](https://apify.com/crawloop/arbeitsagentur-jobs-scraper) | Germany Jobsuche |
| [Glassdoor Scraper](https://apify.com/crawloop/glassdoor-scraper) | Employer reviews, salaries, and jobs |
| [Naukri Jobs Scraper](https://apify.com/crawloop/naukri-jobs-scraper) | India Naukri.com jobs |
| [Foundit Jobs Scraper](https://apify.com/crawloop/foundit-jobs-scraper) | Foundit.in / Monster India jobs |

# Actor input Schema

## `keyword` (type: `string`):

Job search text, for example python, accountant, or registered nurse. Leave empty to browse a location.

## `searchKeywords` (type: `array`):

Optional extra keyword queries. Each keyword is searched separately and results are deduplicated by job id.

## `location` (type: `string`):

Seek where text, for example Sydney, All Melbourne VIC, or Auckland.

## `country` (type: `string`):

Which Seek board to search. A start URL on seek.co.nz selects New Zealand for that URL.

## `startUrls` (type: `array`):

Optional Seek search URLs. Keyword paths such as /python-jobs/in-All-Sydney-NSW and query filters (keywords, where, worktype, daterange, salaryrange) are parsed. Individual /job/ pages are skipped.

## `workType` (type: `string`):

Seek work-type filter.

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

Seek work-arrangement filter.

## `dateRange` (type: `string`):

Seek freshness window in days.

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

Seek salary floor. Sent with Maximum salary and Salary period. Amounts are in the board currency (AUD or NZD).

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

Seek salary ceiling. Leave empty to keep the range open-ended.

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

How Seek should interpret the salary range.

## `classification` (type: `string`):

Optional Seek classification id, for example 6281 for Information & Communication Technology.

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

Relevance needs a keyword. Monitor mode always sorts by listing date.

## `companyName` (type: `string`):

Optional case-insensitive match on the company name after search.

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

Maximum job rows to save across all searches. 0 means no row cap (still limited by max pages).

## `maxPages` (type: `integer`):

Safety cap. Each page returns up to 20 jobs.

## `monitorMode` (type: `boolean`):

Save and charge only job ids that were not seen in a previous run. The first run is the baseline. Use a stable monitor store name with an Apify Schedule.

## `monitorStoreName` (type: `string`):

Named Key-Value store for seen job ids. Use one name per watch.

## `resetMonitorState` (type: `boolean`):

Clear seen job ids before this run.

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

Leave proxy off. The Seek search API responds without a proxy. Turn a proxy on only if a run fails with HTTP 403.

## Actor input object example

```json
{
  "keyword": "python",
  "location": "Sydney",
  "country": "AU",
  "workType": "",
  "workArrangement": "",
  "dateRange": "",
  "salaryType": "annual",
  "sortBy": "",
  "maxItems": 100,
  "maxPages": 10,
  "monitorMode": false,
  "monitorStoreName": "seek-jobs-monitor",
  "resetMonitorState": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Default dataset items.

# 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 = {
    "keyword": "python",
    "location": "Sydney"
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/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 = {
    "keyword": "python",
    "location": "Sydney",
}

# Run the Actor and wait for it to finish
run = client.actor("crawloop/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 '{
  "keyword": "python",
  "location": "Sydney"
}' |
apify call crawloop/seek-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawloop/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/7D1xaGihCc1mD9WAm/builds/AAsfbTEEzZx7YPqaE/openapi.json
