# SEEK Australia Jobs Scraper (`scraptivo/seek-au-jobs-scraper`) Actor

Collect SEEK Australia job listings by keyword, location, or URL. Optionally add full job details, company profiles, and company reviews.

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

## Pricing

from $0.97 / 1,000 job scrapeds

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?

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 Australia Jobs Scraper** collects job listings from [SEEK Australia](https://www.seek.com.au) and turns them into structured data for hiring research, salary benchmarking, and competitor monitoring. Provide a job title or keyword with an Australian location, or paste SEEK search, job, or company URLs, then export title, advertiser, location, work type, salary, and listing date to JSON, CSV, or Excel. Use it to build job databases, track hiring, and schedule recurring collection. Pricing starts at **$1.00 per 1,000 jobs**, with optional job details, company profiles, and company reviews at the same rate.

### What can you automate with SEEK Australia Jobs Scraper?

- **Build targeted job databases** — Search titles such as "python developer" in Sydney or nationwide, then export advertiser, salary, work type, and workplace on every row.
- **Benchmark pay and work type** — Compare SEEK salary labels and annual / monthly / hourly bands by role and city.
- **Monitor competitor hiring** — Filter by listed time, classification, and workplace arrangement to see who is hiring this week.
- **Collect one employer's live jobs** — Paste a SEEK company profile URL and pull that company's openings up to your job cap.
- **Attach company context** — Optionally nest company about-page fields and employee reviews on each job row.
- **Schedule recurring collection** — Run daily or weekly and push new listings into Sheets, a CRM, or an alert workflow.

### Who is this scraper for?

| Team | Workflow |
|---|---|
| Recruitment and staffing agencies | Build city-and-title pipelines of Australian openings and watch which employers are hiring. |
| Compensation and HR analytics teams | Compare SEEK salary bands, work types, and remote / hybrid / on-site mix. |
| Talent-intelligence researchers | Combine live jobs with company size, industry, and reviews when enrichment is on. |
| Sales and lead-generation teams | Spot companies hiring for a skill, then enrich those accounts downstream. |

### What data can you collect from SEEK?

| Data group | Example fields | How it helps |
|---|---|---|
| Job identity | `jobId`, `title`, `url`, `listedAt`, `listedAtLabel` | Identify each listing and deduplicate across runs with `jobId`. |
| Employer | `advertiserName`, `organisationName`, `companyId` | See who is hiring on SEEK. |
| Role terms | `location`, `workTypes`, `workArrangements`, `classifications`, `salaryLabel` | Filter by city, full-time / casual, workplace, and pay. |
| Job details | `descriptionHtml`, `abstract` | Read the full description when **Scrape Job Details** is enabled (on by default). |
| Company overview | `company` | Qualify employer scale when **Scrape Company Details** is enabled. |
| Employee reviews | `reviews` | Read sentiment on the same job row when **Scrape Company Reviews** is enabled. |

Listing-card fields are always collected. Full description appears when **Scrape Job Details** is on. Company and review fields are charged separately and nested on the job row — they are not separate dataset items unless you start from a company URL. Salary fields are empty when SEEK does not publish them.

### How to use SEEK Australia Jobs Scraper

1. Open the [SEEK Australia Jobs Scraper](https://apify.com/scraptivo/seek-au-jobs-scraper) on Apify.
2. Enter a search query such as "python developer" and an optional location such as "Sydney NSW 2000", or paste SEEK search / job / company URLs.
3. Set **Max Jobs** (Console prefill is 20; `0` means unlimited) and any work-type, classification, or salary filters.
4. Run the Actor — it writes one dataset row per job (or a company record when you start from a company URL).
5. Export the dataset or connect it to your workflow.

```json
{
    "searchQueries": ["python developer"],
    "location": "Sydney NSW 2000",
    "maxItems": 20,
    "scrapeJobDetails": true,
    "scrapeCompanyDetails": false,
    "scrapeCompanyReviews": false,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

### Example workflow

#### Build a weekly list of Python developer jobs in Sydney

1. Schedule a Monday run with `searchQueries` = `["python developer"]`, `location` = `"Sydney NSW 2000"`, `listedAt` = `"7d"`, and `workTypes` = `["full-time"]`.
2. Keep rows that match your salary band and workplace needs using `salaryLabel` and `workArrangements`.
3. On shortlisted company profiles, enable **Scrape Company Details** and **Scrape Company Reviews** when you need size, industry, and employee sentiment.
4. Send new records to Google Sheets or a CRM through a webhook after each run.
5. Deduplicate user-side against the stable `jobId` field.

The Actor does not filter or merge results across runs — those steps happen in your pipeline.

### Automate and integrate your results

- **Schedules** — Run **daily** with `listedAt` = `"today"` for new-job alerts, or **weekly** with `"7d"` for market snapshots. Create a separate scheduled task per query and city.
- **Webhooks** — Push completed runs into Google Sheets, Make, Zapier, Slack, a CRM, or an ATS.
- **Exports and API** — Download JSON, CSV, Excel, or HTML from the Apify Console, or start a run from the API:

```shell
curl -X POST "https://api.apify.com/v2/acts/scraptivo~seek-au-jobs-scraper/runs?token=YOUR-APIFY-TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "searchQueries": ["python developer"],
    "location": "Sydney NSW 2000",
    "maxItems": 20,
    "scrapeJobDetails": true
  }'
```

Deduplicate user-side with `jobId`.

### Input reference

| Field | Type | Required | Default | What it controls |
|---|---|---:|---|---|
| `searchQueries` | array | No | `[]` | Job keywords, e.g. `python developer`. Leave empty and set Location to list all jobs in that place. |
| `location` | string | No | — | SEEK location label, e.g. `Sydney NSW 2000`. Empty searches all of Australia. |
| `startUrls` | array | No | `[]` | SEEK search, job, or company profile URLs. |
| `workTypes` | array | No | `[]` | `full-time`, `part-time`, `contract`, `casual`. |
| `workArrangements` | array | No | `[]` | `on-site`, `hybrid`, `remote`. |
| `classifications` | array | No | `[]` | SEEK job classifications such as `information-communication` or `healthcare`. |
| `salaryType` | string | No | `""` | `annual`, `monthly`, or `hourly` when using salary min/max. |
| `salaryMin` | integer | No | — | Minimum salary in AUD for the selected salary type. |
| `salaryMax` | integer | No | — | Maximum salary in AUD for the selected salary type. |
| `listedAt` | string | No | `""` | `today`, `3d`, `7d`, `14d`, or `30d`. |
| `scrapeJobDetails` | boolean | No | `true` | Add full description (`job-details` event). |
| `scrapeCompanyDetails` | boolean | No | `false` | Add company about fields once per company (`company-details` event). |
| `scrapeCompanyReviews` | boolean | No | `false` | Nest reviews on the job/company record (`company-reviews` event per review). |
| `maxReviewsPerCompany` | integer | No | `0` | Cap reviews per company; `0` means all. |
| `detailConcurrency` | integer | No | `8` | Parallel detail requests (1–20). |
| `maxItems` | integer | No | `0` | Cap on job records; Console prefill is 20. |
| `proxyConfiguration` | object | No | Residential | Apify proxy settings. |

Provide at least one `searchQueries` keyword, a `location`, or SEEK `startUrls`.

### Output example

```json
{
    "recordType": "job",
    "jobId": "94231469",
    "sourceQuery": "python developer",
    "title": "Software Developer",
    "url": "https://au.seek.com/job/94231469",
    "abstract": "Full stack developer, Python and React on AWS. Small flat team, AI use, and real ownership.",
    "advertiserName": "Life Insurance Partners Pty Ltd",
    "organisationName": "Life Insurance Partners Pty Ltd",
    "location": "Surry Hills, Sydney NSW",
    "workTypes": ["Full time"],
    "workArrangements": ["On-site"],
    "salaryLabel": "$80,000 – $110,000 per year",
    "salaryMin": 80000,
    "salaryMax": 110000,
    "salaryCurrency": "AUD",
    "listedAt": "2026-08-27T03:01:12.000Z",
    "listedAtLabel": "2d ago",
    "isExpired": false,
    "isVerified": true
}
```

### How much does it cost to scrape SEEK?

Billing is pay-per-event. A one-time **Actor Start** fee of **$0.00005** applies per run.

| Event | When it is charged | Price |
|---|---|---|
| `job` (Job scraped) | Each job row | **$1.00 per 1,000** |
| `job-details` | Each job enriched with **Scrape Job Details** | **$1.00 per 1,000** |
| `company-details` | Each unique company profile | **$1.00 per 1,000** |
| `company-reviews` | Each review | **$1.00 per 1,000** |

A 1,000-job run with details on (the default) costs about **$2.00** plus Actor Start. Adding company profiles for 200 unique employers adds about **$0.20**. Apify plan discounts may reduce these prices. Platform compute and proxy usage are billed separately on your Apify plan.

### Reliability and responsible use

- **Proxy** — Residential proxies are recommended for SEEK and are the default setting.
- **Conditional fields** — Full description, company about fields, and reviews appear only when their toggles are on.
- **Public data** — The Actor collects publicly visible job, company, and review information from SEEK Australia.
- **Responsible use** — Only use the data in ways that comply with SEEK's terms of service and applicable law.

### Frequently asked questions

#### Can I scrape SEEK jobs by keyword and city?

Yes. Add titles in `searchQueries` and an Australian location such as `Sydney NSW 2000`. Leave `location` empty for a nationwide search. You can also paste SEEK search, job, or company URLs in `startUrls`.

#### Can I schedule SEEK Australia Jobs Scraper to run automatically?

Yes. Open the **Scheduler** tab in Apify Console and set a recurring cadence — daily with `listedAt` = `"today"` for new listings, weekly with `"7d"` for a market sweep. Create separate schedules per query and city.

#### What counts as one result?

A job row is one `job` event at **$1.00 per 1,000 jobs**. **Scrape Job Details** adds a `job-details` event per enriched job. **Scrape Company Details** adds a `company-details` event once per unique company. **Scrape Company Reviews** adds a `company-reviews` event per review. Reviews nest on the job row — they are not separate dataset items.

#### Why are some fields empty?

Full description appears only when **Scrape Job Details** is on. Company size, industry, and website appear when **Scrape Company Details** is on. The `reviews` array appears when **Scrape Company Reviews** is on. SEEK also omits salary on many listings.

#### How do I avoid duplicate records?

Within one run, listings are deduplicated by `jobId`. Across runs the Actor appends results and does not merge them. When you combine datasets, keep the first row for each `jobId`. Setting `maxItems` caps any single run.

#### Do I need a proxy?

The Actor works with the default Apify residential proxy. If a run returns unusually few jobs or keeps timing out, confirm that `proxyConfiguration` uses the RESIDENTIAL group before raising `detailConcurrency`.

#### Can I collect one company's jobs and reviews?

Yes. Add a SEEK company URL such as `https://au.seek.com/companies/coles-group-433124` to `startUrls`. The Actor collects live jobs up to `maxItems` and, when the toggles are on, attaches overview fields and up to `maxReviewsPerCompany` reviews onto those records.

### Related Scraptivo automations

- [LinkedIn Job Scraper](https://apify.com/scraptivo/linkedin-job-scraper) — collect LinkedIn postings for global hiring research alongside SEEK.
- [Glassdoor Jobs Scraper](https://apify.com/scraptivo/glassdoor-jobs-scraper) — add Glassdoor listings, ratings, and salaries to the same recruiting dataset.
- [ZipRecruiter Scraper](https://apify.com/scraptivo/ziprecruiter-scraper) — pull US job boards when you need coverage beyond Australia.
- [Upwork Jobs Scraper](https://apify.com/scraptivo/upwork-jobs-scraper) — monitor freelance openings that complement full-time SEEK roles.
- [StepStone Jobs Scraper](https://apify.com/scraptivo/stepstone-jobs-scraper) — cover DACH and Benelux job markets with the same workflow.

### Support and custom workflows

Need a different field, source, or delivery workflow? Contact Scraptivo at scraptivo@gmail.com. Include the Actor name, sample URL, required fields, and expected volume so we can assess the request.

# Actor input Schema

## `searchQueries` (type: `array`):

Job keywords to search on SEEK Australia (e.g. "python developer", "registered nurse"). Leave empty and set Location to list all jobs in that place.

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

Optional SEEK location label (e.g. "Sydney NSW 2000", "Melbourne VIC"). Leave empty to search all of Australia.

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

Optional SEEK URLs: search result pages, job pages (e.g. https://au.seek.com/job/93791035), or company profiles (e.g. https://au.seek.com/companies/coles-group-433124).

## `workTypes` (type: `array`):

Filter by SEEK work type. Leave empty for any type.

## `workArrangements` (type: `array`):

Filter by workplace arrangement. Leave empty for any.

## `classifications` (type: `array`):

SEEK job classifications (same list as the website filter).

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

How to interpret Salary Min / Max (SEEK pay filter). Pair with a min and/or max to apply the filter.

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

Minimum salary in AUD for the selected salary type (e.g. 80000 for annual).

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

Maximum salary in AUD for the selected salary type (e.g. 150000 for annual).

## `listedAt` (type: `string`):

Only include jobs listed in this window.

## `scrapeJobDetails` (type: `boolean`):

Fetch the full job description and extra fields. Charged as the job-details event.

## `scrapeCompanyDetails` (type: `boolean`):

Fetch the company about/profile (once per company). Charged as the company-details event.

## `scrapeCompanyReviews` (type: `boolean`):

Fetch company reviews and nest them on the job/company record (reviews column). Charged per review (company-reviews event).

## `maxReviewsPerCompany` (type: `integer`):

Maximum reviews to scrape per company (0 = all reviews).

## `detailConcurrency` (type: `integer`):

Max parallel job-details / company / review-page requests. Each request can rotate to a fresh residential proxy.

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

Maximum number of job records to scrape (0 = unlimited). Company details and reviews are nested on those records.

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

Proxy settings. Residential proxies are recommended for SEEK.

## Actor input object example

```json
{
  "searchQueries": [
    "python developer"
  ],
  "location": "Sydney NSW 2000",
  "startUrls": [],
  "workTypes": [],
  "workArrangements": [],
  "classifications": [],
  "salaryType": "",
  "listedAt": "",
  "scrapeJobDetails": true,
  "scrapeCompanyDetails": false,
  "scrapeCompanyReviews": false,
  "maxReviewsPerCompany": 0,
  "detailConcurrency": 8,
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Dataset of SEEK jobs (and optional company start-URL rows) with nested company and reviews fields

## `runStats` (type: `string`):

Aggregate scrape statistics 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 = {
    "searchQueries": [
        "python developer"
    ],
    "location": "Sydney NSW 2000",
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraptivo/seek-au-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 = {
    "searchQueries": ["python developer"],
    "location": "Sydney NSW 2000",
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scraptivo/seek-au-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 '{
  "searchQueries": [
    "python developer"
  ],
  "location": "Sydney NSW 2000",
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call scraptivo/seek-au-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scraptivo/seek-au-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/1XBlH0jSK0yCKDIBD/builds/OR9kSGo8JMPmaEAtK/openapi.json
