# Seek Jobs Scraper — Australia & NZ, Salary + Description (`seemuapps/seek-jobs-scraper`) Actor

Scrape job listings across Australia and New Zealand by keyword, location, work type and salary — with full descriptions, employers and posting dates. No login.

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

## Pricing

$2.50 / 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.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Seek Jobs Scraper — Australia & New Zealand

Scrape job listings across Australia and New Zealand by keyword, location, work type and salary — complete with full job descriptions, employer names and posting dates. No login, no cookies, no account needed.

### What you get

Every record is one job listing:

- **Job** — title, full description (HTML *and* clean plain text), teaser, and the advertiser's highlight bullet points
- **Employer** — company name, advertiser ID, and company profile URL where published
- **Location** — suburb-level label plus the wider area and region, and the country code
- **Salary** — the advertised salary or hourly rate, as written by the employer
- **Terms** — work type (full time, part time, contract, casual) and work arrangement (remote, hybrid, on-site)
- **Category** — Seek classification and sub-classification, e.g. *Information & Communication Technology → Engineering - Software*
- **Timing** — exact UTC listing date, so you can spot brand-new postings
- **Contact** — the application phone number when the employer publishes one
- **Direct link** — the job URL to apply or review

### Use cases

- **Recruitment market research** — track which employers are hiring, for what, and at what salary
- **Salary benchmarking** — build a live picture of advertised pay by role, seniority and city
- **Job board aggregation** — feed AU/NZ listings into your own job site, newsletter or Slack alert
- **Lead generation for recruiters** — find companies advertising roles you can place candidates into
- **Competitor hiring intelligence** — watch a rival's headcount plans through the roles they advertise
- **Monitoring mode** — set *Posted within days* to 1 and schedule the run daily for a clean feed of new listings

### How to use

1. Pick a **Country** — Australia or New Zealand
2. Enter **Keywords** (e.g. `registered nurse`) and/or a **Location** (e.g. `Sydney NSW`, `Auckland`)
3. Optionally filter by **Work type**, **Minimum/Maximum salary**, and **Posted within (days)**
4. Leave **Include full job description** on to get complete descriptions, or turn it off for a much faster run
5. Set **Max jobs** (default 200; set `0` for unlimited)
6. Run the actor — results appear in the **Dataset** tab

#### Fetching more than one run's worth

The actor paginates automatically. To continue past **Max jobs**, open the **Key-value store** tab → copy `NEXT_PAGE_ID` → paste it into **Page ID** on the next run. It resumes at the exact listing where the previous run stopped, with no duplicates. If `NEXT_PAGE_ID` is `null`, every matching job has been fetched.

### Output format

Each dataset record:

```json
{
  "jobId": "93941097",
  "url": "https://au.seek.com/job/93941097",
  "title": "Senior Full Stack Engineer",
  "companyName": "NinjaTech AI",
  "advertiserId": "63827597",
  "location": "Sydney NSW",
  "area": "All Sydney NSW",
  "region": "New South Wales NSW",
  "countryCode": "AU",
  "listedAt": "2026-08-13T00:29:13.224Z",
  "salary": null,
  "workType": "Full time",
  "workArrangement": "On-site",
  "classification": "Information & Communication Technology",
  "subClassification": "Engineering - Software",
  "teaser": "Help us build autonomous AI employees that think, act, collaborate…",
  "bulletPoints": [
    "Build at the frontier of autonomous AI",
    "Have outsized impact",
    "Build technology that does real work"
  ],
  "isFeatured": true,
  "isPromoted": true,
  "descriptionHtml": "<p><strong>Why NinjaTech AI</strong></p>…",
  "descriptionText": "Why NinjaTech AI\nSuperNinja is an AI workforce that plans, writes code…",
  "phoneNumber": null,
  "searchKeywords": "software engineer",
  "searchLocation": "Sydney NSW"
}
```

Export to JSON, CSV, Excel or Google Sheets directly from the Apify console.

### Notes

- Many employers choose not to advertise a salary, so `salary` is `null` for a good share of listings. That is what the employer published, not a gap in the scrape.
- Turning **Include full job description** off makes runs several times faster, because the description is a separate request per job.
- `descriptionText` is a plain-text rendering of `descriptionHtml`, which keeps CSV and Google Sheets exports readable.

# Actor input Schema

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

Which Seek site to search — Australia or New Zealand.

## `keywords` (type: `string`):

Job title or keywords to search for, e.g. 'registered nurse' or 'software engineer'. Leave empty to browse a location only.

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

Where to search, e.g. 'Sydney NSW', 'Melbourne VIC' or 'Auckland'. Leave empty to search the whole country.

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

Restrict results to one employment type. Leave empty for all work types.

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

Lowest advertised salary to include, in local currency. Set 0 to ignore.

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

Highest advertised salary to include, in local currency. Set 0 for no upper limit.

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

Whether the salary range above is an annual or an hourly figure.

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

Only return jobs listed in the last N days — useful for monitoring runs. Set 0 for all listings regardless of age.

## `includeDescription` (type: `boolean`):

Fetch the complete job description, advertised salary and contact phone number for every listing. Turn off for a much faster run that returns search-card fields only.

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

Maximum number of jobs to return in this run. Set 0 for unlimited (the run paginates until every match is fetched or the run times out).

## `pageId` (type: `string`):

Paste NEXT\_PAGE\_ID from the previous run's Key-value store to continue where that run stopped.

## Actor input object example

```json
{
  "country": "AU",
  "keywords": "software engineer",
  "workType": "",
  "salaryMin": 0,
  "salaryMax": 0,
  "salaryType": "annual",
  "postedWithinDays": 0,
  "includeDescription": true,
  "maxItems": 200
}
```

# Actor output Schema

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

One job per record. Fields: jobId, url, title, companyName, location, area, region, countryCode, listedAt, salary, workType, workArrangement, classification, subClassification, teaser, bulletPoints, descriptionHtml, descriptionText, phoneNumber.

## `nextPageId` (type: `string`):

NEXT\_PAGE\_ID record in the default key-value store. Paste into Page ID on the next run to resume; null when every matching job has been fetched.

# 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": "software engineer"
};

// Run the Actor and wait for it to finish
const run = await client.actor("seemuapps/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": "software engineer" }

# Run the Actor and wait for it to finish
run = client.actor("seemuapps/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": "software engineer"
}' |
apify call seemuapps/seek-jobs-scraper --silent --output-dataset

```

## MCP server setup

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