# SEEK Jobs Scraper: Australia and New Zealand Jobs (`pulsedata/seek-jobs-scraper`) Actor

Scrape job listings from SEEK Australia and New Zealand by keyword, location, classification and work type. Returns salary, full description, applicant count, screening questions, contact details and company rating.

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

## Pricing

$2.00 / 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.

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 Jobs Scraper

Scrape job listings from SEEK Australia (seek.com.au) and SEEK New Zealand (seek.co.nz). Search by keyword, location, classification, work type, work arrangement and listing date, or paste a SEEK search URL. Each job comes back as one structured record with title, company, salary, location, classification and listing date. With details on (the default), you also get the full description, the applicant count, the employer's screening questions, contact email and phone found in the ad, the expiry date and the company profile (industry, size, website, rating and review count).

The actor reads the same JSON that the SEEK website loads in your browser. It runs over plain HTTP with the Apify datacenter proxy, so there is no browser, no login and no SEEK account involved.

### What you can do with it

- Scrape SEEK jobs by keyword, for example `registered nurse`, `data analyst` or `electrician`.
- Export all jobs in a city or region, for example `Sydney NSW`, `Melbourne VIC 3000`, `Perth WA` or `Auckland`.
- Scrape SEEK New Zealand jobs as well as SEEK Australia jobs.
- Filter SEEK jobs by classification (Healthcare & Medical, Information & Communication Technology, Mining, Resources & Energy and the other 27 SEEK classifications).
- Filter by work type: full time, part time, contract or casual.
- Find remote and hybrid jobs on SEEK with the work arrangement filter.
- Get only new jobs: listed today, or in the last 3, 7, 14 or 31 days.
- Paste any SEEK search URL and scrape it with all of its filters.
- Get the SEEK applicant count for each job, so you can see how competitive a role is.
- Export SEEK screening questions that employers ask applicants.
- Pull contact emails and phone numbers that recruiters put in the ad text.
- Get company ratings, review counts, industry and size from SEEK company profiles.
- Download the results as JSON, CSV, Excel or through the Apify API.

### Use cases

- **Recruitment agencies** watch new roles in their sector each morning and reach out to the hiring companies, using the advertiser name, contact details and company profile.
- **Job market research** on salary ranges, work types and remote share per classification or city across Australia and New Zealand.
- **Job boards and aggregators** import fresh SEEK listings into their own search, filtered to a niche such as nursing, mining or IT.
- **Sales teams** treat a company that is hiring for a role as a lead. A business posting ten sales roles in Brisbane is growing.
- **Job seekers and career coaches** track one search over time and see the applicant volume before applying.

### How it works

1. For each line in "Search keywords or SEEK URLs", the actor runs a SEEK search with your country, location and filters. SEEK URLs keep their own site, keywords and filters.
2. It pages through results 100 jobs at a time and removes duplicates. Promoted ads repeat across pages, and the actor drops the repeats.
3. SEEK returns at most about 550 jobs for one search. When a search has more and you asked for more than 550, the actor splits it by classification, then work type, then work arrangement, and collects each slice. A very broad search (every job in Australia) can still leave some jobs out.
4. With "Include full details" on, it fetches the job detail for each listing, 8 at a time, and adds the description, applicant data, screening questions, contacts and company profile.
5. It stops at "Max jobs per search", at the run's maximum cost, or shortly before the run timeout, and says which one in the status message.

### Input

| Field | What it does |
|---|---|
| Search keywords or SEEK URLs | Required. One search per line. Keywords such as `nurse`, or a URL such as `https://www.seek.com.au/nurse-jobs/in-Sydney-NSW`. |
| Country | `AU` or `NZ` for keyword searches. Country names such as `New Zealand` also work. Default `AU`. |
| Location | Where to search, as you would type it on SEEK. Empty means the whole country. |
| Classifications | Only jobs in these SEEK classifications. The start of a name is enough, for example `Healthcare` or `Information`. |
| Work types | `full-time`, `part-time`, `contract`, `casual`. |
| Work arrangement | `on-site`, `hybrid`, `remote`. |
| Listed within (days) | `1`, `3`, `7`, `14` or `31`. `any` means no limit. Other numbers round up to the next of these. |
| Sort by | Relevance or newest first. |
| Include full details | On by default. One extra request per job, same price. |
| Max jobs per search | 0 means all. |
| Proxy | Apify datacenter proxy by default. |

Unknown filter values do not stop the run. The actor logs a warning that lists the valid values and carries on without that filter.

Example input, full time registered nurse jobs in Melbourne listed in the last 7 days:

```json
{
  "searchQueries": ["registered nurse"],
  "country": "AU",
  "location": "Melbourne VIC",
  "workTypes": ["full-time"],
  "postedWithinDays": "7",
  "sortBy": "date",
  "maxResults": 200
}
```

Example input with SEEK URLs, mixing Australia and New Zealand in one run:

