# SEEK Job Scraper — Australia & New Zealand (`khadinakbar/seek-job-scraper`) Actor

Search public SEEK Australia and New Zealand jobs. Returns normalized job listings with company, location, salary text, work type, descriptions, and source URLs for recruitment and market research.

- **URL**: https://apify.com/khadinakbar/seek-job-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Jobs, Lead generation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 validated seek job returneds

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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 Job Scraper — Australia & New Zealand

Extract public SEEK job listings into clean, agent-ready JSON. Search SEEK Australia or New Zealand by keyword, reuse a filtered public SEEK search URL, and return one validated record per job.

Use this for recruiter sourcing, job-market research, salary visibility analysis, and workflow automation. Do not use it to apply for jobs, access SEEK accounts, or collect candidate data.

### Scope and limitations

This actor collects only public job-ad information exposed by SEEK search and detail pages. SEEK can change page structure or challenge automated traffic; when that prevents every configured Residential browser route from returning a usable job, the actor reports an honest upstream failure instead of silently returning an empty dataset. It does not bypass logins, solve account challenges, retrieve candidates, or submit applications.

### What each record includes

Each returned job contains a stable SEEK job ID, title, advertiser, location, salary text when public, listed time, classification, work type, public job URL, and extraction timestamp. With **Include job descriptions** enabled, it also includes the public detail-page description when SEEK makes it available.

### Input options

- **Job keywords + Location** builds a SEEK Australia or New Zealand search, such as `software engineer` in `Melbourne VIC`.
- **Direct SEEK search URLs** preserves the filters you already set on a public `/jobs` results page. It takes precedence over keyword fields.
- **Maximum jobs** is a hard cap on saved and billable rows (1–200).
- **Include job descriptions** enriches each returned search card from its public detail page; turn it off for a faster compact result set.

### Example

