SEEK Australia Jobs Scraper avatar

SEEK Australia Jobs Scraper

Pricing

from $0.97 / 1,000 job scrapeds

Go to Apify Store
SEEK Australia Jobs Scraper

SEEK Australia Jobs Scraper

Collect SEEK Australia job listings by keyword, location, or URL, with optional job details, company profiles, and company reviews.

Pricing

from $0.97 / 1,000 job scrapeds

Rating

0.0

(0)

Developer

Farhan Ali

Farhan Ali

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Categories

Share

SEEK Australia Jobs Scraper creates a structured dataset of job listings collected from SEEK Australia. Each dataset item represents one job (or, when a company URL is used, one company) and can include title, advertiser, location, work type, salary, listing date, optional full job details, an optional nested company profile, and optional nested reviews. Query the source with keywords (searchQueries), an optional location, or SEEK search, job, or company URLs (startUrls). Control the result limit with maxItems, and retrieve records through the Apify Dataset API or export them as JSON, CSV, Excel, XML, or another supported format.

Dataset at a glance

PropertyValue
Sourceau.seek.com
Record unitOne SEEK job, or one company when a company URL is the seed
Input methodsKeywords (searchQueries) and/or SEEK search, job, or company URLs (startUrls)
Main identifiersjobId, job URL (url); company records use companyId
DeliveryApify Dataset and API
Export formatsJSON, CSV, Excel, XML, HTML (Apify dataset exports)
Update modelFresh records per Actor run
Pricing$1 / 1,000 jobs; +$1 / 1,000 job details; +$1 / 1,000 company details; +$1 / 1,000 reviews; Actor start $0.00005

Coverage and available records