```json
{
  "searchQueries": [
    "https://www.seek.com.au/data-analyst-jobs/in-Sydney-NSW",
    "https://www.seek.co.nz/software-developer-jobs/in-Auckland"
  ],
  "workArrangements": ["hybrid", "remote"],
  "maxResults": 100
}
```

### Output

One record per job. A real record from a test run (nurse jobs in New Zealand), shortened:

```json
{
  "id": "94977685",
  "url": "https://www.seek.co.nz/job/94977685",
  "title": "Registered Nurse",
  "company": "The Rutherford Clinic",
  "advertiserId": "61574968",
  "location": "Wellington Central, Wellington",
  "locationDetail": [
    "Wellington CBD Wellington",
    "All Wellington"
  ],
  "country": "NZ",
  "salary": "$53 – $54 per hour",
  "workTypes": [
    "Part time"
  ],
  "workArrangement": "On-site",
  "classification": "Healthcare & Medical",
  "subClassification": "Nursing - General Medical & Surgical",
  "listedAt": "2026-09-30T09:10:07Z",
  "teaser": "Join a supportive, high-performing Endoscopy team. Full training provided for the right nurse. Build specialist skills while making a real difference.",
  "bulletPoints": [
    "Flexibility That Works for You - Enjoy flexible working arrangements.",
    "Christmas & Public Holidays Off"
  ],
  "isFeatured": true,
  "searchQuery": "nurse",
  "description": "About the role\nAs a member of the Endoscopy team, you'll work alongside experienced gastroenterologists, nurses, and hea ...",
  "expiresAt": "2026-10-30T12:59:59.999Z",
  "appliesOnSeek": true,
  "isVerified": true,
  "emails": [],
  "phones": [],
  "applicantCount": 25,
  "applicantVolume": "Medium application volume",
  "screeningQuestions": [
    "Which of the following statements best describes your right to work in New Zealand?",
    "What's your expected annual base salary?",
    "How many years' experience do you have as a registered nurse?"
  ],
  "companyIndustry": null,
  "companySize": null,
  "companyWebsite": null,
  "companyRating": null,
  "companyReviewCount": null
}
```

Fields from the search: `id`, `url`, `title`, `company`, `advertiserId`, `companyProfileUrl`, `location`, `locationDetail`, `country`, `salary`, `workTypes`, `workArrangement`, `classification`, `subClassification` and their IDs, `listedAt`, `teaser`, `bulletPoints`, `isFeatured`, `logoUrl`, `searchQuery`.

Fields added with details: `description` (plain text), `descriptionHtml`, `status`, `isExpired`, `expiresAt`, `appliesOnSeek`, `isVerified`, `emails`, `phones`, `applicantCount`, `applicantVolume`, `screeningQuestions`, `companyIndustry`, `companySize`, `companyWebsite`, `companyRating`, `companyReviewCount`.

Some fields are empty for good reasons. `salary` is empty when the employer did not publish a salary. Applicant count and screening questions exist only for jobs that take applications on SEEK; jobs that send you to the employer's own site return them empty. Company profile fields are empty when the employer has no SEEK company page. `emails` and `phones` only contain what the employer wrote into the ad.

### Price

$2.00 per 1,000 jobs ($0.002 per job), details included. There is no start fee. You pay Apify platform usage on top, which for this actor is small: it runs at 1024 MB, needs no browser, and a test run of 700 jobs without details used about half a cent of compute.

You can cap the cost of a run with "Maximum cost per run" in the run options. The actor stops cleanly before it goes over and tells you how many jobs it collected.

### Example pages

Each of these opens a ready-made run with a real input:

