SEEK Jobs Scraper - Australia & New Zealand Job Listings avatar

SEEK Jobs Scraper - Australia & New Zealand Job Listings

Pricing

from $0.70 / 1,000 results

Go to Apify Store
SEEK Jobs Scraper - Australia & New Zealand Job Listings

SEEK Jobs Scraper - Australia & New Zealand Job Listings

From $0.7/1K. Scrape SEEK.com.au and SEEK.co.nz jobs by keyword, location, or filters. Extract full descriptions, companies, salaries, locations, classifications, listing dates, and more across Australia and New Zealand.

Pricing

from $0.70 / 1,000 results

Rating

5.0

(1)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

2

Bookmarked

174

Total users

25

Monthly active users

3 days ago

Last modified

Share

SEEK Scraper: Job Listings, Salaries & Company Profiles

SEEK Scraper turns SEEK, the largest job site in Australia and New Zealand, into structured job data. Search by keyword, location and filters, or paste SEEK search URLs, mixing seek.com.au and seek.co.nz links in one run. Every job returns the employer, location, classification and a parsed salary range, and, when enabled, the full description, ad bullet points, published contacts and the employer's company profile. Export to JSON, CSV or Excel, or read the results through the API.

Why This Scraper?

  • Two ways to search. Build a query from keywords, location and filters, or paste one or more SEEK search URLs and skip the filter fields entirely.
  • AU and NZ in one run. URL mode auto-detects the market per link, so seek.com.au and seek.co.nz URLs can be mixed in the same input.
  • Full detail on demand. Turn on Fetch full job description for the HTML and plain text body, ad bullet points, published contacts and the employer's company profile.
  • Parsed, not just displayed, salary. A minimum, maximum, period and currency are parsed out of SEEK's free text salary label.
  • Employer profiles included. Industry, size, website, specialities, star rating, review count, perks and awards for the hiring company.
  • Wide filter set. Classification, work type, work arrangement, salary range and listing date, or the full SEEK URL grammar in URL mode.
  • Built for schedules. Incremental mode returns only new, updated and reappeared jobs on recurring runs, and a genuine connection failure fails loudly instead of returning an empty dataset.

Use Cases

  • Job board aggregators: feed AU and NZ listings with full detail into your own site or app.
  • Recruitment and sourcing: search by classification, work type and salary band to find roles matching a candidate profile.
  • Compensation benchmarking: collect parsed salary ranges across a classification or location to build a pay band dataset.
  • Employer research: pull company profiles, ratings and perks alongside their open roles.
  • Market monitoring: schedule a search with Incremental mode and get only new or changed listings.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
