# SEEK & JobStreet Job Scraper (`zilicon/seek-jobs-scraper`) Actor

Scrape jobs from SEEK, JobStreet and JobsDB and get title, company, location, salary, work type, work arrangement, listing date and apply URL. Eight countries across Australia, New Zealand and Asia. No login, no account.

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

## Pricing

$3.50 / 1,000 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/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

### Scrape jobs from SEEK, JobStreet and JobsDB

Pull job listings from the **SEEK family** of boards - the dominant job marketplaces across Australia, New Zealand and South-East Asia - with one actor and one input.

- **SEEK** - Australia, New Zealand
- **JobStreet** - Malaysia, Singapore, Philippines, Indonesia
- **JobsDB** - Thailand, Hong Kong

Every record carries title, company, location, advertised salary, work type, work arrangement, classification, listing date and a direct link. No login, no account, no headless browser.

**Get your first results in about 20 seconds:** press **Start** with the prefilled input. It returns 100 registered-nurse roles in Sydney. Then change the keyword, pick a different country, or narrow by salary and work arrangement.

Your **$5 of free Apify credit is worth roughly 1,430 job records** on this actor.

#### What you get per job

| Field | Example |
|---|---|
| `id` | `86134821` |
| `title` | Registered Nurse - General Practice |
| `company` | Cammeray Medical Practice |
| `advertiserId` | Stable id of the advertiser |
| `location` | Cammeray, Sydney NSW |
| `area` | `["Cammeray NSW 2062", "All Sydney NSW"]` |
| `countryCode` | `AU` |
| `salary` | `$42 - $50 per hour` - as advertised, when the employer publishes it |
| `workTypes` | `["Part time"]` |
| `workArrangements` | `["On-site"]` - Remote / Hybrid / On-site when tagged |
| `classifications` | `["Healthcare & Medical > General Practice"]` |
| `listingDate` | `2026-07-31T20:30:32Z` |
| `listingDateDisplay` | `2d ago` - as the board words it |
| `teaser`, `bulletPoints` | Short summary and the advert's highlight bullets |
| `isFeatured` | Whether the board promoted the listing |
| `url` | Direct link to the listing |
| `siteKey` | Which board the row came from |

#### Sample record

```json
{
  "id": "93695425",
  "title": "Registered Nurse - General Practice (Part-time/Full-time)",
  "company": "Cammeray Medical Practice",
  "advertiserId": "27207977",
  "location": "Cammeray, Sydney NSW",
  "countryCode": "AU",
  "area": ["Cammeray NSW 2062", "All Sydney NSW"],
  "salary": "$42 – $50 per hour",
  "workTypes": ["Part time"],
  "workArrangements": ["On-site"],
  "classifications": ["Healthcare & Medical > Nursing - General Medical & Surgical"],
  "listingDate": "2026-07-31T20:30:32Z",
  "listingDateDisplay": "2d ago",
  "teaser": "Seeking an enthusiastic RN to join our friendly general practice. Ideal for one who enjoys variety, patient care and a supportive, collaborative team.",
  "bulletPoints": [
    "A genuinely supportive, friendly team culture",
    "Varied, interesting clinical work that uses your full skill set",
    "Real opportunities to grow your skills in General Practice"
  ],
  "isFeatured": true,
  "url": "https://www.seek.com.au/job/93695425",
  "siteKey": "AU-Main"
}
```

### Filters

| Input | What it does |
|---|---|
| `keywords` | Job title or keyword, e.g. `registered nurse`, `react developer` |
| `maxResults` | Stop after this many jobs. Your cost control |
| `country` | Which board: `au`, `nz`, `my`, `sg`, `ph`, `id`, `th`, `hk` |
| `where` | Location, e.g. `Sydney`, `All Australia`, `Kuala Lumpur` |
| `distanceKm` | Widen the search around that location |
| `dateRangeDays` | Listed today, or in the last 3, 7, 14 or 31 days |
| `workType` | Full time, part time, contract/temp, casual - any combination |
| `workArrangement` | On-site, hybrid or remote |
| `minSalary`, `maxSalary`, `salaryType` | Advertised salary band, annual or hourly |
| `sortBy` | Board default, relevance, or date listed |
| `excludeKeywords` | Drop jobs containing any of these words |
| `maxPages` | Safety bound on how many pages to walk |
| `proxyConfiguration` | Standard Apify proxy input. Datacenter proxies are fine here |

Everything above except `excludeKeywords` is applied **by the board itself**, so you pay only for the rows you actually asked for. The board has no negative-keyword search, so exclusions are applied to the results after fetching.

