# Seek.com.au Job Scraper (`automation-lab/seek-scraper`) Actor

Extract job listings from Seek.com.au — Australia and New Zealand's #1 job board. Filter by keyword, location, work type, and date. Exports to JSON, CSV, or Excel. No API key needed.

- **URL**: https://apify.com/automation-lab/seek-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Jobs
- **Stats:** 14 total users, 4 monthly users, 97.6% runs succeeded, NaN 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

### What does Seek Scraper do?

**Seek Scraper** extracts job listings from [Seek.com.au](https://www.seek.com.au) — Australia and New Zealand's #1 job board — without requiring an API key or login. Search by keyword, location, work type, and date range to collect structured job data including titles, companies, salaries, classifications, and full job descriptions.

Unlike most scraping tools that require expensive residential proxies or browser automation, this actor uses a pure HTTP approach that works reliably from datacenter IPs — keeping your costs low and runs fast. With **170,000+ active listings** and 22 results per page, it scales from a quick 10-job spot check to thousands of listings per run.

### 👥 Who is Seek Scraper for?

**HR teams and recruiters** monitoring the Australian job market:
- 🔍 Track competitor job postings in your industry
- 📊 Benchmark salary ranges for specific roles and locations
- 🏢 Monitor company hiring patterns and team growth signals

**Job market researchers and analysts**:
- 📈 Analyze demand trends for specific skills over time
- 🌏 Compare job markets across Australian cities (Sydney, Melbourne, Brisbane, Perth)
- 💡 Identify skill gaps and emerging job categories by classification

**Salary researchers and career coaches**:
- 💰 Extract salary data for specific roles and industries
- 📋 Build salary benchmarking datasets for clients
- 🎯 Research compensation by location and work type

**Recruitment agencies and talent sourcers**:
- 🔎 Monitor new job postings from specific companies
- ⚡ Get alerted to high-volume hiring activity in target sectors
- 📅 Track how long specific types of roles stay open

### ✅ Why use Seek Scraper?

- **Pure HTTP — no Playwright, no browser overhead** — 5-10x faster than browser-based scrapers and no expensive residential proxy needed
- **Datacenter IPs work fine** — Seek.com.au returns full HTML from standard IPs with the right headers
- **22 results per page** with clean `?page=N` pagination — predictable, reliable scraping
- **20% cheaper than the leading competitor** ($0.002 vs $0.0025 per result)
- **Tiered pricing** — Scale and Business users get automatic volume discounts
- **Optional deep detail mode** — enable `fetchJobDetails` to get full job descriptions, work type, and advertiser data
- **Classification data included** — every result includes industry category and sub-category from Seek's taxonomy
- **No API key, no login, no cookies** required

### 📊 What data can you extract?

**From search results (default mode):**

| Field | Description | Example |
|-------|-------------|---------|
| `id` | Seek job ID | `"91129270"` |
| `url` | Full Seek job URL | `"https://www.seek.com.au/job/91129270"` |
| `title` | Job title | `"Senior Software Engineer"` |
| `company` | Employer name | `"Atlassian"` |
| `location` | Location string | `"Sydney NSW"` |
| `shortDescription` | 1-2 sentence teaser | `"Join our platform team..."` |
| `listingDate` | Relative date posted | `"3d ago"` |
| `salary` | Salary range if shown | `"$120,000 – $150,000 per year"` |
| `classification` | Industry category | `"Information & Communication Technology"` |
| `subClassification` | Sub-category | `"Software Engineering"` |
| `scrapedAt` | ISO timestamp | `"2026-03-31T04:56:39Z"` |

**Additional fields with `fetchJobDetails: true`:**

| Field | Description | Example |
|-------|-------------|---------|
| `workType` | Employment type | `"Full time"` |
| `advertiserName` | Recruiter or company | `"Atlassian"` |
| `fullDescription` | Complete job description text | Full text, 200-1000 words |

Salary data is shown when the employer provides it (roughly 20-30% of listings). Classifications use Seek's standard taxonomy covering 20+ industry categories.

### 💵 How much does it cost to scrape Seek jobs?

This Actor uses **pay-per-event pricing** — you pay only for results scraped. No monthly subscription. All platform compute costs are included.

| | Free | Starter ($29/mo) | Scale ($199/mo) | Business ($999/mo) |
|---|---|---|---|---|
| **Per job** | $0.0023 | $0.002 | $0.00156 | $0.0012 |
| **100 jobs** | $0.23 | $0.20 | $0.16 | $0.12 |
| **1,000 jobs** | $2.30 | $2.00 | $1.56 | $1.20 |

Plus a one-time **$0.02 run start fee** per run.

**Real-world cost examples:**

| Query | Results | Duration | Cost (Starter tier) |
|---|---|---|---|
| "software engineer" in Sydney, 22 results | 22 | ~8s | $0.06 |
| "nurse" in Melbourne, 50 results | 50 | ~18s | $0.12 |
| "accountant" all Australia, 100 results | 100 | ~35s | $0.22 |
| "data analyst" all cities, 200 results | 200 | ~70s | $0.42 |

**Free plan estimate:** Apify's $5 free credit lets you scrape approximately **2,100 jobs** on the Starter tier — enough to build a solid dataset for research or monitoring.

> The leading competitor (websift/seek-job-scraper) charges **$0.0025/result** — we charge **$0.002** (20% cheaper) with tiered discounts for high-volume plans.

### 🚀 How to scrape Seek jobs

1. Go to the [Seek Scraper page on Apify Store](https://apify.com/automation-lab/seek-scraper)
2. Click **Try for free** — no credit card required
3. In the **Keywords** field, enter the job role you're looking for (e.g. `"software engineer"`)
4. Set your **Location** (e.g. `"Sydney"`, `"Melbourne"`, or leave empty for all Australia)
5. Optionally select a **Work Type** (Full time, Part time, Contract/Temp, Casual)
6. Set **Max Results** — start small (20-50) to test, then scale up
7. Click **Start** and wait a few seconds
8. Click **Export** to download results as JSON, CSV, or Excel

**Example inputs for different use cases:**

```json
// Quick salary research — software engineers in Sydney
{
    "keywords": ["software engineer"],
    "location": "Sydney",
    "maxResults": 100
}
````

```json
// Job market monitoring — all nursing jobs posted this week
{
    "keywords": ["nurse", "registered nurse", "aged care"],
    "location": "",
    "dateRange": "7",
    "maxResults": 500
}
```

```json
// Deep extract with full descriptions — tech roles in Melbourne
{
    "keywords": ["data scientist", "machine learning engineer"],
    "location": "Melbourne",
    "workType": "full time",
    "maxResults": 50,
    "fetchJobDetails": true
}
```

### ⚙️ Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `keywords` | string\[] | `["software engineer"]` | Search keywords. Each keyword performs a separate search. |
| `location` | string | `"Sydney"` | Location to search. Examples: "Sydney", "Melbourne", "Brisbane", "Perth", "Auckland". Leave empty for all Australia. |
| `workType` | string | `""` | Filter by work type. Options: `"full time"`, `"part time"`, `"contract/temp"`, `"casual/vacation"`, or empty for all. |
| `dateRange` | string | `""` | Filter by days since posting. Options: `"1"` (today), `"3"`, `"7"`, `"14"`, `"30"`, or empty for all time. |
| `maxResults` | integer | `50` | Maximum total job listings to scrape across all keywords. |
| `fetchJobDetails` | boolean | `false` | Visit each job's detail page to get full description, work type, and advertiser details. Uses more credits. |

### 📄 Output examples

**Standard mode output (one job):**

```json
{
    "id": "91129270",
    "url": "https://www.seek.com.au/job/91129270",
    "title": "Senior Software Engineer",
    "company": "Atlassian",
    "location": "Sydney NSW",
    "shortDescription": "Join our platform engineering team building the infrastructure that powers millions of developers worldwide.",
    "listingDate": "2d ago",
    "salary": "$140,000 – $180,000 per year",
    "workType": "",
    "classification": "Information & Communication Technology",
    "subClassification": "Software Engineering",
    "advertiserName": "",
    "fullDescription": "",
    "scrapedAt": "2026-03-31T05:00:00.000Z"
}
```

**With `fetchJobDetails: true`:**

```json
{
    "id": "91129270",
    "url": "https://www.seek.com.au/job/91129270",
    "title": "Senior Software Engineer",
    "company": "Atlassian",
    "location": "Sydney NSW",
    "shortDescription": "Join our platform engineering team...",
    "listingDate": "2d ago",
    "salary": "$140,000 – $180,000 per year",
    "workType": "Full time",
    "classification": "Information & Communication Technology",
    "subClassification": "Software Engineering",
    "advertiserName": "Atlassian",
    "fullDescription": "About the Role\\n\\nAtlassian's Platform team is responsible for...",
    "scrapedAt": "2026-03-31T05:00:00.000Z"
}
```

### 💡 Tips for best results

- **Start with 20-50 results** to verify your search works as expected, then increase `maxResults`
- **Use specific keywords** — `"senior java developer"` returns more targeted results than `"developer"`
- **Leave location empty** for national monitoring — Seek serves all Australian state results when location is omitted
- **Set `dateRange: "7"`** for weekly monitoring workflows — combine with Apify scheduling for automatic monitoring
- **Use multiple keywords** to cover variations — `["registered nurse", "RN", "nursing"]` covers more listings
- **Enable `fetchJobDetails`** only when you need full descriptions — it's 3-5x slower and costs more per job
- **Salary data appears in ~20-30% of listings** — sort exported data by `salary` to filter roles with salary disclosure
- **Schedule runs** daily or weekly via Apify's built-in scheduler to track job market trends over time

### 🔗 Integrations

**Seek Scraper → Google Sheets for salary benchmarking:**
Connect the actor's output to Google Sheets using Apify's native integration. Schedule daily runs to build a live salary benchmark database for your HR team. Filter the sheet by `classification` to get role-specific salary ranges.

**Seek Scraper → Slack/Discord for job alerts:**
Use Apify webhooks to send new job listings to a Slack channel the moment a run completes. Set `dateRange: "1"` and schedule the actor to run daily — your team gets fresh job alerts every morning without manual searching.

**Seek Scraper → Make/Zapier for recruitment CRM:**
Trigger a Make scenario when the actor finishes. Filter results by keyword and company, then create records in your ATS or CRM automatically. Ideal for tracking specific companies' hiring activity.

**Seek Scraper scheduled monitoring:**
Use Apify's cron scheduler (`0 8 * * *`) to run daily at 8 AM. Track how many new jobs appear each day for specific classifications — useful for market research, consulting reports, and workforce planning.

**Seek Scraper → Python/Pandas analysis:**
Pull dataset results via the Apify API and analyze with Pandas. Group by `classification` and `location`, calculate average salaries from listings that include pay ranges, and visualize hiring trends over time.

### 🖥️ Using the Apify API

**Node.js:**

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('automation-lab/seek-scraper').call({
    keywords: ['software engineer'],
    location: 'Sydney',
    maxResults: 100,
});

const dataset = await client.dataset(run.defaultDatasetId).listItems();
console.log(dataset.items);
```

**Python:**

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_APIFY_TOKEN')

run = client.actor('automation-lab/seek-scraper').call(run_input={
    'keywords': ['software engineer'],
    'location': 'Sydney',
    'maxResults': 100,
})

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['title'], item['company'], item['salary'])
```

**cURL:**

```bash
curl -X POST "https://api.apify.com/v2/acts/automation-lab~seek-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "keywords": ["software engineer"],
    "location": "Sydney",
    "maxResults": 100
  }'