id / urljob id and its canonical SEEK URL
applyLink / shareLinkthe apply URL and a tracked share link
title / teaser / abstractjob title, one-line summary, and a short job summary (when enabled)
companyName / companyId / companyUrl / companyOpenJobsemployer name, id, profile URL, and the SEEK page listing that employer's open jobs (paste it back into URL mode to scrape them)
advertiserName / advertiserIdthe advertiser (recruiter or employer) placing the ad
locationLabel / jobLocationInfo / locationSuburb / locationState / locationPostcodedisplay location, SEO hierarchy, country code, and (when enabled) suburb, state and postcode, e.g. "Sydney" / "New South Wales" / "2000"
classifications / classificationInfoclassification and subclassification, ids and labels
workTypes / workArrangementLabels["Full time"] / ["Hybrid"]
salaryLabel / salaryMin / salaryMax / salaryPeriod / salaryCurrency"$120,000 - $140,000 per year + super", parsed into 120000 / 140000 / "annual" / "AUD". The currency is the one SEEK records on the ad, else one written in the pay text (NZD 30 - 35 per hour, A$85000), else the currency of the SEEK site the ad is on (AUD on seek.com.au, NZD on seek.co.nz). It is empty when the ad states no figure.
listingDate / listingDateDisplay"2026-04-17T01:53:13Z" / "2d ago"
expiresAt / isExpired / status / isVerified / isFeatured / displayType"2026-05-14T14:00:00.000Z" / false / "Active" / true / true / "promoted" (expiresAt, isExpired and status when enabled)
bulletPoints["3 sample ad highlights"] (when enabled)
content / contentText / contentMarkdownfull description as HTML, plain text and (when Description format is Markdown or All) Markdown (when enabled)
urlsFromBody / socialProfilesweb links written in the ad, and the ones that are social profiles (LinkedIn, Facebook, Instagram, X and more) (when enabled)
companyOverview / companyIndustry / companySize / companyWebsite / companyLogo / companyCoverImageemployer profile, logo and cover image URL (companyCoverImage when enabled)
companyRating / companyReviewCount / companySalaryRating / companyPerks / companyAwards3.3 / 81 / 86, plus perks and awards (when enabled)
phoneNumbers / emailscontacts published in the ad (when enabled)
isLinkOut / jobVideoUrlapplies on the employer's own site, and a job video URL, when present (when enabled)
numApplicants / applicantCountLabel / applicantVolumeLabel / resumePercentage / coverLetterPercentageapplicant count, label and volume, plus the share of applicants who attached a resume / cover letter: 71 / "71 applicants" / "Medium application volume" / 99 / 46 (when enabled; empty on very fresh ads)
employerQuestions / hasRoleRequirements / isPrivateAdvertiserthe employer's screening questions, whether the ad has any, and true when the employer is hidden as "Private Advertiser" (when enabled)
recruiterProfileon agency ads with a SEEK recruiter profile: name, photo, profile URL, and (when enabled) rating, review count, placements, phone, agency name and website, location, specialisations
isRepost / repostOfIdtrue and the earlier job id when the same advertiser re-listed the same title in the same place
searchQuery / searchUrlthe keywords and the SEEK search page that found the job, handy when one run combines several searches
detailFetched / scrapedAtwhether the full detail actually arrived on this row, and "2026-04-20T00:40:05.202399+00:00"

content through companyAwards, plus expiresAt, isExpired, status, isVerified, isLinkOut, jobVideoUrl and companyCoverImage, are filled only when Fetch full job description is on. detailFetched shows per record whether that detail arrived.

How to Use

  1. Pick a mode. Leave it on Auto (the default) and either fill in region, keywords, location and filters, or edit the SEEK search URLs list to paste your own links. Choose Search or URL to force one way.
  2. Turn on Fetch full job description for the body, contacts and company profile, or leave it off for a lighter, faster run.
  3. Set Max items to return and Max run time to control run size and cost.
  4. Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.

Search by keywords and location (AU):

{
"region": "AU",
"keywords": "software engineer",
"location": "Sydney",
"includeFullDescription": true,
"maxItems": 200
}

Filter by classification, work type and salary:

{
"keywords": "data engineer",
"location": "All Melbourne VIC",
"classification": ["6281"],
"workType": ["242"],
"salaryType": "annual",
"salaryMin": 120000,
"salaryMax": 200000,
"daterange": 7,
"maxItems": 300
}

Mixed AU and NZ search URLs:

{
"mode": "url",
"urls": [
{ "url": "https://www.seek.com.au/nurse-jobs/in-Sydney" },
{ "url": "https://www.seek.co.nz/software-engineer-jobs/in-Auckland" }
],
"includeFullDescription": false,
"maxItems": 500
}

Choosing a mode

ModeWhat runs
auto (default)URL mode if you changed the SEEK search URLs list, otherwise the search fields (region, keywords, location and filters), exactly as before.
searchAlways the search fields. Any pasted links are ignored, and the log says so.
urlAlways the links in the list. Every search field is ignored.

The SEEK search URLs list ships pre-filled with one example of each supported link shape (the table below, first 11 rows). That has one visible effect: if you choose URL mode and do not edit the list, the run scrapes one example of each of those 11 link shapes (set a low Max items to return for a quick look). In auto mode the untouched list does nothing (this holds for the sample list and for the longer pre-filled form list, which adds legacy-host and variant links), so an API call that sends only keywords and a location behaves exactly as it always did. A list that is different from the shipped one in any way, even in order, counts as yours and switches auto to URL mode. If URL mode is on and the list is empty, the run stops with a message saying so. When auto picks URL mode because you edited the list while you also set keywords, a company name or a non-default location, the run log says those search fields are ignored.

