# Seek Job Scraper (`shahidirfan/seek-job-scraper`) Actor

Scrape live job postings from Australia's #1 job board. Extract positions, salaries, companies, job descriptions & application URLs. Ideal for recruitment intelligence, competitive salary analysis, market trends & training datasets. Clean, structured, ready to analyze.

- **URL**: https://apify.com/shahidirfan/seek-job-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 61 total users, 8 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.99 / 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

## Seek Jobs Scraper

Extract job listings from Seek.com.au fast and reliably. This Seek scraper collects structured job data including titles, companies, locations, salary details, posting dates, job highlights, and full job descriptions. Perfect for recruitment research, job market intelligence, salary analysis, and lead generation.

Use it to gather fresh Seek.com.au job data at scale, export it in multiple formats, and feed it straight into your reporting, hiring, or automation workflows.

### Features

- **Direct search URL support** - Start from an existing Seek results page for the fastest setup.
- **Keyword and location search** - Collect jobs by role, city, region, or broader market.
- **Date filtering** - Narrow results to recent postings such as the last 24 hours, 7 days, or 30 days.
- **Detailed job records** - Capture company, location, salary, work type, classification, teaser text, and descriptions.
- **Full job descriptions** - Get both clean HTML and plain text for every listing when available.
- **Structured dataset output** - Export tidy records for spreadsheets, dashboards, databases, and APIs.
- **High-volume collection** - Gather a small validation sample or thousands of listings for larger analysis.

### Use Cases

#### Recruitment Research

Track active hiring demand across roles, industries, and locations. Use the dataset to understand which employers are hiring, how roles are described, and which markets are most active.

#### Job Market Intelligence

Monitor changes in job volumes, salary visibility, work types, and role classifications. This is useful for staffing firms, labor market analysts, and founders validating demand.

#### Lead Generation

Collect employer names and job URLs to build prospecting lists for recruiting services, HR tools, training offers, or B2B outreach campaigns.

#### Salary and Role Analysis

Build datasets for comparing salary labels, job categories, and role requirements across locations. This helps identify trends in compensation and role positioning.

#### Content and Trend Monitoring

Watch new job postings in niches such as remote work, data roles, healthcare, or engineering, and use recurring runs to detect market shifts over time.

***

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `url` | String | No | `https://www.seek.com.au/jobs` | Direct Seek search results URL. Recommended when you already have the exact page you want to scrape. |
| `keyword` | String | No | `"software developer"` | Job title or search phrase such as `software developer` or `marketing manager`. Leave empty for all jobs. |
| `location` | String | No | `"Sydney"` | Location filter such as `Melbourne`, `Sydney`, or `Brisbane`. Leave empty for all locations. |
| `posted_date` | String | No | `anytime` | Posting date filter. Supported values: `anytime`, `24h`, `3d`, `7d`, `14d`, `30d`. |
| `results_wanted` | Integer | No | `20` | Maximum number of jobs to collect. |
| `maxPages` | Integer | No | `5` | Safety limit for how many search result pages the actor should visit. |
| `proxyConfiguration` | Object | No | `{"useApifyProxy": false}` | Proxy settings for improved reliability on larger or repeated runs. |

***

### Output Data

Each dataset item contains:

| Field | Type | Description |
|-------|------|-------------|
| `jobId` | String | Seek job identifier when available. |
| `title` | String | Job title. |
| `company` | String | Hiring company or advertiser name. |
| `location` | String | Job location shown on Seek. |
| `salary` | String | Salary label if available in the listing. |
| `listed_iso` | String | Normalized posting date in ISO format when available. |
| `listed_raw` | String | Original posting date value from the source. |
| `url` | String | Direct URL to the job detail page. |
| `workType` | String | Work type such as full-time, part-time, or contract when available. |
| `bulletPoints` | Array | Short highlights shown in the listing. |
| `teaser` | String | Listing summary text. |
| `classification` | String | Main job category. |
| `subClassification` | String | Subcategory within the main classification. |
| `description_html` | String | Full job description in clean HTML when available. |
| `description_text` | String | Full job description as plain text when available. |
| `source` | String | Source label for the dataset item. |
| `scrapedAt` | String | Timestamp when the record was collected. |

Some fields may be empty if the original listing does not provide that information.

***

### Usage Examples

#### Scrape a Seek Search URL

Use a direct Seek results URL when you have already set filters on the site.

```json
{
    "url": "https://www.seek.com.au/data-analyst-jobs/in-Melbourne-VIC-3000",
    "results_wanted": 50
}
```

#### Search by Keyword and Location

Collect jobs by role and city without building the search URL yourself.

```json
{
    "keyword": "software engineer",
    "location": "Sydney",
    "posted_date": "7d",
    "results_wanted": 100
}
```

#### Recent Jobs at Higher Volume

Gather a larger batch of fresh job postings for monitoring or lead generation.

```json
{
    "keyword": "project manager",
    "location": "Brisbane",
    "posted_date": "24h",
    "results_wanted": 250,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
}
```

***

### Sample Output

