SEEK Scraper - Jobs, Company Reviews and Salaries
Pricing
from $1.50 / 1,000 results
SEEK Scraper - Jobs, Company Reviews and Salaries
Extract public SEEK jobs, company profiles, reviews and salary information with Australia, New Zealand, Hong Kong and Singapore market options. Pay per delivered row plus a run start fee.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
1
Bookmarked
3
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
SEEK Scraper
Extract SEEK jobs, employer profiles, reviews and salary information as rows you can export, with market options for Australia, New Zealand, Hong Kong and Singapore.
- Search jobs by keyword, location and work type, or supply job links.
- Collect company overviews, reviews, salaries, open roles and culture information.
- Read public company-search and people-search results where available.
- Export rows or use them with AI agents and the Apify API.
- Pay $2 per 1,000 rows on the Free plan, plus a small start fee.
What does SEEK Scraper do?
SEEK Scraper collects publicly visible job and employer information. Use it for hiring research, salary comparisons and monitoring company vacancies. market selects Australia (au), New Zealand (nz), Hong Kong through JobsDB (hk), or Singapore through Jobstreet (sg). Availability varies by page and market.
- Jobs: keyword search or individual job details.
- Employer pages: company overview, reviews, salaries, company jobs or culture.
- Discovery: company search or public people search.
- Job detail enrichment:
enrichDetailsis on by default. It adds information to the same job row, not a separately billed row. Not every search row receives full details.
What data can you extract from SEEK?
dataType identifies the kind of row. Fields depend on the source page; examples below illustrate the format, not current vacancies or guaranteed values.
Common fields
| Field | Description | Example |
|---|---|---|
dataType | Kind of row | job_detail |
listingId | Entity identifier | 81234567 |
name | Display title or name | Software Engineer |
url | Source link | https://au.seek.com/job/81234567 |
Job search: job_serp_item
| Field | Description | Example |
|---|---|---|
jobListingId | Job number | 81234567 |
companyName | Advertiser or employer | Example Company |
location | Advertised location | Sydney NSW |
salaryLabel | Advertised pay text | AUD 120,000 per year |
Job details: job_detail
| Field | Description | Example |
|---|---|---|
jobListingId | Job number | 81234567 |
content | Job description, possibly HTML | <p>Example job description.</p> |
companyName | Employer name | Example Company |
Company jobs: company_job
| Field | Description | Example |
|---|---|---|
jobListingId | Job on the company page | 81234567 |
companyName | Employer | Example Company |
location | Job location | Sydney NSW |
Company overview: company_overview
| Field | Description | Example |
|---|---|---|
employerId | Company identifier | 432600 |
website | Published company website | https://example.com |
aggregateRating | Published rating summary | {"ratingValue":4.2} |
Reviews: review
| Field | Description | Example |
|---|---|---|
reviewId | Review identifier | example-review |
overallRating | Overall score | 4 |
pros | Positive comments | Supportive team |
cons | Negative comments | Limited training time |
Salary bands: salary_item
| Field | Description | Example |
|---|---|---|
jobTitle | Role being measured | Software Engineer |
min | Lower salary figure | 100000 |
max | Upper salary figure | 140000 |
currency | Currency code | AUD |
salaryScope | Company or industry comparison, when provided | industry |
currencySource | Source currency or market fallback | market |
Salary summary: salaries_aggregate
When no salary bands are available, a published salary-rating summary may be returned instead. These are ratings, not salary amounts.
| Field | Description | Example |
|---|---|---|
salaryFair | Fair-pay rating from the source | 70 |
salaryGenerous | Generous-pay rating from the source | 20 |
salaryPoor | Poor-pay rating from the source | 10 |
Culture: company_culture
| Field | Description | Example |
|---|---|---|
culture | Published culture information | Team learning sessions |
galleryPhotos | Company gallery entries, up to 30 | [] |
Company search: company_search_item
| Field | Description | Example |
|---|---|---|
employerId | Company identifier | seek-432600 |
companyName | Matching company | SEEK |
People search: people_profile
| Field | Description | Example |
|---|---|---|
profileId | Public profile identifier | example-profile |
headline | Published role or headline | Software Engineer |
Rows also carry org, web, address, phones, emails, person, geo and leadAbsences. Contact information is often empty; absence reasons distinguish unavailable, restricted and unverified information. Company pages can provide a website and address. Do not treat these fields as a verified contact directory.
How to scrape SEEK
- Open SEEK Scraper in Apify Console.
- Enter a keyword, job link or company link in the input form.
- Choose the market and set
maxResultsto 3 for a first run. - Click Start and wait for the run to finish.
- Open the dataset and download the rows, or read them through the API.
Empty input starts an example jobs search for software engineer in Sydney NSW. The current form supplies 3 rows, within the example-run ceiling of 10. This is a billed run, not a free preview. With channel: "auto", one target field selects the matching channel.
Jobs search
Fill keyword or keywords. Set location explicitly: when omitted, Australia uses Sydney NSW, while the other markets use their whole-market location. classification can replace an empty keyword.
Job details
Fill detailUrls or jobListingIds. A job link or number selects details rather than a keyword search. Use the matching market for numeric IDs.
Company overview
Fill companyUrl or employerId; automatic selection chooses company. For a numeric employer ID, companyName helps construct the company link.
Reviews
Choose reviews and supply a company link or employer ID. Each review is a separate row.
Salaries
Choose salaries with a company target. Use jobTitle to narrow the roles. Check salaryScope before interpreting an industry comparison as company pay.
Company jobs
Choose company_jobs with a company target to collect its advertised roles.
Culture
Choose culture with a company target for available culture text and gallery information.
Company search
Choose company_search and fill a keyword to find company pages.
People search
Choose people with a keyword. Only public profile information is in scope; a search may yield no accessible profiles.
What to fill in
| Field | What to enter | Default |
|---|---|---|
channel | Collection type from the sections above | auto |
keyword | One search phrase | Empty; example: software engineer |
keywords | Up to 50 search phrases | Empty |
location | City, region or market-wide location | Market-dependent |
classification | Job classification slug when keyword is empty | Empty |
workType | full-time, part-time, contract, casual, hybrid, remote | Any |
companyUrl | Company page link | Empty |
employerId | Company number or slug-ID | Empty |
companyName | Company name for a numeric ID | Empty |
jobTitle | Salary role filter | Empty |
detailUrls | Job links | Empty |
jobListingIds | Job numbers | Empty |
market | au, nz, hk, sg | au |
maxResults | Rows per input, from 1 to 200 | 70; form example 3 |
maxPages | Page setting from 1 to 10; collection may expand to meet the row request | 1 |
enrichDetails | Add full details to available job rows | true |
sortBy | Jobs: ListedDate or KeywordRelevance; reviews: Date or Helpful | Source order |
remote | Remote jobs when workType is empty | false |
domain | Recognized market host instead of market | Empty |
includeRaw | Include extra source data where available | false |
Jobs search:
{"keyword":"software engineer","location":"Sydney NSW","maxResults":3}
Job details:
{"detailUrls":["https://www.seek.com.au/job/81234567"],"maxResults":1}
Company overview:
{"channel":"company","companyUrl":"https://www.seek.com.au/companies/seek-432600","maxResults":1}
Reviews:
{"channel":"reviews","employerId":"seek-432600","maxResults":3}
Salaries:
{"channel":"salaries","employerId":"seek-432600","jobTitle":"Software Engineer","maxResults":3}
Company jobs:
{"channel":"company_jobs","employerId":"seek-432600","maxResults":3}
Culture:
{"channel":"culture","employerId":"seek-432600","maxResults":1}
Company search:
{"channel":"company_search","keyword":"SEEK","maxResults":3}
People search:
{"channel":"people","keyword":"software engineer","maxResults":3}
maxItems and limit are aliases for maxResults; query is an alias for keyword. Close field-name misspellings can be corrected; other unknown fields are ignored and noted. Invalid filters are dropped rather than failing the run.
Invalid targets fail before any row charge with INVALID_INPUT: followed by the field and a correction. The start fee still applies. Each run writes INPUT_REPORT to its default key-value store, including the selected channel and fields filled, inferred or ignored.
For automatic selection, competing targets use this order: detailUrls, jobListingIds, companyUrl, employerId, keywords, keyword, classification. Prefer one target type per run; explicitly select the channel for employer tabs other than overview.
Output example
Illustrative job-search row:
{"dataType": "job_serp_item","listingId": "81234567","jobListingId": "81234567","name": "Software Engineer","type": "job_serp_item","status": "active","country": "Australia","authority": "au.seek.com","companyName": "Example Company","location": "Sydney NSW","salaryLabel": "AUD 120,000 per year","url": "https://au.seek.com/job/81234567","contentDepth": "guest_preview"}
Export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table. RUN_SUMMARY records the outcome and warnings; INPUT_ECHO shows the interpreted input, and ERROR_SUMMARY gives failure details when present.
Why use this SEEK scraper?
- Pay for delivered rows. Row charges follow dataset delivery, plus the start fee.
- Keep available partial results. When collection returns partial rows after a timeout or cancellation, the Actor can deliver them. Rows already written remain available; an abrupt abort does not guarantee delivery of pending rows.
- Understand missing values. Unavailable contact information stays empty with absence reasons rather than invented details.
- Process several inputs. Supply multiple keywords or job links with a separate row limit for each.
- No proxy setup. You do not need to set up proxies or provide a SEEK API key.
How much does it cost to scrape SEEK?
The Actor uses pay-per-event pricing. The start event costs $0.005 per GB of allocated memory, with a minimum of one event. At the default 512 MB, a run start costs $0.005. Platform usage is included in these prices.
| Apify plan | Start at 512 MB | Price per row | Price per 1,000 rows |
|---|---|---|---|
| Free | $0.005 | $0.002 | $2.00 |
| Starter | $0.005 | $0.002 | $2.00 |
| Scale | $0.005 | $0.002 | $2.00 |
| Business | $0.005 | $0.0015 | $1.50 |
maxResultsapplies to each input, defaults to 70 and allows up to 200. Requests above 70 are collected in parts of up to 70 where continuation is available.- All row types count toward the limit. Free Apify plan runs are capped at 200 rows across the run, with 10 runs of this Actor in total.
- The whole run stops at Maximum cost per run, supplied as
maxTotalChargeUsdin the API. A requested limit is not a guaranteed result count.
Example: two keywords returning 3 rows each give 6 rows. On the Free plan at 512 MB, the event cost is 6 × $0.002 + $0.005 = $0.017. An empty result has no row charge, but still has the start fee.
What happens when the run timeout is too short
When the selected timeout is too short, an eligible run can pause rather than fail. Its status message says "Queued on the collection backend; this run will resume automatically when results are ready (about N s)." It appears as ABORTED temporarily.
When results are ready, the same run resumes automatically and delivers into the same dataset. A successful delivery finishes as SUCCEEDED. Rows already delivered are skipped so they are not charged twice. Resumed delivery with existing rows can show "Resumed: delivering N rows."
- Automatic pauses are limited to at most 3 per run. Keep the default 900-second timeout to reduce interruptions.
- Synchronous endpoints (
run-sync,run-sync-get-dataset-items) wait at most 300 seconds and can return an empty dataset while the run is paused. For longer jobs, start asynchronously and read the dataset after SUCCEEDED, or use a success webhook.
Use with AI agents and the API
Apify MCP server
Add this remote tool to Claude, ChatGPT, Cursor, VS Code or another compatible MCP client:
https://mcp.apify.com?tools=lentic_clockss/seek-scraper
Sign in with Apify through OAuth, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool starts a run and returns run and dataset IDs; the agent reads rows with get-dataset-items. Clients without remote support can use npx @apify/actors-mcp-server --tools lentic_clockss/seek-scraper with APIFY_TOKEN set.
Example prompt: “Find 3 software engineer jobs in Sydney NSW using SEEK Scraper and return their titles, employers and links.”
Apify API
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("lentic_clockss/seek-scraper").call(run_input={"keyword": "software engineer", "location": "Sydney NSW", "maxResults": 3})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('lentic_clockss/seek-scraper').call({keyword: 'software engineer', location: 'Sydney NSW', maxResults: 3});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
For HTTP, send input JSON to POST https://api.apify.com/v2/acts/lentic_clockss~seek-scraper/runs with an Authorization: Bearer header. Read completed rows using GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json.
Integrations
Use Apify Schedules for recurring runs. Connect results to Google Sheets, Make, Zapier, n8n, Slack, Airtable or your own webhook through the Actor's Integrations tab.
FAQ
Is it legal to scrape SEEK?
This Actor collects publicly visible data. You are responsible for reviewing the site's terms and applicable data-protection law. Processing personal data requires a lawful basis; seek legal advice if unsure about your use.
Why did my run end as ABORTED?
An explicit stop can leave the run ABORTED. Check its status message and log for the actual reason. Already delivered rows remain in the dataset. This Actor does not promise automatic restart; inspect the input and run status before starting another billed run.
How many results can I get?
Request up to 200 rows per input. Free-plan runs have a 200-row total cap. Source availability, page limits and your maximum charge can reduce delivery. More keywords can return more rows on paid plans, within the charge limit.
Why are some fields empty?
The page may omit salary, contact details or other information. Search rows can be less detailed than job-detail rows. Restricted information is not unlocked, and salary currency may come from the selected market; check currencySource.
How do I search another market?
Set market and a matching location. Hong Kong uses hk.jobsdb.com; Singapore uses sg.jobstreet.com. Do not assume every company tab or public profile is available in every market.
Does this collect signed-in content or apply for jobs?
No. Rows describe public information with contentDepth: "guest_preview". The Actor does not log in, submit applications or submit reviews.
Can a successful run return zero rows?
Yes. A confirmed search with no matches can finish successfully with an empty dataset. Read RUN_SUMMARY and try a broader phrase or another location; an empty result is different from a collection failure.
Limitations
- No full-site completeness or fixed result count is guaranteed.
- People searches and company tabs depend on publicly accessible content.
- Job details can be incomplete even with
enrichDetailsenabled. - The form fields
easyApply,seniorityandfailoverdo not filter or otherwise change results. - No automatic keyword translation or moving date window is provided.
- Company overview, culture and individual job details do not provide ongoing paginated lists.
Related scrapers
More job board and freelance marketplace scrapers from the same publisher:
- LinkedIn Scraper
- Indeed Scraper
- Upwork Scraper
- Freelancer.com Scraper
- Glassdoor Scraper
- Bayt Scraper
- Fiverr Scraper
Browse all of our scrapers at apify.com/lentic_clockss.
Support
Report a problem or request a field through the Issues tab of this Actor's page. Include the run ID and the input you used.