The shipped job links (/job/<id> and ?jobId=) point at one live ad. Ads close after about a month; a closed one gets a warning for that link only (could not be fetched (expired, removed, or an invalid id)), the other links still run, and the run does not fail on it.

Every supported URL shape

Paste any of these into URL mode; region (AU/NZ) is auto-detected per URL. The first 11 rows are the shipped sample list. Hosts: au.seek.com and nz.seek.com are SEEK's current hosts; www.seek.com.au, seek.com.au, m.seek.com.au and www.seek.co.nz links are read the same way. New Zealand searches and job lookups go straight to nz.seek.com, SEEK's current NZ host, which saves a redirect on every request.

ShapeExampleWhat it does
Classification + sub + location (3-segment)https://au.seek.com/jobs-in-information-communication-technology/engineering-software/in-All-Sydney-NSWclassification + subclassification + location
Keyword + location + work-type (3-segment)https://au.seek.com/software-engineer-jobs/in-All-Sydney-NSW/full-timekeyword + location + work type/arrangement
Keyword + classification combo page (NZ)https://nz.seek.com/accountant-jobs-in-accounting/in-All-Aucklandkeyword + classification + location
Location onlyhttps://au.seek.com/jobs/in-All-Sydney-NSWevery job in that location
Bare city (NZ)https://nz.seek.com/jobs/in-WellingtonSEEK's own page for this link is the whole-city page All Wellington, so that is what is searched (about 2,300 jobs, where the suburb alone has about 1,800)
?advertiserid=https://au.seek.com/jobs?advertiserid=3490876jobs from one employer only
?where=https://au.seek.com/jobs?where=All-Perth-WAlocation, as a query param instead of a path segment
Keyword search, paginatedhttps://au.seek.com/software-engineer-jobs?page=2starts at page 2 and walks forward; an incremental run never marks jobs EXPIRED from it, because pages 1 and earlier were not read
Direct job linkhttps://au.seek.com/job/95066648fetches that ONE job by id, never a text search
Job share linkhttps://au.seek.com/jobs?jobId=95066648same: SEEK shows an unfiltered search for this link, so the id is read from it and that one job is fetched
Company pagehttps://www.seek.com.au/companies/seek-432306 (/company/<slug> also matches)resolved to that employer's advertiserid search by reading it off the company's own current job ad (never guessed)
Keyword search pagehttps://www.seek.com.au/software-engineer-jobs/in-Sydneykeyword + location
Classification landing pagehttps://www.seek.com.au/jobs-in-information-communication-technologyclassification
Classification + sub + location + work-type (4-segment)https://www.seek.com.au/jobs-in-accounting/accounts-payable/in-All-Melbourne-VIC/full-timeclassification + subclassification + location + work type
Location + work-type + arrangement (4-segment)https://www.seek.com.au/jobs/in-All-Melbourne-VIC/full-time/hybridlocation + work type + work arrangement
Location with a commahttps://nz.seek.com/jobs/in-Hutt-Central,-Wellingtonsuburb + city location, as SEEK's own suburb links write it
Jobs at one companyhttps://www.seek.com.au/Turner-&-Townsend-jobs/at-this-companythat employer's jobs only (SEEK's exact-employer filter); the same link the companyOpenJobs output field carries
Employer linkhttps://www.seek.com.au/National-Civil-&-Foundations-Pty-Ltd-jobsemployer name as keywords, punctuation kept (+ in a link is a literal hyphen, so Coca+Cola reads as Coca-Cola)
?distance=https://www.seek.com.au/nurse-jobs/in-Parramatta-NSW-2150?distance=10search radius in km around a suburb (1-100)
Tracking paramsany shape above + ?utm_source=...&gclid=...ignored, never changes the result
Older hostshttps://www.seek.com.au/jobs/in-All-Sydney-NSW, https://seek.com.au/jobs/in-All-Adelaide-SA, https://m.seek.com.au/jobs/in-All-Hobart-TAS, https://www.seek.co.nz/jobs/in-Wellingtonsame results as the au.seek.com / nz.seek.com form of the link