```json
{
    "jobId": "81234567",
    "title": "Senior Data Analyst",
    "company": "Example Advisory",
    "location": "Melbourne VIC",
    "salary": "$120,000 - $140,000 + super",
    "listed_iso": "2026-03-14T01:25:00.000Z",
    "listed_raw": "2026-03-14T01:25:00Z",
    "url": "https://www.seek.com.au/job/81234567",
    "workType": "Full Time",
    "bulletPoints": [
        "Hybrid working model",
        "SQL and Power BI experience",
        "Growth-focused team"
    ],
    "teaser": "Join a high-performing analytics team supporting strategic business decisions.",
    "classification": "Information & Communication Technology",
    "subClassification": "Business/Systems Analysts",
    "description_html": "<p>We are looking for an experienced data analyst...</p>",
    "description_text": "We are looking for an experienced data analyst to join our team...",
    "source": "seek",
    "scrapedAt": "2026-03-14T08:10:12.451Z"
}
```

***

### Tips for Best Results

#### Start With a Real Seek Search URL

- Use the `url` field when you already have the exact search page you want to preserve Seek filters and reduce setup time.

#### Keep Initial Test Runs Small

- Start with `20` to `50` results to validate your search, then increase `results_wanted` once the data matches your use case.

#### Use Proxies for Larger Runs

- Residential proxies are recommended for repeated or higher-volume collection. Enable Apify Proxy in `proxyConfiguration` when reliability matters.

#### Choose Practical Search Terms

- Combine `keyword`, `location`, and `posted_date` to get targeted output, since broad terms can produce very large, mixed result sets.

#### Expect Optional Fields

- Salary, bullet points, classifications, and descriptions are not guaranteed on every listing, so handle empty values gracefully.

***

### Integrations

Connect your Seek job data with:

- **Google Sheets** - Review job data in a familiar spreadsheet workflow.
- **Airtable** - Build searchable hiring or market research databases.
- **Make** - Trigger automations when new job records arrive.
- **Zapier** - Send listings to CRMs, Slack, email, or internal tools.
- **Webhooks** - Push results into your own applications and services.
- **Apify API** - Run the actor programmatically and consume dataset output in pipelines.

#### Export Formats

- **JSON** - For APIs, applications, and custom processing.
- **CSV** - For spreadsheets and lightweight analysis.
- **Excel** - For business reporting and manual review.
- **XML** - For system integrations and legacy workflows.

***

### Frequently Asked Questions

#### Can I scrape jobs from a specific Seek search page?

Yes. Paste the full Seek results page URL into the `url` field to collect jobs from that exact search directly.

#### Do I need both `url` and `keyword`?

No. A direct `url` is usually the simplest option. You can also search with `keyword` and `location` instead, and the scraper will build the search for you.

#### How many jobs can I collect?

You can request small or large datasets using `results_wanted`. The final count depends on how many matching jobs are available on Seek for your search.

#### Does the dataset include full job descriptions?

Yes, when available. Each record can include both `description_html` (clean HTML) and `description_text` (plain text) for the full job description.

#### Will every field be filled for every job?

No. Some listings do not show salary, highlights, classifications, or full description details, so those fields may be empty for certain jobs.

#### Can I monitor new jobs every day?

Yes. This actor works well with scheduled runs, especially when combined with `posted_date` filters such as `24h` or `7d` to capture only fresh postings.

#### Which proxy setup should I use?

For better reliability, use Apify Proxy. Residential proxies are the safer choice for larger and repeated runs.

***

### Support

For issues or feature requests, use the Apify Console to review run logs and manage actor runs.

#### Resources

- [Apify Documentation](https://docs.apify.com/)
- [Apify API Reference](https://docs.apify.com/api/v2)
- [Scheduling Runs](https://docs.apify.com/platform/schedules)

***

### Legal Notice

This actor is intended for legitimate data collection, research, and automation purposes. You are responsible for complying with Seek terms of service, local laws, and all applicable data use requirements. Use data responsibly and respect rate limits.

# Actor input Schema

## `url` (type: `string`):

Direct Seek.com.au search URL (e.g., https://www.seek.com.au/developer-jobs/in-Melbourne). This is the fastest way to start. Simply copy the URL from your Seek search results.

## `keyword` (type: `string`):

Job search keyword (e.g., 'software developer', 'marketing manager'). Leave empty for all jobs.

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

Location filter (e.g., 'Melbourne', 'Sydney', 'Brisbane'). Leave empty for all locations.

## `posted_date` (type: `string`):

Filter jobs by posting date

## `results_wanted` (type: `integer`):

Maximum number of jobs to scrape. Higher numbers take longer.

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

Maximum search result pages to visit (safety limit). Each page typically has ~20 jobs.

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

Residential proxies highly recommended for reliability and to avoid blocks. Datacenter proxies may work but are more likely to be blocked.

## Actor input object example

```json
{
  "url": "https://www.seek.com.au/jobs",
  "keyword": "software developer",
  "location": "Sydney",
  "posted_date": "anytime",
  "results_wanted": 20,
  "maxPages": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "url": "https://www.seek.com.au/jobs",
    "keyword": "software developer",
    "location": "Sydney",
    "results_wanted": 20,
    "maxPages": 5,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/seek-job-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 = {
    "url": "https://www.seek.com.au/jobs",
    "keyword": "software developer",
    "location": "Sydney",
    "results_wanted": 20,
    "maxPages": 5,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/seek-job-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 '{
  "url": "https://www.seek.com.au/jobs",
  "keyword": "software developer",
  "location": "Sydney",
  "results_wanted": 20,
  "maxPages": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call shahidirfan/seek-job-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/OhoC7mlt4NqnZDzPy/builds/1i1ISyCm3YFk3jwX0/openapi.json
