Seek Job Scraper (AU & NZ) - Salary, Company + Full Advert avatar

Seek Job Scraper (AU & NZ) - Salary, Company + Full Advert

Pricing

$1.59 / 1,000 jobs

Go to Apify Store
Seek Job Scraper (AU & NZ) - Salary, Company + Full Advert

Seek Job Scraper (AU & NZ) - Salary, Company + Full Advert

Search Seek Australia and Seek New Zealand by keyword and location for public job adverts: title, company, advertiser, location, work type, salary text, classification, listing date, teaser, bullet points and URL - plus the full advert body on request.

Pricing

$1.59 / 1,000 jobs

Rating

0.0

(0)

Developer

Lantern Lab

Lantern Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Seek Job Scraper (AU & NZ) — Salary, Company + Full Advert

A Lantern Lab Actor. Give it keywords and a location and get Seek's public job adverts back from Seek Australia (seek.com.au) or Seek New Zealand (seek.co.nz) — job id, title, hiring company, advertiser, location, work type and work arrangement, the salary text when the advertiser published one, classification, listing date, teaser and bullet points, plus the job URL. Switch one flag on and every row also carries the full advert body. No Seek login, no cookies, no account of your own.

Price: USD 1.59 per 1,000 job rows. No run-start fee. Empty searches, per-keyword status rows and the run summary are free.

What you get

  • Both ANZ boards. site: "AU" reads au.seek.com, site: "NZ" reads nz.seek.com. They are separate job boards, so a run covers one of them; run the Actor twice to cover both.
  • The salary, when there is one. salaryText is Seek's own wording — "$41.58 – $58.40 ph plus super", "$78 per hour and paid training", "Excellent hourly rates!" — kept verbatim, never parsed into numbers that were not published. An advertiser who published no salary gives salaryText: null, not an empty string and not a guess.
  • The full advert on request. includeDescription: true adds description (the HTML Seek serves) and descriptionText (the same body with the tags removed) — one extra request per job, included in the price.
  • Source id, publish time and collection time kept apart. jobId is Seek's own identifier, listedAt is when Seek listed the advert (publishedAt is the same instant, under the field name the rest of this Actor family uses), listedAtDisplay is the relative phrase Seek prints ("2d ago"), and collectedAt is when this run read it. With includeDescription on, expiresAt and isExpired come too.
  • Deduplicated across the whole run. A job that matches several of your keywords is written once and charged once; the later keyword's status row says how many it skipped as already collected, so that is never mistaken for an empty search.
  • Partial is never reported as empty. A keyword Seek answered with no jobs is an empty result. A keyword cut short by a limit, a refusal or a failed request is partial: true with the reason (upstream_request_cap, charge_limit_reached, blocked, upstream_error, not_collected). The two are different records, and neither is charged.
  • Seek's own result ceiling is reported, not hidden. Seek stops paging a search at 500 results, whatever the page size. When that is what ended a list, the keyword's status row carries resultDepthLimitReached: true and jobsAvailable — Seek's own total — so you can see that there were more and narrow the search.
  • It caps itself. maxUpstreamRequests is a hard ceiling on requests to Seek for the whole run, derived from your input when you leave it empty, so a run is never unbounded.

What it does not do

  • No login-only data. No saved searches, no applicant data, no recruiter contact details behind a login. Only what a logged-out visitor sees on a public job advert.
  • No personal data. The company and advertiser names are the organisations that published the advert. Contact names, private phone numbers and email addresses are not collected.
  • No more than 500 jobs per keyword, because Seek will not page past that. Split a broad keyword by location or by a narrower title to reach the rest.
  • No company profiles, no salary-insight pages, no application submission, no job alerts.
  • No scheduling or monitoring built in; use Apify schedules.

Input