Leaving both `keywords` and `where` blank browses the whole board - useful for a full-market sweep, but set `maxResults` first: an unfiltered Australian search matches over 160,000 listings.

#### A note on duplicate listings

The board returns each promoted job twice per page - once in the sponsored slot and once in the organic list. This actor de-duplicates by job id **before** results are written, so a promoted listing is never billed to you twice.

### What it costs

Pricing is **pay-per-event** on Apify's built-in per-result event: you pay per job returned and nothing at all for a run that finds no matches. There is **no per-run start fee**, so a scheduled hourly poll costs the same as one large daily pull of the same rows.

A worked example: the prefilled search - registered-nurse roles in Sydney - is about 905 matches; pulling all of them costs roughly **$3.17**. Widening it to a 50 km radius roughly doubles that to about 1,870 matches and **$6.55**. Capping the same search at 200 of the newest listings, sorted by date, costs **$0.70** - which is what a daily monitoring run actually looks like.

### Typical uses

- **Recruitment and sourcing** - a live feed of open roles in one specialty and region.
- **Labour-market and salary research** - posting volume and advertised pay bands over time, across eight countries.
- **Job boards and aggregators** - syndicate SEEK-family inventory into your own product.
- **Lead generation** - companies actively hiring are companies actively spending.

### Your feedback

If a country is missing, a field is wrong, or you need a filter the board supports that this actor does not yet expose, please open an issue on the **Issues** tab. Requests get read and acted on, and a short review helps other people find the actor.

### Disclaimer

This is an **unofficial** scraper. It is not affiliated with, endorsed by, or sponsored by SEEK Limited, JobStreet or JobsDB. It reads only data that those boards publish publicly, with no login and no access to private accounts.

#### Personal data in the output

Results may contain personal data (for example a named contact on a job posting). Personal data is protected by regulations such as the GDPR in the EU and the CCPA in California. You should not scrape or process personal data unless you have a legitimate reason to do so; if you are unsure whether your reason is legitimate, consult your lawyers.

# Actor input Schema

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

Job title or keyword to search for, e.g. 'registered nurse', 'react developer'. Searched server-side by the board. Leave blank to browse a location only.

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

Stop after this many jobs. Your cost control - 500 results costs about $1.75. Set 0 for no cap, which walks every page of the result set.

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

Which SEEK-family board to search. AU/NZ are SEEK, MY/SG/PH/ID are JobStreet, TH/HK are JobsDB. One actor covers them all - they share the same search API.

## `where` (type: `string`):

Location to search, e.g. 'Sydney', 'All Australia', 'Kuala Lumpur'. Leave blank to search the whole board.

## `distanceKm` (type: `integer`):

Widen the search around the location, e.g. 50. Ignored when no location is set.

## `dateRangeDays` (type: `string`):

Only jobs listed in this window. The board supports a fixed set of ranges. (A string rather than a number because Apify's schema only allows a dropdown on string fields.)

## `workType` (type: `array`):

Employment types to include, e.g. full time only, or contract plus casual. Leave empty for all.

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

On-site, hybrid or remote. Published by the board on the posting itself.

## `minSalary` (type: `integer`):

Only jobs advertising at least this figure, e.g. 100000 for annual or 40 for hourly. Set the matching Salary type below. Leave 0 to ignore salary.

## `maxSalary` (type: `integer`):

Upper bound of the salary range. Leave 0 for no upper bound.

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

Whether the salary figures above are annual or hourly. Only used when a salary bound is set.

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

Relevance is the board's default. Sort by date when you are polling for what is new.

## `excludeKeywords` (type: `string`):

Drop any job containing ANY of these words, e.g. 'agency casual'. The board has no negative-keyword search, so this is applied to the results after fetching.

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

Safety bound on how many result pages to walk. Raise it only when Max results is high and you are not getting enough rows back.

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

Proxy configuration. Datacenter proxies are fine for these boards; residential helps on very large runs.

## Actor input object example

```json
{
  "keywords": "registered nurse",
  "maxResults": 100,
  "country": "au",
  "where": "Sydney",
  "distanceKm": 0,
  "dateRangeDays": "",
  "workType": [],
  "workArrangement": "",
  "minSalary": 0,
  "maxSalary": 0,
  "salaryType": "annual",
  "sortBy": "",
  "maxPages": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Every job returned by the run, as rows in the default dataset.

# 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": "registered nurse",
    "where": "Sydney"
};

// Run the Actor and wait for it to finish
const run = await client.actor("zilicon/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": "registered nurse",
    "where": "Sydney",
}

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

```

## MCP server setup

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

```

## OpenAPI specification

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