# SEEK & JobStreet Jobs Scraper - Salary, Company, AU NZ Asia (`om_kh/seek-jobstreet-jobs-scraper`) Actor

Job listings from SEEK (Australia, New Zealand), JobStreet (Malaysia, Singapore, Indonesia, Philippines) and JobsDB (Hong Kong, Thailand) in one Actor: title, company, location, parsed salary, work type, date, full description and company details. $1 per 1,000 jobs, no start fee.

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

## Pricing

Pay per event

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 & JobStreet Jobs Scraper — Salary, Company, AU NZ Asia

> One Actor for **8 job boards**: **SEEK** Australia and New Zealand, **JobStreet** Malaysia,
> Singapore, Indonesia and the Philippines, **JobsDB** Hong Kong and Thailand. Title,
> company, location, **salary parsed into min / max / period**, work type, category, date —
> and optionally the full description with company size, industry, website and rating.
> **$1 per 1,000 jobs, no start fee.**

### What does this SEEK and JobStreet scraper do?

It searches the job boards you pick with your keywords (and optional location, date and
work-type filters) and returns one clean row per job. All eight sites run on SEEK's
platform, so you get **the same schema for every country** — ideal for APAC salary
benchmarks, recruitment dashboards and job aggregators.

Turn on **Include full job details** to add, per job:

- the full description (clean text **and** original HTML),
- salary with **currency** (SGD, MYR, PHP, THB, AUD...) when the employer publishes it,
- expiry date, whether the advertiser is verified, and whether applying happens on an external site,
- **company profile**: size, industry, website, rating and number of reviews,
- **emails and phone numbers printed in the ad**, when there are any.

Turn on **Only new jobs** and schedule it: each run returns only jobs you have not seen yet.

### Why use it

1. **8 countries, one input.** Pick AU, NZ, MY, SG, ID, PH, HK, TH in one run.
2. **Salary you can sort.** `salaryMin`, `salaryMax`, `salaryPeriod` (hour / day / month /
   year) parsed from labels like "RM 3,500 – RM 5,250 per month".
3. **Fast.** 450 jobs across 3 countries in about 5 seconds in our test.
4. **Cheap and simple.** $0.001 per job, +$0.001 per job with full details. No start fee.
   Up to 20 free jobs per run (at most half of the run).
5. **API, n8n, Make, Zapier and MCP ready.**

### How to use it in 3 steps

1. Click **Try for free** — "data analyst" in Australia and Singapore is prefilled.
2. Set your keywords, countries and optional filters (location, posted within N days,
   work type), and whether you want full details.
3. Click **Start** and download JSON, CSV or Excel.

### Input

| Field | What it does |
|---|---|
| `searchTerms` | Job keywords (up to 20). Empty = all jobs. |
| `countries` | `AU`, `NZ` (SEEK), `MY`, `SG`, `ID`, `PH` (JobStreet), `HK`, `TH` (JobsDB). |
| `location` | Optional city/region, e.g. `Sydney NSW`, `Melbourne`, `Kuala Lumpur`. |
| `maxJobs` | Per keyword and country, 1 to 5,000. Default 100. |
| `postedWithinDays` | Optional: only jobs listed in the last N days. |
| `workType` | `full_time`, `part_time`, `contract`, `casual` or `any`. |
| `sortBy` | `newest` (default) or `relevance`. |
| `includeDetails` | Full description, salary currency, company profile, contacts. |
| `monitorEnabled` / `monitorId` | Only jobs not seen in previous runs. |
| `maxTotalChargeUsd` | Optional hard cost cap for the run. |

```json
{
  "searchTerms": ["data analyst", "software engineer"],
  "countries": ["AU", "SG", "MY"],
  "postedWithinDays": 7,
  "maxJobs": 500,
  "includeDetails": true
}
```

### Output

Real example (JobStreet Singapore, with details, description trimmed):

```json
{
  "jobId": "94970398",
  "title": "Supply Planner / Demand Planner | FMCG | Forecasting & MPS | UP $6K #HYT",
  "company": "Recruit Express",
  "location": "Central Region",
  "country": "SG",
  "site": "JobStreet Singapore",
  "salary": "$5,800 – $6,300 per month",
  "salaryMin": 5800,
  "salaryMax": 6300,
  "salaryPeriod": "month",
  "salaryCurrency": "SGD",
  "workType": "Full time",
  "workArrangement": "On-site",
  "classification": "Manufacturing, Transport & Logistics",
  "subClassification": "Purchasing, Procurement & Inventory",
  "postedAt": "2026-09-30T05:36:36Z",
  "url": "https://sg.jobstreet.com/job/94970398",
  "description": "Salary: Up to $6,300\nLocation: Walking distance from Lorong Chuan MRT\nJob Scope: ...",
  "expiresAt": "2026-10-30T12:59:59.999Z",
  "advertiserVerified": true,
  "companySize": "101-1,000 employees",
  "companyIndustry": "Employment Services",
  "companyWebsite": "http://www.recruitexpress.com.sg",
  "companyRating": 4.2,
  "companyReviewCount": 25,
  "contactEmails": [],
  "contactPhones": [],
  "totalMatches": 5003,
  "status": "ok"
}
```

### How much does it cost?

| Event | Price |
|---|---|
| Job | **$0.001** ($1 per 1,000) |
| Full job details (optional) | **+$0.001** per job |
| Start fee | none |

