SEEK Scraper - Jobs, Company Reviews and Salaries avatar

SEEK Scraper - Jobs, Company Reviews and Salaries

Pricing

from $1.50 / 1,000 results

Go to Apify Store
SEEK Scraper - Jobs, Company Reviews and Salaries

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

kane liu

Maintained by Community

Actor stats

1

Bookmarked

3

Total users

1

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

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: enrichDetails is 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

FieldDescriptionExample
dataTypeKind of rowjob_detail
listingIdEntity identifier81234567
nameDisplay title or nameSoftware Engineer
urlSource linkhttps://au.seek.com/job/81234567

Job search: job_serp_item

FieldDescriptionExample
jobListingIdJob number81234567
companyNameAdvertiser or employerExample Company
locationAdvertised locationSydney NSW
salaryLabelAdvertised pay textAUD 120,000 per year

Job details: job_detail

FieldDescriptionExample
jobListingIdJob number81234567
contentJob description, possibly HTML<p>Example job description.</p>
companyNameEmployer nameExample Company

Company jobs: company_job

FieldDescriptionExample
jobListingIdJob on the company page81234567
companyNameEmployerExample Company
locationJob locationSydney NSW

Company overview: company_overview

FieldDescriptionExample
employerIdCompany identifier432600
websitePublished company websitehttps://example.com
aggregateRatingPublished rating summary{"ratingValue":4.2}

Reviews: review

FieldDescriptionExample
reviewIdReview identifierexample-review
overallRatingOverall score4
prosPositive commentsSupportive team
consNegative commentsLimited training time

Salary bands: salary_item

FieldDescriptionExample
jobTitleRole being measuredSoftware Engineer
minLower salary figure100000
maxUpper salary figure140000
currencyCurrency codeAUD
salaryScopeCompany or industry comparison, when providedindustry
currencySourceSource currency or market fallbackmarket

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.

FieldDescriptionExample
salaryFairFair-pay rating from the source70
salaryGenerousGenerous-pay rating from the source20
salaryPoorPoor-pay rating from the source10

Culture: company_culture

FieldDescriptionExample
culturePublished culture informationTeam learning sessions
galleryPhotosCompany gallery entries, up to 30[]

Company search: company_search_item

FieldDescriptionExample
employerIdCompany identifierseek-432600
companyNameMatching companySEEK

People search: people_profile

FieldDescriptionExample
profileIdPublic profile identifierexample-profile
headlinePublished role or headlineSoftware 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

  1. Open SEEK Scraper in Apify Console.
  2. Enter a keyword, job link or company link in the input form.
  3. Choose the market and set maxResults to 3 for a first run.
  4. Click Start and wait for the run to finish.
  5. 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.

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.

Choose company_search and fill a keyword to find company pages.

Choose people with a keyword. Only public profile information is in scope; a search may yield no accessible profiles.

What to fill in

FieldWhat to enterDefault
channelCollection type from the sections aboveauto
keywordOne search phraseEmpty; example: software engineer
keywordsUp to 50 search phrasesEmpty
locationCity, region or market-wide locationMarket-dependent
classificationJob classification slug when keyword is emptyEmpty
workTypefull-time, part-time, contract, casual, hybrid, remoteAny
companyUrlCompany page linkEmpty
employerIdCompany number or slug-IDEmpty
companyNameCompany name for a numeric IDEmpty
jobTitleSalary role filterEmpty
detailUrlsJob linksEmpty
jobListingIdsJob numbersEmpty
marketau, nz, hk, sgau
maxResultsRows per input, from 1 to 20070; form example 3
maxPagesPage setting from 1 to 10; collection may expand to meet the row request1
enrichDetailsAdd full details to available job rowstrue
sortByJobs: ListedDate or KeywordRelevance; reviews: Date or HelpfulSource order
remoteRemote jobs when workType is emptyfalse
domainRecognized market host instead of marketEmpty
includeRawInclude extra source data where availablefalse

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 planStart at 512 MBPrice per rowPrice 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
  • maxResults applies 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 maxTotalChargeUsd in 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 ApifyClient
client = 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

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 enrichDetails enabled.
  • The form fields easyApply, seniority and failover do 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.

More job board and freelance marketplace scrapers from the same publisher:

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.