```json
{
  "keywords": "data analyst",
  "location": "Sydney NSW",
  "country": "AU",
  "sortBy": "date",
  "maxResults": 25,
  "includeDetails": true
}
````

### Output contract

The dataset contains only validated job rows. `OUTPUT` contains the stable outcome (`COMPLETE`, `PARTIAL`, `VALID_EMPTY`, `INVALID_INPUT`, `UPSTREAM_FAILED`, or `CONFIG_ERROR`), counts, warnings, and charged-event totals. `RUN_SUMMARY` adds source coverage and diagnostics.

An empty successful search is reported as `VALID_EMPTY`. When some jobs were saved but a later page or detail page could not be accessed, the run reports `PARTIAL`. If SEEK blocks every configured route and no useful result can be saved, the run fails truthfully as `UPSTREAM_FAILED`.

### Pricing

Pricing is **$0.003 per validated job record written** plus a $0.00005 actor-start event per GB of configured memory. Apify platform compute and Residential proxy usage are passed through separately under **Pay per event + usage**. No event is charged for invalid, duplicate, or unsaved rows.

### AI-agent use

Use the actor from the Apify MCP Server when you need public SEEK job-market data. It returns structured job records; it does not provide candidate profiles, job applications, account access, or employment advice.

# Actor input Schema

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

Use this when you want the actor to build a SEEK search from a role or skill query. Enter ordinary search text such as software engineer or data analyst. It defaults to software engineer and can be combined with Location. Do not use this for a job URL or Boolean syntax that SEEK itself does not support.

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

Use this to narrow a keyword search to a SEEK place name. Enter a location such as Melbourne VIC or Auckland. It is optional and defaults to an Australia-wide or New Zealand-wide search when blank. This is not a proxy country setting or a street-address field.

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

Use this to choose the public SEEK site searched by structured keywords. Choose AU for seek.com.au or NZ for seek.co.nz. It defaults to AU. This does not override the host of a supplied direct SEEK search URL.

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

Use this when you already configured filters on a public SEEK results page. Enter one URL per line, such as https://www.seek.com.au/jobs?keywords=data+analyst. It is optional; when present it takes precedence over Job keywords and Location. Do not enter individual job pages, login pages, or URLs from other job boards.

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

Use this to choose how a keyword-built SEEK search is ordered. Choose relevance or date, for example date. It defaults to relevance. This setting does not rewrite the filters or sort order embedded in a Direct SEEK search URL.

## `maxResults` (type: `integer`):

Use this to cap the number of validated job records written to the dataset. Enter an integer such as 25. It defaults to 25 and accepts 1 through 200. This is not a page count; the actor stops before writing or charging more job rows than this limit.

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

Use this when you need the public job description and detail-page fields alongside search-card data. Set true or false, for example true. It defaults to true and a blocked detail page leaves the search result available with a warning. Set false for a faster, compact result set without detail-page enrichment.

## `proxyCountry` (type: `string`):

Use this to select the actor-managed Residential proxy used for the browser session. Choose AU or NZ, for example AU. It defaults to the selected SEEK market. This is not a location filter and does not collect credentials or cookies.

## Actor input object example

```json
{
  "keywords": "software engineer",
  "location": "Melbourne VIC",
  "country": "AU",
  "searchUrls": [
    "https://www.seek.com.au/jobs?keywords=data+analyst"
  ],
  "sortBy": "date",
  "maxResults": 25,
  "includeDetails": true,
  "proxyCountry": "AU"
}
```

# Actor output Schema

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

Normalized public SEEK job records returned by this run.

## `output` (type: `string`):

Compact outcome, item counts, warnings, and charged event totals.

## `runSummary` (type: `string`):

Detailed diagnostics, source coverage, and billing information for this 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": "software engineer",
    "location": "Melbourne VIC",
    "sortBy": "relevance",
    "maxResults": 25,
    "includeDetails": true,
    "proxyCountry": "AU"
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/seek-job-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",
    "location": "Melbourne VIC",
    "sortBy": "relevance",
    "maxResults": 25,
    "includeDetails": True,
    "proxyCountry": "AU",
}

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

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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",
  "location": "Melbourne VIC",
  "sortBy": "relevance",
  "maxResults": 25,
  "includeDetails": true,
  "proxyCountry": "AU"
}' |
apify call khadinakbar/seek-job-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=khadinakbar/seek-job-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "SEEK Job Scraper — Australia & New Zealand",
        "description": "Search public SEEK Australia and New Zealand jobs. Returns normalized job listings with company, location, salary text, work type, descriptions, and source URLs for recruitment and market research.",
        "version": "1.6",
        "x-build-id": "yW9vwPQ9tvhYau7Od"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~seek-job-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-seek-job-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/khadinakbar~seek-job-scraper/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-seek-job-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/khadinakbar~seek-job-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-seek-job-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "keywords": {
                        "title": "Job keywords",
                        "type": "string",
                        "description": "Use this when you want the actor to build a SEEK search from a role or skill query. Enter ordinary search text such as software engineer or data analyst. It defaults to software engineer and can be combined with Location. Do not use this for a job URL or Boolean syntax that SEEK itself does not support.",
                        "default": "software engineer"
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Use this to narrow a keyword search to a SEEK place name. Enter a location such as Melbourne VIC or Auckland. It is optional and defaults to an Australia-wide or New Zealand-wide search when blank. This is not a proxy country setting or a street-address field.",
                        "default": "Melbourne VIC"
                    },
                    "country": {
                        "title": "SEEK market",
                        "enum": [
                            "AU",
                            "NZ"
                        ],
                        "type": "string",
                        "description": "Use this to choose the public SEEK site searched by structured keywords. Choose AU for seek.com.au or NZ for seek.co.nz. It defaults to AU. This does not override the host of a supplied direct SEEK search URL."
                    },
                    "searchUrls": {
                        "title": "Direct SEEK search URLs",
                        "type": "array",
                        "description": "Use this when you already configured filters on a public SEEK results page. Enter one URL per line, such as https://www.seek.com.au/jobs?keywords=data+analyst. It is optional; when present it takes precedence over Job keywords and Location. Do not enter individual job pages, login pages, or URLs from other job boards.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "sortBy": {
                        "title": "Sort order",
                        "enum": [
                            "relevance",
                            "date"
                        ],
                        "type": "string",
                        "description": "Use this to choose how a keyword-built SEEK search is ordered. Choose relevance or date, for example date. It defaults to relevance. This setting does not rewrite the filters or sort order embedded in a Direct SEEK search URL.",
                        "default": "relevance"
                    },
                    "maxResults": {
                        "title": "Maximum jobs",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Use this to cap the number of validated job records written to the dataset. Enter an integer such as 25. It defaults to 25 and accepts 1 through 200. This is not a page count; the actor stops before writing or charging more job rows than this limit.",
                        "default": 25
                    },
                    "includeDetails": {
                        "title": "Include job descriptions",
                        "type": "boolean",
                        "description": "Use this when you need the public job description and detail-page fields alongside search-card data. Set true or false, for example true. It defaults to true and a blocked detail page leaves the search result available with a warning. Set false for a faster, compact result set without detail-page enrichment.",
                        "default": true
                    },
                    "proxyCountry": {
                        "title": "Residential proxy country",
                        "enum": [
                            "AU",
                            "NZ"
                        ],
                        "type": "string",
                        "description": "Use this to select the actor-managed Residential proxy used for the browser session. Choose AU or NZ, for example AU. It defaults to the selected SEEK market. This is not a location filter and does not collect credentials or cookies.",
                        "default": "AU"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
