# SEEK Australia Jobs Scraper - Salary & Job Details (`parseforge/seek-scraper`) Actor

Scrapes SEEK Australia job listings by keyword, location, or direct URL. Returns title, company, salary, location, and optional full job description.

- **URL**: https://apify.com/parseforge/seek-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Jobs, Lead generation
- **Features:** Limited permissions
- **Stats:** 226 total users, 9 monthly users, 100.0% runs succeeded, 4 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 result items

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

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)](https://apify.com/parseforge?fpr=vmoqkp)

### SEEK Australia Jobs Scraper

**Scrape SEEK Australia job listings by keyword, location, or direct URL, up to a million per run.** Every job comes with its title, company, salary, location, and full description when you need it. No login or API key. Export to CSV, JSON, Excel, or XML.

**Low minimum charge:** $0.01 to start a run, then you only pay for the results you get.

SEEK's official API is not open to the public, and manual browsing is slow. This reads the public job search pages directly, filtered by classification, work type, salary, or date posted, and returns each match in one fixed schema. It works for any keyword, any location in Australia, and any SEEK search URL.

| Who uses it | What they scrape SEEK for |
|---|---|
| Recruiters | Build a fresh list of active candidates and roles in their niche |
| Market researchers | Track which skills and salaries are trending in Australian cities |
| Job boards | Populate their own site with current SEEK listings |
| Data analysts | Feed a pipeline of structured job data for dashboards |
| Sales teams | Find companies that are hiring right now for outreach |

### What it does

This Actor collects SEEK job listings by keyword, location, or direct search URL, and returns each one as a flat row with title, company, salary, location, and optional full description.

- 🔎 **Keyword search:** any job title, skill, or phrase, e.g. 'software engineer' or 'nurse'.
- 📍 **Location filter:** Sydney NSW, Melbourne VIC, All Australia, or any SEEK location.
- 🔗 **Direct URL:** paste any SEEK search URL and scrape exactly those results.
- 📊 **Computed filters:** classification, sub-classification, work type, date posted, and salary range.
- 📄 **Full details:** optionally fetch the complete job description, screening questions, and contact info.
- ⚙️ **Rate control:** set concurrency and request delay to stay polite and avoid blocks.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with SEEK data

**📈 Track salary trends.**

A market researcher runs the scraper weekly for 'data scientist' in Sydney and Melbourne, then charts the salary ranges to advise clients on pay benchmarks.

**🎯 Build a lead list.**

A B2B sales team scrapes 'project manager' jobs in Brisbane, filters for companies with active roles, and uses the company names for targeted outreach.

**🧲 Power a niche job board.**

A developer runs the scraper daily for 'nurse' jobs across Australia and feeds the structured data into their own healthcare job board.

**📊 Monitor competitor hiring.**

An HR analyst scrapes jobs from a list of competitor companies by using their names as keywords, then tracks hiring volume over time.

**🤖 Feed a job alert system.**

A startup uses the scraper to collect new 'UX designer' roles every hour, then sends email alerts to their subscribers.

### Why choose this scraper

|  | What you get |
|---|---|
| **No API key** | Scrapes the public SEEK search pages directly |
| **Up to 1M jobs** | One run can collect every listing you need |
| **Full job text** | Optional deep scrape of each job page |
| **Structured output** | Flat rows ready for CSV, JSON, Excel, or XML |

### How it compares

This actor focuses on SEEK Australia with deep filtering and optional full job details, while the other SEEK scraper offers a simpler extraction and the Xing scraper targets a different job market.

| Feature | ParseForge | Seek Job Scraper | Xing Jobs Scraper |
|---|---|---|---|
| Keyword search | Yes | Yes | Yes |
| Location filter | Yes | Not listed | Not listed |
| Salary range filter | Yes | Not listed | Not listed |
| Full job description | Yes | Not listed | Not listed |
| Direct URL input | Yes | Not listed | Not listed |
| Rate limiting controls | Yes | Not listed | Not listed |

### Configure the run

Drive the Actor from keywords, locations, and direct SEEK URLs, alone or together, and filters run as each job is read so only matches reach your dataset. The Input tab lists every parameter.

A first run with the defaults:

```json
{
  "keywords": "software engineer",
  "maxItems": 10,
  "includeDetails": false
}
```

A larger pull:

```json
{
  "keywords": "software engineer",
  "maxItems": 200,
  "includeDetails": false
}
```

### Pricing

Pay-per-result: **$0.03 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $3.00 |
| 1,000 results | $30.00 |
| 10,000 results | $300.00 |

**Optional full job details:** with `includeDetails` on, each job whose detail page comes back adds a `job-detail` event at **$0.005** ($5 per 1,000). Leave it off and you pay only the per-result price above.

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [SEEK Australia Jobs Scraper](https://apify.com/parseforge/seek-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to SEEK through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/seek-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Check your keyword and location. If you used a startUrl, make sure it is a valid SEEK search URL. Also try broadening your filters, like removing the salary range or date posted.

**Why is the scraper slow?**

If includeDetails is true, the scraper visits each job page, which takes time. You can increase maxConcurrency up to 20, but be careful not to get rate-limited.

**Why did I get blocked or rate-limited?**

SEEK may block aggressive scraping. Increase requestDelayMs to 1000 or more, and lower maxConcurrency to 5 or less. Also consider running during off-peak hours.

**Why are some fields empty?**

Not all job listings include every field, like salary or classification. If you need full details, enable includeDetails to fetch the complete job page.

**Can I scrape jobs from New Zealand SEEK?**

This scraper is built for seek.com.au. For New Zealand, use a different scraper or adjust the startUrl to a seek.co.nz search URL, but results may vary.

### FAQ

| Question | Answer |
|---|---|
| Do I need a SEEK account or API key? | No. The scraper reads the public SEEK search pages, so no login or API key is required. |
| Can I scrape a specific SEEK search URL? | Yes. Paste any SEEK search URL into the startUrl field and the scraper will collect all jobs from that exact search, ignoring other filters. |
| How do I get the full job description? | Set includeDetails to true. The scraper will visit each job page and return the full description, screening questions, and contact details. This is slower but gives you complete data. |
| What locations can I search? | Any location SEEK supports, such as 'Sydney NSW', 'Melbourne VIC', or 'All Australia'. If you leave it blank, it defaults to All Australia. |
| Can I filter by salary? | Yes. Use the salaryRange field with a min-max annual range, e.g. '50000-80000'. |
| How many jobs can I scrape in one run? | Up to 1,000,000 jobs per run. Set maxItems to the number you need. |
| What output formats are supported? | The dataset can be exported to CSV, JSON, Excel, or XML from the Apify platform. |
| Is it legal to scrape SEEK? | You should review SEEK's terms of service and comply with all applicable laws. The scraper only accesses publicly available pages and includes rate controls to be polite. |
| Can I schedule this scraper to run automatically? | Yes. Use Apify's scheduler to run it hourly, daily, or weekly, and get fresh job data automatically. |
| What if I get rate-limited? | Increase the requestDelayMs or lower maxConcurrency. The scraper is designed to be gentle, but SEEK may still block aggressive scraping. |

### Next step

Each row carries the fields that these ParseForge jobs Actors take as input:

- **Every open role at that employer, from its own ATS.** Take `companyName`, find the company's careers page (Workday, Greenhouse, Lever, iCIMS, Ashby and 16 more ATS are supported) and paste it into `careerSiteUrls` of [Career Site Jobs Scraper](https://apify.com/parseforge/career-site-jobs-scraper). It returns everything the employer lists on its own site, including roles never posted on SEEK, with salary and a geocoded location.
- **The same search on Indeed.** Put `title` into `searchQuery` of [Indeed Jobs Scraper](https://apify.com/parseforge/indeed-scraper) with `country` set to `AU`. You get 44 fields per job, including the full description, salary range and employer size.
- **Company rating and salary estimate.** Put `companyName` into `companyName` of [Glassdoor Jobs Scraper](https://apify.com/parseforge/glassdoor-jobs-scraper) to get that employer's Glassdoor rating, salary estimates and its other open roles.

### Related actors

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by SEEK Limited. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

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

Job title, skills or keywords to search for (e.g. 'software engineer', 'nurse', 'project manager'). If omitted, returns all jobs.

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

Maximum number of job listings to collect per run.

## `startUrl` (type: `string`):

SEEK search URL to scrape (e.g. https://www.seek.com.au/software-engineer-jobs/in-All-Australia). If provided, Keywords and Filters below are ignored.

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

Location to search in (e.g. 'Sydney NSW', 'Melbourne VIC', 'All Australia'). Defaults to All Australia.

## `classification` (type: `string`):

Job category ID from SEEK (e.g. '6281' for Information & Communication Technology, '1200' for Accounting).

## `subClassification` (type: `string`):

Sub-category ID (e.g. '6287' for Developers/Programmers). Use together with Classification.

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

Filter by work type.

## `dateRange` (type: `string`):

Filter by how recently jobs were posted.

## `salaryRange` (type: `string`):

Filter by salary range (e.g. '50000-80000'). Provide as min-max annual.

## `sortMode` (type: `string`):

How to sort the results.

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

Fetch full job description, screening questions, and contact details for each listing. Slower but returns much more data.

## `maxConcurrency` (type: `integer`):

Maximum number of parallel requests (only applies when Include Full Job Details is enabled). Lower this if you get rate-limited.

## `requestDelayMs` (type: `integer`):

Milliseconds to wait between page requests. Increase if the site rate-limits you.

## Actor input object example

```json
{
  "keywords": "software engineer",
  "maxItems": 10,
  "sortMode": "KeywordRelevance",
  "includeDetails": false,
  "maxConcurrency": 10,
  "requestDelayMs": 0
}
```

# Actor output Schema

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

Dataset with all scraped items

# 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",
    "maxItems": 10,
    "includeDetails": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/seek-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",
    "maxItems": 10,
    "includeDetails": False,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/seek-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",
  "maxItems": 10,
  "includeDetails": false
}' |
apify call parseforge/seek-scraper --silent --output-dataset

```

## MCP server setup

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