Example: 5,000 jobs with full details = **$10**; without details = **$5**.
Up to 20 jobs of every run are free (at most half of the run). Paid Apify plans get lower tier prices.

### Use cases

- **Salary benchmarking** across Australia and South-East Asia.
- **Recruitment agencies** — daily feed of new roles by keyword, with company details.
- **Job boards and aggregators** — one schema for 8 countries.
- **Sales prospecting** — companies hiring for a role (hiring = budget), with website and size.
- **Labour-market research** — demand by category, location and work type.

### Use it from code (API)

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("om_kh/seek-jobstreet-jobs-scraper").call(run_input={
    "searchTerms": ["nurse"],
    "countries": ["AU", "NZ"],
    "postedWithinDays": 3,
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(job["country"], job["title"], job["company"], job["salaryMin"], job["salaryMax"])
```

**cURL**

```bash
curl -X POST "https://api.apify.com/v2/acts/om_kh~seek-jobstreet-jobs-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["accountant"], "countries": ["MY", "SG"], "maxJobs": 100}'
```

### Integrations: n8n, Make, Zapier, Google Sheets

Schedule the Actor daily with **Only new jobs** on, and send new rows to Google Sheets,
Airtable, Slack or your ATS with the Apify app in n8n, Make or Zapier.

### Use it from an AI agent (MCP)

Connect Claude, Cursor or any MCP client to `https://mcp.apify.com` and add
`om_kh/seek-jobstreet-jobs-scraper` as a tool: "list data analyst jobs posted this week in
Singapore with a salary above 6,000".

### Tips and limits

- The first results of a search can be **featured (promoted) ads**; `isFeatured` tells you which.
- Salaries are only present when the employer publishes them; Asian boards publish them more often.
- `totalMatches` is the site's own count for your search, useful for demand tracking.

### FAQ

**Which sites are covered?**
seek.com.au, seek.co.nz, my / sg / id / ph.jobstreet.com, hk.jobsdb.com and th.jobsdb.com.

**Do I need an account or API key?**
No.

**Can I get only new jobs every day?**
Yes: turn on `monitorEnabled` and schedule the Actor. The first monitored run stores a free baseline.

**Is it legal?**
It reads public job ads that any visitor can see. Use contact details found in ads only as
the law that applies to you allows.

### Related Actors

- [ATS Jobs API - Greenhouse, Lever, Ashby, Workday Jobs](https://apify.com/om_kh/ats-jobs-api) — jobs straight from company career boards.
- [Indeed Jobs Scraper - Listings, Companies, Salary Data](https://apify.com/om_kh/indeed-jobs-scraper) — Indeed postings.
- [Hiring Signals API - Companies Hiring Now by Role](https://apify.com/om_kh/company-hiring-signals) — which companies are hiring for a role.

# Actor input Schema

## `searchTerms` (type: `array`):

Job keywords, one per line (up to 20), e.g. 'data analyst', 'nurse'. Leave empty for all jobs.

## `countries` (type: `array`):

AU = SEEK Australia, NZ = SEEK New Zealand, MY/SG/ID/PH = JobStreet, HK/TH = JobsDB.

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

Optional city or region as typed on the site, e.g. 'Sydney NSW', 'Melbourne', 'Kuala Lumpur'.

## `maxJobs` (type: `integer`):

1 to 5,000. Default 100.

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

Optional: only jobs listed in the last N days (e.g. 1, 3, 7, 14, 31).

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

Optional: full time, part time, contract/temp or casual. Default any.

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

Newest first (default) or most relevant.

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

Adds the full description (text and HTML), salary with currency, expiry date, verified advertiser, company size/industry/website/rating, and emails or phones printed in the ad. +$0.001 per job.

## `monitorEnabled` (type: `boolean`):

Schedule the Actor and get only jobs not seen in previous runs. The first monitored run stores a free baseline.

## `monitorId` (type: `string`):

Optional name to keep separate monitoring baselines.

## `maxTotalChargeUsd` (type: `number`):

Optional hard cost cap for this run.

## Actor input object example

```json
{
  "searchTerms": [
    "data analyst"
  ],
  "countries": [
    "AU",
    "SG"
  ],
  "maxJobs": 50,
  "workType": "any",
  "sortBy": "newest",
  "includeDetails": false,
  "monitorEnabled": false
}
```

# Actor output Schema

## `report` (type: `string`):

A visual summary of delivery, charges, and source issues.

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

Jobs in a sortable table. No JSON knowledge required.

## `csv` (type: `string`):

Results ready for spreadsheets, CRMs, and analytics tools.

## `excel` (type: `string`):

Results as an Excel workbook for non-technical teams.

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

Machine-readable delivery, billing, and source diagnostics.

# 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 = {
    "searchTerms": [
        "data analyst"
    ],
    "countries": [
        "AU",
        "SG"
    ],
    "maxJobs": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("om_kh/seek-jobstreet-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 = {
    "searchTerms": ["data analyst"],
    "countries": [
        "AU",
        "SG",
    ],
    "maxJobs": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("om_kh/seek-jobstreet-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 '{
  "searchTerms": [
    "data analyst"
  ],
  "countries": [
    "AU",
    "SG"
  ],
  "maxJobs": 50
}' |
apify call om_kh/seek-jobstreet-jobs-scraper --silent --output-dataset

```

## MCP server setup

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