FieldDefaultMeaning
keywordsrequiredOne Seek search keyword per line. Quotes for an exact phrase work. Every keyword is searched separately in the location below.
siteAUAU for seek.com.au, NZ for seek.co.nz.
locationwhole countryA location as Seek names it: "Sydney NSW", "All Melbourne VIC", "Auckland". Empty means All Australia / All New Zealand.
maxJobs100Upper bound on rows per keyword. Seek's own ceiling is 500.
includeDescriptionfalseAlso fetch each job's full advert body. One extra request per job, included in the price.
maxUpstreamRequestsderivedHard ceiling on requests to Seek for the whole run.
proxyConfigurationApify ProxyDatacenter by default, which is what this Actor is measured on. Switch to residential or Australian exit IPs only if searches come back blocked.
{
"keywords": ["registered nurse", "python developer"],
"site": "AU",
"location": "Sydney NSW",
"maxJobs": 100,
"includeDescription": false
}

Output

One row per job, recordType: "job":

{
"recordType": "job",
"jobId": "95420643",
"url": "https://au.seek.com/job/95420643",
"title": "Mid-Level Software Developer",
"companyName": "iasset.com",
"advertiserName": "iasset.com Pty Ltd",
"advertiserId": "27380635",
"location": "Sydney NSW",
"locationCountryCode": "AU",
"locations": ["Sydney NSW"],
"workType": "Full time",
"workTypes": ["Full time"],
"workArrangement": "Remote",
"salaryText": null,
"classification": "Information & Communication Technology",
"classificationId": "6281",
"subClassification": "Developers/Programmers",
"subClassificationId": "6287",
"listedAt": "2026-10-22T00:19:59.000Z",
"publishedAt": "2026-10-22T00:19:59.000Z",
"listedAtDisplay": "2d ago",
"expiresAt": null,
"isExpired": null,
"teaser": "Join iasset.com as a Software Developer! Build innovative cloud-based SaaS solutions using .NET, Azure, React/Angular, and AI-assisted tools.",
"bulletPoints": [
"Flexible, remote-first workplace",
"Birthday Leave!",
"Shape the future of our platform"
],
"description": null,
"descriptionText": null,
"descriptionStatus": "not_requested",
"keyword": "python developer",
"site": "AU",
"searchLocation": "Sydney NSW",
"rank": 1,
"partial": false,
"partialReason": null,
"collectedAt": "2026-10-24T06:12:40.118Z"
}

One free keyword_status row per keyword says what that keyword returned and whether that is all there was:

{
"recordType": "keyword_status",
"keyword": "python developer",
"site": "AU",
"searchLocation": "Sydney NSW",
"resolvedLocation": "Sydney NSW 2000",
"jobsReturned": 100,
"jobsCharged": 100,
"duplicatesSkipped": 0,
"jobsAvailable": 1102,
"resultDepthLimitReached": false,
"descriptionsRequested": 0,
"descriptionsResolved": 0,
"descriptionBy": { "not_requested": 100 },
"partial": false,
"partialReason": null,
"statusText": "Collected 100 job(s) for this keyword; this is everything Seek returned within your limits.",
"collectedAt": "2026-10-24T06:12:40.120Z"
}

The last row of the dataset, also stored under the key RUN_SUMMARY, totals the run: jobs collected and charged, duplicates skipped, empty keywords, partial keywords by reason, advert bodies fetched, requests sent to Seek and why collection stopped.

Limits worth knowing

  • 500 results per search. Seek's own paging ceiling, measured, not assumed: with pageSize 100 the sixth page comes back empty, and with 32 the twenty-fourth does. jobsAvailable tells you how many Seek claimed, so you can see what you are missing.
  • companyName and advertiserName can differ. When a recruitment agency lists on a client's behalf, the card's company and the paying advertiser are not the same organisation. Both are written; neither is inferred from the other.
  • A location Seek cannot match returns zero jobs, not an error. The keyword's status row shows resolvedLocation: null so a typo is visible rather than silent.
  • An advert can expire between the search and the description fetch. Those rows carry description: null with descriptionStatus: "not_found"; the job itself is still collected from the search results.
  • One site per run. AU and NZ are separate boards with separate job ids.

Collection boundaries

Public job adverts only — what any logged-out visitor sees. No login, no cookies, no third-party or purchased accounts. Personal fields are kept to a minimum: organisations are named, individuals are not.