Seek.com.au Jobs Scraper avatar

Seek.com.au Jobs Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Seek.com.au Jobs Scraper

Seek.com.au Jobs Scraper

Scrape Seek.com.au job listings with titles, companies, locations, salaries, work arrangements, and full descriptions. HTTP-only, no login required.

Pricing

from $1.00 / 1,000 results

Rating

5.0

(7)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

8

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Scrape jobs from Seek.com.au — titles, companies, locations, salaries, work types, arrangements, classifications, and full descriptions. HTTP-only; no login, no cookies, no proxy required.

Output (per job)

  • type = job_seek
  • id, url, jobLink (alias of url)
  • title, company, companyLogo
  • location = { city, state, postCode, country }
  • locationDescription — human-readable label (e.g. "Mulgrave, Melbourne VIC")
  • locationArea — Seek tracking area (e.g. "Eastern Suburbs")
  • broaderLocationName — parent region (e.g. "Melbourne")
  • workType — e.g. "Full Time", "Contract/Temp"
  • workTypeLabels — raw enum list (e.g. ["FULL_TIME"])
  • workArrangement — display text (e.g. "On-site", "Hybrid", "Remote")
  • workArrangementTypes — enum list (e.g. ["ONSITE"])
  • salary, salaryDetails = { min, max, currency, type }
  • postedAt, postedAtLabel (e.g. "2d ago"), expiresAt
  • classification, subClassification
  • normalisedRoleTitle, normalisedOrganisationName
  • descriptionHtml, descriptionText
  • teaser — short 1-line summary
  • bulletPoints (list)
  • questionnaire (list of screening questions, when present)
  • recruiterName, recruiterAgency, recruiterProfile
  • advertiserId, advertiserName, advertiserVerified
  • isPrivateAdvertiser (true when advertiser posts without a company identity)
  • isLinkOut (true = external direct-apply flow)
  • isVerified, isExpired, status, sourceZone
  • displayType, isFeatured, isPremium, isStandout, isBranded (listing promo flags)
  • applyUrl, applyLink (alias), directApplyUrl (when external)
  • phoneNumber (when recruiter provides one)
  • videoUrl, videoPosition (when job includes an advertiser video)
  • branding = { logoUrl, coverImageUrl, thumbnailCoverImageUrl, id }
  • companyId, companySlug, companyIndustry, companySize, companyWebsite
  • companyDescription, companyRating, companyReviewCount, companyPerks
  • companyProfile (raw nested profile object, when returned)
  • emails, phoneNumbers (extracted from description text)
  • scrapedAt

If a search returns zero matching jobs, a single job_seek_blocked sentinel record is emitted.

Input

FieldTypeDescription
searchUrlsstring[]Seek search or job URLs. Prefill: https://www.seek.com.au/python-jobs.
searchTermstringKeywords used to build a search URL when searchUrls are missing.
locationstringOptional location, e.g. "Sydney NSW". Combined with searchTerm.
workTypesstring[]Filter by work type (Full Time, Part Time, Contract/Temp, Casual/Vacation).
workArrangementsstring[]Filter by work arrangement (On-site, Hybrid, Remote).
dateRangeenumFilter by posted date (any, 1, 3, 7, 14, 30 days).
salaryMin / salaryMaxintegerFilter by parsed salary range.
sortByenumKeywordRelevance or ListedDate.
maxItemsintegerMax jobs per run. Default 3.
scrapeJobDetailsbooleanFetch each job's detail page for the full description. Default true.

How it works

  1. Fetch each searchUrls entry (or build one from searchTerm + location + sortBy).
  2. Parse the inline window.SEEK_REDUX_DATA JSON blob and read results.results.jobs[] — Seek ships the full job list as embedded JSON (no browser, no GraphQL auth, no pagination needed for the first page).
  3. For each job, fetch https://www.seek.com.au/job/<id> to get the full description and apply link.
  4. Apply client-side filters (workTypes, workArrangements, dateRange, salaryMin, salaryMax) before emitting each row.

FAQ

Do I need a proxy? No. Seek serves clean HTML to datacenter IPs.

Do I need login / cookies? No.

Why is the sentinel emitted? When the given URL / filters match no jobs, we still emit one record so downstream pipelines never see an empty output.

Are salaries always populated? No — Seek advertisers often omit salary. When it's missing the scraper simply doesn't include the salary / salaryDetails keys (no nulls).