- [Scrape registered nurse jobs in Australia from SEEK](https://apify.com/pulsedata/seek-jobs-scraper/examples/seek-registered-nurse-jobs-australia)
- [Get nurse jobs in New Zealand from SEEK NZ](https://apify.com/pulsedata/seek-jobs-scraper/examples/seek-nurse-jobs-new-zealand)
- [Scrape software developer jobs in Auckland](https://apify.com/pulsedata/seek-jobs-scraper/examples/seek-software-developer-jobs-auckland)
- [Find remote jobs in Australia on SEEK](https://apify.com/pulsedata/seek-jobs-scraper/examples/seek-remote-jobs-australia)
- [Get new jobs in Sydney from the last 7 days](https://apify.com/pulsedata/seek-jobs-scraper/examples/seek-new-jobs-sydney-last-7-days)
- [Export IT jobs posted on SEEK this week](https://apify.com/pulsedata/seek-jobs-scraper/examples/seek-it-jobs-last-7-days)
- [Scrape data analyst jobs in Melbourne](https://apify.com/pulsedata/seek-jobs-scraper/examples/seek-data-analyst-jobs-melbourne)
- [Find FIFO mining jobs in Western Australia](https://apify.com/pulsedata/seek-jobs-scraper/examples/seek-fifo-mining-jobs-western-australia)
- [Get casual jobs in Brisbane from SEEK](https://apify.com/pulsedata/seek-jobs-scraper/examples/seek-casual-jobs-brisbane)
- [See how many people applied to accountant jobs on SEEK](https://apify.com/pulsedata/seek-jobs-scraper/examples/seek-accountant-jobs-applicant-count)

### FAQ

**Does it need a SEEK account?**
No. It reads the same public data a logged-out visitor sees.

**Why did I get fewer jobs than SEEK shows?**
SEEK serves about 550 results per search. Set "Max jobs per search" above 550 or leave it at 0 and the actor splits the search to get more. Very broad searches can still leave some jobs out, so narrow by location or classification if you need everything.

**Can I scrape SEEK New Zealand?**
Yes. Set Country to `NZ`, or paste a seek.co.nz URL. One run can mix both countries when you use URLs.

**Can I get only new jobs every day?**
Set "Listed within" to `1` and "Sort by" to newest first, then schedule the actor daily in Apify. Each run returns the jobs listed in the last 24 hours.

**Does it return the salary?**
It returns the salary text exactly as SEEK shows it, for example `$53 – $54 per hour`. Many ads have no salary, and then the field is empty. The actor does not estimate salaries.

**How accurate is the applicant count?**
It is the number SEEK shows on the job page at the time of the run. SEEK does not show it for every job, and not for jobs that link out to the employer's site.

**Can I get jobs from other countries?**
SEEK runs Australia and New Zealand. For company career pages elsewhere, see the sister actors below.

### Related job scrapers from PulseData

- [Greenhouse Jobs Scraper](https://apify.com/pulsedata/greenhouse-jobs-scraper) for every job on a company's Greenhouse board.
- [Lever Jobs Scraper](https://apify.com/pulsedata/lever-jobs-scraper) for Lever job boards.
- [Ashby Jobs Scraper](https://apify.com/pulsedata/ashby-jobs-scraper) for Ashby job boards.
- [Workday Jobs Scraper](https://apify.com/pulsedata/workday-jobs-scraper) for large employers on Workday.
- [Career Page Jobs Scraper](https://apify.com/pulsedata/career-page-jobs-scraper) for company careers pages on Workable, SmartRecruiters, Personio, Teamtailor and eight other systems.

Questions or a missing field? Open an issue on the Issues tab and we will look at it.

# Actor input Schema

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

One search per line. Use job keywords like `nurse` or `data analyst`, or paste a SEEK search URL such as `https://www.seek.com.au/nurse-jobs/in-Sydney-NSW` (its filters are used as they are).

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

`AU` (seek.com.au) or `NZ` (seek.co.nz) for keyword searches. Country names work too. SEEK URLs use their own site.

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

Where to search, as you would type it on SEEK, for example `Sydney NSW`, `Melbourne VIC 3000` or `Auckland`. Empty searches the whole country.

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

Only jobs in these SEEK classifications, one per line. Empty means all. Values: Accounting, Administration & Office Support, Advertising, Arts & Media, Banking & Financial Services, Call Centre & Customer Service, CEO & General Management, Community Services & Development, Construction, Consulting & Strategy, Design & Architecture, Education & Training, Engineering, Farming, Animals & Conservation, Government & Defence, Healthcare & Medical, Hospitality & Tourism, Human Resources & Recruitment, Information & Communication Technology, Insurance & Superannuation, Legal, Manufacturing, Transport & Logistics, Marketing & Communications, Mining, Resources & Energy, Real Estate & Property, Retail & Consumer Products, Sales, Science & Technology, Self Employment, Sport & Recreation, Trades & Services. The start of a name is enough, for example `Healthcare` or `Information`.

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

Only these work types: `full-time`, `part-time`, `contract`, `casual`. Empty means all.

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

Only these arrangements: `on-site`, `hybrid`, `remote`. Empty means all.

## `postedWithinDays` (type: `string`):

Only jobs listed in the last `1`, `3`, `7`, `14` or `31` days. `any` means no limit. Other numbers round up to the next of these.

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

Order of the results, as on SEEK.

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

Add the full description, applicant count, screening questions, contact email and phone, expiry date and the company profile (industry, size, rating). One extra request per job, same price.

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

Stop each search after this many jobs. 0 means all. SEEK shows at most about 550 jobs per search; above that the actor splits the search by classification, work type and work arrangement to get the rest.

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

Apify datacenter proxy works for SEEK. Switch to residential only if you see blocks.

## Actor input object example

```json
{
  "searchQueries": [
    "nurse",
    "data analyst"
  ],
  "country": "AU",
  "location": "",
  "classifications": [],
  "workTypes": [],
  "workArrangements": [],
  "postedWithinDays": "any",
  "sortBy": "relevance",
  "includeDetails": true,
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Jobs stored in the default dataset (JSON/CSV/Excel via the dataset API).

# 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": [
        "nurse",
        "data analyst"
    ],
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("pulsedata/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 = {
    "searchQueries": [
        "nurse",
        "data analyst",
    ],
    "maxResults": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("pulsedata/seek-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": [
    "nurse",
    "data analyst"
  ],
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call pulsedata/seek-jobs-scraper --silent --output-dataset

```

## MCP server setup

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