The Actor collects public SEEK Australia listings from one or both entry points. When both are set, the seeds are combined.

  • Search-based: searchQueries (for example python developer) resolve against location (for example Sydney NSW 2000). Leave location empty to search all of Australia. Leave searchQueries empty and set location to list jobs in that place.
  • URL-based: startUrls accepts SEEK search result pages, job pages (https://au.seek.com/job/93791035), or company profiles (https://au.seek.com/companies/coles-group-433124).

Search filters (all optional):

  • workTypes: full-time, part-time, contract, casual
  • workArrangements: on-site, hybrid, remote
  • classifications: SEEK classification keys such as information-communication or healthcare
  • salaryType plus salaryMin / salaryMax in AUD (annual, monthly, hourly)
  • listedAt: today, 3d, 7d, 14d, 30d (empty = any time)

Record types and limits:

  • Listing-level jobs are always collected: identifiers, title, advertiser, location, work type, salary label, and listed date.
  • Job details are conditional: full description and extra fields are returned when scrapeJobDetails is enabled (default true) and charged as the job-details event.
  • Company profile is conditional: a nested company object is returned when scrapeCompanyDetails is enabled (default false) and charged once per unique company.
  • Reviews are conditional: a nested reviews array is returned when scrapeCompanyReviews is enabled (default false) and charged per review. maxReviewsPerCompany caps reviews per company (0 = all).
  • Result cap: maxItems limits job records (0 means unlimited; console prefill 20). Company details and reviews nest on those records.

Known exclusions: content SEEK only shows after login is not collected; each run captures listing state at run time (no historical snapshots); markets outside SEEK Australia are not collected.

Data dictionary

Field names below match dataset record JSON properties exactly. Fields marked conditional appear only when the corresponding input toggle is enabled.

Job listing fields

FieldTypeNullableDescriptionExample
recordTypestringNoRecord kind (job or company)job
jobIdstringYesSEEK job identifier; recommended deduplication key for jobs94231469
sourceQuerystringYesSearch keyword or URL that produced the recordpython developer
titlestringYesJob titleSoftware Developer
urlstringYesJob page URL; secondary keyhttps://au.seek.com/job/94231469
abstractstringYesShort listing summaryFull stack developer, Python and React on AWS...
advertiserNamestringYesAdvertiser nameLife Insurance Partners Pty Ltd
organisationNamestringYesOrganisation nameLife Insurance Partners Pty Ltd
companyIdstringYesSEEK company identifier when present433124
locationstringYesDisplay locationSurry Hills, Sydney NSW
locationHierarchystring[]YesSEEK location path["Surry Hills NSW 2010", "All Sydney NSW", "New South Wales NSW"]
classificationsobject[]YesSEEK categories: {id, name}[{"id": "6287", "name": "Developers/Programmers"}]
workTypesstring[]YesWork type labels["Full time"]
workArrangementsstring[]YesWorkplace labels["On-site"]
salaryLabelstringYesSalary text as shown by SEEK$80,000 – $110,000 per year
salaryMinnumberYesNumeric minimum in AUD when disclosed80000
salaryMaxnumberYesNumeric maximum in AUD when disclosed110000
salaryCurrencystringYesCurrency code when disclosedAUD
listedAtstringYesListed timestamp (ISO 8601)2026-08-27T03:01:12.000Z
listedAtLabelstringYesRelative listed label2d ago

Job detail fields (conditional — scrapeJobDetails)

FieldTypeNullableDescriptionExample
descriptionHtmlstringYesFull job description HTML<p><strong>About us:</strong> ...
isExpiredbooleanYesWhether SEEK marks the job expiredfalse
isVerifiedbooleanYesWhether SEEK marks the listing verifiedtrue

Company and review fields (conditional)

company is populated when scrapeCompanyDetails is enabled. reviews is populated when scrapeCompanyReviews is enabled. Company-URL seeds can also write a standalone recordType: "company" item.

FieldTypeNullableDescriptionExample
companyobjectYesNested profile: name, website, size, industry, location, ratingsSee example when details are on
reviewsobject[]YesNested reviews: {reviewId, title, pros, cons, overallRating, recommended, createdAt, ...}See example when reviews are on

Example dataset record

Job from keyword python developer in Sydney NSW 2000 with scrapeJobDetails on and company/review enrichment off.

{
"recordType": "job",
"jobId": "94231469",
"sourceQuery": "python developer",
"title": "Software Developer",
"url": "https://au.seek.com/job/94231469",
"abstract": "Full stack developer, Python and React on AWS. Small flat team, AI use, and real ownership.",
"advertiserName": "Life Insurance Partners Pty Ltd",
"organisationName": "Life Insurance Partners Pty Ltd",
"companyId": null,
"location": "Surry Hills, Sydney NSW",
"locationHierarchy": ["Surry Hills NSW 2010", "All Sydney NSW", "New South Wales NSW"],
"classifications": [
{"id": "6287", "name": "Developers/Programmers"},
{"id": "6281", "name": "Information & Communication Technology"}
],
"workTypes": ["Full time"],
"workArrangements": ["On-site"],
"salaryLabel": "$80,000 – $110,000 per year",
"salaryMin": 80000,
"salaryMax": 110000,
"salaryCurrency": "AUD",
"listedAt": "2026-08-27T03:01:12.000Z",
"listedAtLabel": "2d ago",
"descriptionHtml": "<p><strong>About us:</strong> Sustainable Life Group is a dynamic and fast-growing general advice licensee...</p>",
"isExpired": false,
"isVerified": true,
"company": null,
"reviews": []
}

The record above was produced with this input:

{
"searchQueries": ["python developer"],
"location": "Sydney NSW 2000",
"maxItems": 20,
"scrapeJobDetails": true,
"scrapeCompanyDetails": false,
"scrapeCompanyReviews": false
}

Query and input reference

InputTypeRequiredDefaultAccepted valuesDescription
searchQueriesarray (string)No[] (prefill python developer)Job keywordsSearch entry point
locationstringNo— (prefill Sydney NSW 2000)SEEK location labelEmpty = all of Australia
startUrlsarray (requestListSources)No[]SEEK search, job, or company URLsURL entry point
workTypesarray (string)No[]full-time, part-time, contract, casualWork-type filter
workArrangementsarray (string)No[]on-site, hybrid, remoteWorkplace filter
classificationsarray (string)No[]SEEK classification keysCategory filter
salaryTypestringNo"""", annual, monthly, hourlyHow to interpret salary min/max
salaryMinintegerNo≥ 0 AUDMinimum salary for the selected type
salaryMaxintegerNo≥ 0 AUDMaximum salary for the selected type
listedAtstringNo"""", today, 3d, 7d, 14d, 30dRecency window
scrapeJobDetailsbooleanNotruetrue / falseAttach full description (charged as job details)
scrapeCompanyDetailsbooleanNofalsetrue / falseAttach nested company profile (charged once per company)
scrapeCompanyReviewsbooleanNofalsetrue / falseAttach nested reviews (charged per review)
maxReviewsPerCompanyintegerNo00 or any positive integerReview cap per company; 0 = all
detailConcurrencyintegerNo8120Parallel detail / company / review requests
maxItemsintegerNo00 or any positive integerMaximum jobs; 0 = unlimited (console prefill 20)
proxyConfigurationobjectNoApify proxy, RESIDENTIALApify proxy groups or custom proxiesResidential proxies are recommended

Minimal request:

{ "searchQueries": ["python developer"], "location": "Sydney NSW 2000" }

Advanced request (filters plus company reviews):

{
"searchQueries": ["registered nurse"],
"location": "Melbourne VIC",
"workTypes": ["full-time"],
"workArrangements": ["on-site"],
"listedAt": "7d",
"scrapeJobDetails": true,
"scrapeCompanyDetails": true,
"scrapeCompanyReviews": true,
"maxReviewsPerCompany": 10,
"maxItems": 20
}

Retrieve the data through the API

Records are delivered through the Apify Actor and Dataset APIs — not an official SEEK API.

  1. Start the Actor with a JSON input (console or API).
  2. Wait for the run to finish, or use a synchronous endpoint if you want the response inline.
  3. Retrieve items from the run's default dataset.
  4. Paginate or export the dataset.

Python example:

from apify_client import ApifyClient
client = ApifyClient("YOUR-APIFY-TOKEN")
run_input = {
"searchQueries": ["python developer"],
"location": "Sydney NSW 2000",
"maxItems": 20,
"scrapeJobDetails": True,
}
run = client.actor("datascrapers/seek-au-jobs-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item.get("jobId"), item.get("title"), item.get("salaryLabel"))

Apify generates ready-to-run Python, JavaScript, and cURL examples on the Actor's API tab. Do not put a real API token in shared code or URLs.

Data quality and record handling

  • Conditional fields: descriptionHtml depends on scrapeJobDetails. company and reviews depend on their toggles. Listing-only runs (scrapeJobDetails: false) return a leaner job record.
  • Source changes: SEEK page structure and values can change; unreadable fields are omitted or returned as null rather than fabricated.
  • Deduplication: within a run, jobs are identified by jobId. Company details are charged once per unique company. Across runs, records are appended.
  • Failures: one failed job or company request does not stop the run. The run stops if a spending limit is reached.
  • Normalization: salaryMin / salaryMax are numeric AUD when SEEK discloses pay. listedAt is ISO 8601. Salary labels and work-type text come from SEEK.

Export and pipeline examples

DestinationRecommended methodTypical use
PostgreSQL / SupabaseDataset API poll or webhook consumerStore jobs and salary bands
Google SheetsApify Google Sheets integrationShare shortlists for recruiters
ATS / CRMDataset API or completion webhookCandidate-market monitoring
S3 / cloud storageScheduled export via Apify scheduler + integrationArchival of hiring snapshots

Pricing and cost examples

The Actor uses pay-per-event pricing. Each run also charges a one-time Actor start. Residential proxies are recommended. Proxy and compute are billed by your Apify plan. Event charges may be tiered on Apify paid plans.

EventTriggerRate
Actor startOnce per run$0.00005
job (Job scraped)Each job listing written$0.001 / job ($1 / 1,000)
job-details (Job Details)Full description collected (scrapeJobDetails)$0.001 / job ($1 / 1,000)
company-details (Company Details)Company profile collected once per company$0.001 / company ($1 / 1,000)
company-reviews (Company Review)Each nested review$0.001 / review ($1 / 1,000)

Example costs (Actor start negligible; plan-tier discounts not applied):

RecordsConfigurationEstimated base cost
1,000Jobs only$1.00
1,000Jobs + job details$2.00
1,000Jobs + details + 1 company each + 5 reviews each$8.00

Estimates depend on the verified pricing model and the options selected for the run.

Limitations and responsible data use

  • The Actor collects publicly accessible SEEK Australia data only.
  • Field availability depends on what SEEK renders at run time; salary and company fields can be null.
  • The Actor does not provide historical snapshots unless you store them yourself.
  • Large runs should use residential proxies; without them, coverage may degrade.
  • You are responsible for compliance with SEEK's terms of service, applicable privacy law, and any contractual obligations before using the data.

Dataset questions

What does one dataset item represent?

Usually one SEEK job. Company-URL seeds can write a recordType: "company" item. Reviews never become separate dataset rows; they nest on the job or company record.

Which field should I use as a unique identifier?

jobId for jobs. companyId for company records. url is a reasonable secondary key.

Are fields nullable or conditional?

Yes. Job-detail, company, and review fields exist only when their toggles are enabled. companyId and salary numbers are null when SEEK does not disclose them.

Can I retrieve the records as CSV or JSON?

Yes. The dataset can be exported as JSON, CSV, Excel, XML, or HTML from the Apify Console, and queried through the Dataset API. Nested company and reviews flatten according to the export format.

Does the Actor return historical data?

No. Each run captures listing state at run time. To track new jobs or salary changes, schedule repeated runs and store the outputs yourself.

What counts as a billable result?

Actor start once per run ($0.00005), a job charge per job ($0.001), a job-details charge when details are collected ($0.001), a company-details charge once per unique company ($0.001), and a company-reviews charge per review ($0.001).

Data Scrapers support

Need an additional field, record type, or export workflow? Contact Data Scrapers at stardustspotlight@gmail.com. Include a sample source URL, required fields, expected record volume, and preferred delivery format.