```

### 🤖 Use with AI agents via MCP

Seek Scraper is available as a tool for AI assistants that support the [Model Context Protocol (MCP)](https://docs.apify.com/platform/integrations/mcp).

Add the Apify MCP server to your AI client — this gives you access to all Apify actors, including this one:

#### Setup for Claude Code

```bash
claude mcp add --transport http apify "https://mcp.apify.com"
```

#### Setup for Claude Desktop, Cursor, or VS Code

Add this to your MCP config file:

```json
{
    "mcpServers": {
        "apify": {
            "url": "https://mcp.apify.com"
        }
    }
}
```

Your AI assistant will use OAuth to authenticate with your Apify account on first use.

#### Example prompts

Once connected, try asking your AI assistant:

- "Use automation-lab/seek-scraper to find all software engineering jobs in Sydney posted this week with salaries above $100K"
- "Scrape 200 nursing jobs in Melbourne and analyze which hospitals are hiring the most right now"
- "Get the top 50 data analyst job listings from Seek and summarize the most common required skills and average salary range"

Learn more in the [Apify MCP documentation](https://docs.apify.com/platform/integrations/mcp).

### ⚖️ Is it legal to scrape Seek.com.au?

Seek Scraper only accesses publicly available job listings — the same data anyone can view by visiting seek.com.au in a browser without logging in. We follow ethical scraping practices: reasonable request rates, no personal data extraction beyond what's publicly displayed, and no scraping of private/member-only content.

This actor is intended for:

- Job market research and analysis
- Salary benchmarking with publicly-disclosed salary data
- Monitoring publicly listed job opportunities
- Academic and business research

Always comply with [Seek's Terms of Use](https://www.seek.com.au/about/terms/) and applicable local laws. This actor does not scrape login-protected content, personal candidate information, or private employer data. The operator and user are responsible for how extracted data is used and stored.

### ❓ FAQ

**How many jobs does Seek have?**
Seek.com.au typically has 150,000–170,000+ active job listings at any given time across Australia, New Zealand, and Southeast Asia. The actor reports the total count on the first page of each search.

**How fast does it scrape?**
In default mode (no detail pages), the actor scrapes approximately 22 jobs every 3-5 seconds — or roughly 250–400 jobs per minute. With `fetchJobDetails: true`, it slows to about 40-60 jobs per minute due to individual page requests.

**How much does it cost compared to Seek's official API?**
Seek does not offer a public job listing API. This actor is the most cost-effective way to access Seek job data programmatically at $0.002/result (Starter tier) with no subscription requirement.

**Why are some salary fields empty?**
Most Seek listings don't disclose a salary range — this is the employer's choice. In our testing, roughly 20-30% of listings include salary data. Use `salary != ""` filtering when exporting to isolate listings with pay disclosure.

**Why am I getting different results than I see on Seek.com.au?**
Seek personalizes results based on cookies and browsing history. This actor fetches results without cookies, so you see the default unfiltered results — which may differ from personalized results in your browser. This is actually better for research as it removes personalization bias.

**Results seem unrelated to my keyword — what's wrong?**
When a specific keyword has no exact matches, Seek returns similar or related jobs rather than zero results. If you're doing niche research, check the `classification` field to see what industry categories are being returned. Try more specific multi-word keywords to improve relevance.

**Can I scrape Seek's Southeast Asian sites (Jobstreet, JobsDB)?**
This actor focuses on seek.com.au (Australia). Jobstreet and JobsDB use different HTML structures. If you need those sites, they would require separate scrapers.

### 🔍 Other job scraper tools

Looking for more job market data? Check out these other actors from automation-lab:

- [LinkedIn Jobs Scraper](https://apify.com/automation-lab/linkedin-jobs-scraper) — Extract LinkedIn job postings with company data and recruiter details
- [Google Jobs Scraper](https://apify.com/automation-lab/google-jobs-scraper) — Scrape Google Jobs search results across all industries

***

*Built by [automation-lab](https://apify.com/automation-lab) — specializing in reliable, cost-efficient data extraction tools for the Australian market.*

# Actor input Schema

## `keywords` (type: `array`):

Enter job search keywords. Each keyword performs a separate search. Example: "software engineer", "data analyst", "nurse".

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

Location to search in. Examples: "Sydney", "Melbourne", "Brisbane", "Perth", "Auckland". Leave empty to search all Australia.

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

Filter by work type. Leave empty to include all work types.

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

Filter jobs by how recently they were posted. Leave empty for all dates.

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

Maximum number of job listings to scrape per keyword. 22 jobs per page.

## `fetchJobDetails` (type: `boolean`):

If enabled, the scraper visits each job's detail page to extract the full job description, classification, and work type. Uses more credits but returns richer data.

## Actor input object example

```json
{
  "keywords": [
    "software engineer"
  ],
  "location": "Sydney",
  "workType": "",
  "dateRange": "",
  "maxResults": 20,
  "fetchJobDetails": 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 = {
    "keywords": [
        "software engineer"
    ],
    "location": "Sydney",
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/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"],
    "location": "Sydney",
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/seek-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 '{
  "keywords": [
    "software engineer"
  ],
  "location": "Sydney",
  "maxResults": 20
}' |
apify call automation-lab/seek-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Seek.com.au Job Scraper",
        "description": "Extract job listings from Seek.com.au — Australia and New Zealand's #1 job board. Filter by keyword, location, work type, and date. Exports to JSON, CSV, or Excel. No API key needed.",
        "version": "0.1",
        "x-build-id": "Snq22kw9FlGxIAzYr"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~seek-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-seek-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/automation-lab~seek-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-seek-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/automation-lab~seek-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-seek-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "keywords": {
                        "title": "🔍 Keywords",
                        "type": "array",
                        "description": "Enter job search keywords. Each keyword performs a separate search. Example: \"software engineer\", \"data analyst\", \"nurse\".",
                        "items": {
                            "type": "string"
                        }
                    },
                    "location": {
                        "title": "📍 Location",
                        "type": "string",
                        "description": "Location to search in. Examples: \"Sydney\", \"Melbourne\", \"Brisbane\", \"Perth\", \"Auckland\". Leave empty to search all Australia."
                    },
                    "workType": {
                        "title": "💼 Work Type",
                        "enum": [
                            "",
                            "full time",
                            "part time",
                            "contract/temp",
                            "casual/vacation"
                        ],
                        "type": "string",
                        "description": "Filter by work type. Leave empty to include all work types.",
                        "default": ""
                    },
                    "dateRange": {
                        "title": "📅 Date Listed",
                        "enum": [
                            "",
                            "1",
                            "3",
                            "7",
                            "14",
                            "30"
                        ],
                        "type": "string",
                        "description": "Filter jobs by how recently they were posted. Leave empty for all dates.",
                        "default": ""
                    },
                    "maxResults": {
                        "title": "📊 Max Results",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum number of job listings to scrape per keyword. 22 jobs per page.",
                        "default": 50
                    },
                    "fetchJobDetails": {
                        "title": "📄 Fetch Full Job Details",
                        "type": "boolean",
                        "description": "If enabled, the scraper visits each job's detail page to extract the full job description, classification, and work type. Uses more credits but returns richer data.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