A bare place name in a link (/jobs/in-Wellington, /jobs/in-Sydney) is searched the way SEEK's own site shows it: the site redirects the link to the whole-area page (All Wellington, All Sydney NSW), and the log line location 'Wellington' is SEEK's whole-area page 'All Wellington' says when that happened. A place SEEK does not know (a typo) is reported by name instead of returning a silent empty run.

A /companies/<slug>-<id> link is SEEK's company-profile/review page, not a job search, and its own id is a different SEEK id from the job-search advertiserid; there is no reliable way to convert one into the other from the URL text alone. The actor instead fetches the company page live, reads a job id off one of its own current ads, and resolves that job's advertiserid through the same job-detail lookup used for a direct job link, then searches that employer's jobs. If the company has no job currently live on its profile page (so there is nothing to read an id off), that single URL is skipped with a loud per-URL warning in the run log, never a silent guess; paste one of that company's own job links instead, or filter by employer name in Keywords.

Any other URL (the bare home page, the companies or recruiters directory, career advice), or an unrecognized path/segment, is skipped with a specific per-URL warning in the run log, never a silent zero or a misread "every job" search.

Remote roles paid hourly, monitored on a schedule:

{
"keywords": "registered nurse",
"workArrangement": ["3"],
"salaryType": "hourly",
"salaryMin": 40,
"salaryMax": 80,
"incrementalMode": true,
"stateKey": "remote-nurse-au"
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/seek-scraper").call(run_input={
"region": "AU",
"keywords": "software engineer",
"location": "Sydney",
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
print(job["title"], job["companyName"], job["salaryLabel"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/seek-scraper').call({
region: 'AU',
keywords: 'software engineer',
location: 'Sydney',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Slack, email, Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Resume and recurring updates

  • Resume (resumeFromRunId) continues one specific interrupted run: paste its run or dataset ID and the actor skips every job already collected there, returning only what's still missing.
  • Incremental mode (incrementalMode) is for a search you run on a schedule. Each job is classified NEW, UPDATED (with changedFields), UNCHANGED (suppressed and not billed unless emitUnchanged is on), REAPPEARED, or EXPIRED (only after a run that scanned every page of every search, and only with emitExpired). stateKey names or shares the stored baseline. UPDATED means a real change to the job: any output field differs from the saved copy (title, description, salary, location, work type, classification, advertiser, company rating or review count, expiry or status, the listing date itself), and changedFields names which. These never cause UPDATED on their own: scrapedAt, the relative "N ago" times (listingDateDisplay, postedTime), detailFetched, the repost flags (isRepost, repostOfId), the applicant numbers (numApplicants, applicantCountLabel, applicantVolumeLabel, resumePercentage, coverLetterPercentage) companyOpenJobs and salaryCurrency (both are derived from fields that are compared); add more with ignoreFieldsForChanges. If the full-description fetch fails for a job on one run, its description and company details are carried over from the saved copy instead of reading as a change. A capped, filtered or page-2-onward run never marks jobs EXPIRED. Incremental rows also carry firstSeenAt, lastSeenAt and previousSeenAt (when the search last saw the job before this run). With incremental mode off, output is exactly as before.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each job, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Input Parameters

ParameterTypeDefaultDescription
modestringautoauto (URL mode if you edited the URL list, otherwise search), search (ignore pasted links) or url (scrape the list, ignore the search fields).
regionstringAUAU (seek.com.au) or NZ (seek.co.nz). Auto-detected per URL in URL mode.
keywordsstring(none)Job title or keywords. Leave empty to match every job in the location.
keywordsListarray(none)More keyword searches, one search each, merged and de-duplicated under one maxItems cap.
companyNamestring(none)Only jobs advertised by this employer, using SEEK's own exact-employer filter (any case), e.g. Turner & Townsend. Combines with keywords and location.
locationstringAll-AustraliaSearch location as a plain name (suburb, city, area, state or postcode), for example Sydney, All Melbourne VIC, Parramatta NSW 2150, All-Australia. The log shows which SEEK location it matched; a name SEEK does not recognise is reported by name.
locationsListarray(none)More locations, one search each (every keyword in every location). Replaces location while it is on its default.
radiusinteger(none)Search radius in km (1-100) around a suburb or city location. SEEK's default is 50 km.
classificationarray[]Top-level classifications. Leave empty for all.
subclassificationarray[]Specific roles inside a classification, picked by name (e.g. "Information & Communication Technology › Developers/Programmers").
workTypearray[]Work types: full time, part time, contract or temp, casual or vacation.
workArrangementarray[]Where the job is done: on-site, hybrid, or remote.
salaryTypestringannualUnit for salaryMin/salaryMax: annual, monthly or hourly.
salaryMininteger(none)Minimum salary in the chosen unit.
salaryMaxinteger(none)Maximum salary in the chosen unit.
daterangeinteger(none)Listed within N days. Must be one of 1, 3, 7, 14, 31.
sortmodestringListedDateNewest first (ListedDate) or most relevant (KeywordRelevance).
urlsarrayone sample link per supported shape (11)SEEK links for URL mode. Used when mode is url, or auto once you edit the list; the search fields are then ignored. Left as shipped and in URL mode, the run scrapes one example of each shape.
includeKeywordsarray(none)Post-filter: keep only jobs mentioning at least one of these words (whole words, any case) in the title, company, teaser, bullet points or, when full description is on, the full description.
excludeKeywordsarray(none)Post-filter: drop jobs mentioning any of these words, checked against the same text as includeKeywords.
keywordMatchFieldsarrayall but categoryWhere the two keyword filters look: title, company, description, bulletPoints, category. Pick title alone to match job titles only.
fromDatestring(none)Post-filter: keep only jobs listed on or after this date or time, e.g. 2026-10-01 or 2026-10-01T09:00:00+10:00.
toDatestring(none)Post-filter: keep only jobs listed on or before this date or time. A date on its own includes that whole day.
maxAgeMinutesinteger(none)Post-filter: only jobs listed in the last N minutes.
minApplicantsinteger(none)Post-filter: keep only jobs with at least this many applicants. Turns on includeFullDescription for the run (billed per pushed job as detail enrichment); jobs with no applicant count yet are removed.
maxApplicantsinteger(none)Post-filter: keep only jobs with at most this many applicants. Like minApplicants, turns on full job details and removes jobs with no applicant count.
requireContactstringoffPost-filter: email, phone, either or both. Turns full job details on.
skipRepostsbooleanfalseDrop jobs flagged isRepost.
customFiltersarray(none)Post-filter rules on output fields, e.g. [{"field": "salaryMin", "op": "gte", "value": 120000}]. Ops: includes, notIncludes, equals, notEquals, gt, gte, lt, lte; a dotted path like recruiterProfile.rating works. An unknown field or op fails the run up front. A rule on a field that only comes with the full description (e.g. companyRating) turns full job details on.
includeFullDescriptionbooleantrueFetch each job's full detail: description, ad bullet points, contacts and the employer's company profile.
descriptionFormatstringhtml_texthtml_text (HTML + plain text), all (adds Markdown), html, text or markdown only.
descriptionMaxLengthinteger0Cut the plain-text and Markdown description to N characters (0 = no limit). The HTML copy is never cut.
compactbooleanfalseReturn only the core fields an AI agent or spreadsheet needs.
excludeEmptyFieldsbooleanfalseLeave out fields with no value on a row.
maxItemsinteger20Stop after this many jobs, across all URLs and pages (0 = unlimited).
maxTimeSecinteger0Global wall clock cap in seconds (0 = no limit).
resumeFromRunIdstring(none)Continue one interrupted run.
incrementalModebooleanfalseReturn only new, updated and reappeared jobs on recurring runs.
stateKeystring(none)Name or share an incremental-mode baseline.
emitUnchangedbooleanfalseAlso return (and bill) unchanged jobs.
emitExpiredbooleanfalseAlso return (and bill) expired jobs.
ignoreFieldsForChangesarray[]Incremental mode only: field names (or dotted paths, e.g. companyProfileRaw.reviewsSummary.overallRating.value) to exclude from UPDATED change detection, in addition to the built-in handling. The field stays in the output row either way. Applicant numbers, the repost flags and companyOpenJobs (a link built from companyName) never trigger UPDATED on their own.
proxyConfigurationobjectApify ProxyConnection settings. Uses Apify Proxy by default.
mcpConnectorsarray(none)Optional: send a summary of each job to apps you authorized under Integrations.
notionParentPageUrlstring(none)Notion connector only: page under which job pages are created.
maxNotifyListingsinteger50Cap on items written to each connector per run.

Post-filters run after a job is found and before it is saved, in both search and URL mode. A job they remove is never pushed and never charged. The run log ends with a count of removed jobs per filter.

Output Example

Sample shape: values are illustrative placeholders, not from a live record.

The dataset's Overview tab shows one row per job with the key fields above; switch to Job Detail, Company Profile, Salary, Applicant Insights, Recruiter Profile or Changes (Incremental mode) for a focused view of just those fields.

One job row (full description on):

{
"id": "80123456",
"url": "https://www.seek.com.au/job/80123456",
"applyLink": "https://www.seek.com.au/job/80123456/apply",
"title": "Software Engineer",
"teaser": "Join a growing engineering team building customer-facing products.",
"companyName": "Sample Company",
"companyId": "123456",
"companyUrl": "https://www.seek.com.au/companies/sample-company-123456",
"advertiserName": "Sample Company",
"advertiserId": "987654",
"locationLabel": "Sydney, NSW",
"classifications": [{ "id": "6281", "label": "Information & Communication Technology", "subId": "6290", "subLabel": "Developers/Programmers" }],
"workTypes": ["Full time"],
"workArrangementLabels": ["Hybrid"],
"salaryLabel": "$120,000 - $140,000 per year + super",
"salaryMin": 120000,
"salaryMax": 140000,
"salaryPeriod": "annual",
"salaryCurrency": "AUD",
"listingDate": "2026-04-17T01:53:13Z",
"listingDateDisplay": "2d ago",
"expiresAt": "2026-05-14T14:00:00.000Z",
"isExpired": false,
"status": "Active",
"isVerified": true,
"isFeatured": true,
"displayType": "promoted",
"bulletPoints": ["Hybrid working", "Career progression", "Modern tech stack"],
"companyOverview": "Sample Company builds software for retail and logistics customers across Australia.",
"companyIndustry": "Information Technology",
"companySize": "201-500 employees",
"companyWebsite": "https://www.example-employer.com.au/",
"companyRating": 3.3,
"companyReviewCount": 81,
"companyPerks": ["Flexible hours", "Learning budget"],
"companyLogo": "https://image-service-cdn.seek.com.au/sample-logo",
"phoneNumbers": ["0491 570 156"],
"emails": ["recruiter@example.com"],
"isLinkOut": false,
"detailFetched": true,
"scrapedAt": "2026-04-20T00:40:05.202399+00:00"
}

Plan Requirement

The default proxy setting works without any action on your side: SEEK's current hosts (au.seek.com, nz.seek.com) answer the actor's datacenter connection with normal content. SEEK's older hosts (www.seek.com.au, seek.com.au, m.seek.com.au, www.seek.co.nz) can answer a datacenter connection with a "verify you are human" page instead of job data; the actor treats such a page as a refusal on that connection, never as an empty search, and retries on another connection.

If your account cannot use Apify Proxy, the actor moves to a backup connection and logs this warning:

The selected connection is unavailable to this run. Apify free plans do not include residential proxies. Continuing on a backup connection; some pages may still be unavailable. For residential access, upgrade at https://apify.com/pricing or supply your own proxy URLs.

When a page is then served over the backup connection the log says Served over the backup connection (the default connection was unavailable). Free plans have no residential proxy, so a free-plan run relies on the backup connection and can read fewer pages on a large run. Setting apifyProxyGroups to ["RESIDENTIAL"] under Connection & proxy gives more headroom on plans that include residential proxies.

FAQ

How much does it cost?

Pay per event. Prices per event by Apify plan tier (the rates currently live on the Pricing tab):

EventFreeBronzeSilverGold
Actor start (once per run)$0.08$0.07$0.06$0.05
Result (each job returned)$0.0015$0.0012$0.0009$0.0007
Job detail enrichment (each job returned with its full description, when Fetch full job description is on)$0.0008$0.0007$0.0006$0.0005

Use Max items to return to cap the cost of any run, or turn the description off to skip the enrichment charge. Jobs removed by a post-filter, and unchanged jobs in Incremental mode, are not charged.

This actor collects only publicly available job listings. You are responsible for how you use it: follow SEEK's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Job facts are generally public, but employer logos, cover images and branding may be subject to third-party rights.

Can I get only new or changed jobs on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated and reappeared jobs, and unchanged ones are not billed unless you turn on emitUnchanged.

Why does URL mode ignore my filter fields?

URL mode reads its filters from each pasted URL's path and query string, so the keyword, location, classification and other filter fields above are ignored to avoid conflicting instructions. The run log lists exactly what was dropped. To use the filter fields instead, set Mode to Search.

SEEK itself serves at most 25 pages (about 550 jobs) of any single search, however many jobs match. When a search matches more than that, the run log says so with the match count. To cover everything, split the search: add Locations (locationsList), Keywords (keywordsList), a classification or sub-classification, a work type or a date range, or paste several URLs. Incremental mode never marks jobs EXPIRED after a search that hit this ceiling, because the jobs outside the window were not looked at.

Does it cover Singapore, Hong Kong, Malaysia, Indonesia, the Philippines or Thailand?

No. This actor covers SEEK Australia and New Zealand. SEEK's other markets run on the JobStreet and Jobsdb sites; see the JobStreet scraper in the related-scrapers block below.

Does it estimate salaries when the ad has none?

No. SEEK publishes the pay an advertiser wrote, and its own salary estimate is only shown to signed-in job seekers, so there is nothing to read for an anonymous visitor. salaryLabel, salaryMin, salaryMax, salaryPeriod and salaryCurrency hold exactly what the ad states.

Why did my run fail instead of returning an empty dataset?

If nothing could be read because the connection kept failing, rather than SEEK genuinely having no matches, the run fails loudly so "no jobs found" is never confused with "nothing could be read". The message tells you which case it was:

  • The proxy connection was refused for this account, so no page could be read. Your Apify plan does not include proxy access; a paid plan is required: https://apify.com/pricing. If you entered your own proxy URLs, check that their credentials are valid. The connection was refused outright.
  • No results: residential proxies are unavailable on this run (Apify free plans do not include them), and the backup connection could not load the requested SEEK pages. Upgrade at https://apify.com/pricing or supply your own proxy URLs, then try again. A free-plan run whose backup connection opened but SEEK never served a usable page.
  • Could not load any results page (the requests failed), so nothing was collected. This is a connection problem, not an empty search. Please try again later. Any other run where no page loaded.

If only some searches could be read, you still get what was found. A search that reaches the end of SEEK's own results with zero matches still finishes normally with an empty dataset. If the location you typed is not one SEEK recognises (a typo such as Sydnee), the log and the run's status message name it, so check the spelling or use the name as SEEK's own "Where" box shows it.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable. For agent pipelines, turn on Compact output and set Description format to Markdown (optionally with Max description length) to get small, readable rows.

🔗 Want more SEEK data?

Pair this actor with these related scrapers from the same team:

💼 SEEK Company Reviews
From $1/1K. Scrape SEEK Australia and New Zealand company profiles and employee reviews...
💼 Monster Jobs Scraper
Scrape Monster.com job listings from search and direct job URLs. Extract full...
💼 Jora Jobs Scraper
Scrape Jora.com job listings across supported countries by keyword, filters, or URL...
💼 JobStreet Scraper
From $1/1K. Scrape JobStreet listings across Malaysia, Singapore, Indonesia, and the...
💼 SimplyHired
From $1/1K. Pull active SimplyHired jobs across the US, UK, Canada, Australia, Ireland...
📇 JobStreet
From $1/1K. Pull JobStreet company profiles and employee reviews across Malaysia...

👉 Browse all abotapi scrapers

💬 Support & custom scrapers

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com or message Telegram @abotapi.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.