Seek & Jobstreet Jobs Scraper (AU, NZ, MY, SG, ID, PH)
Pricing
$0.40 / 1,000 job listings
Seek & Jobstreet Jobs Scraper (AU, NZ, MY, SG, ID, PH)
Scrape Seek and Jobstreet job ads from the public JSON API: title, company, salary, location, category, work type, description, company profile. No proxy needed. $0.40 per 1,000 jobs.
Pricing
$0.40 / 1,000 job listings
Rating
0.0
(0)
Developer
Prague Data Lab
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Seek & Jobstreet Jobs Scraper — Australia, New Zealand, Malaysia, Singapore and more
Scrape Seek and Jobstreet job ads (Australia, New Zealand, Malaysia, Singapore, Indonesia, Philippines, plus JobsDB Hong Kong and Thailand) and get one clean row per ad: title, company, salary parsed into min, max, currency and period, location, category, work type, work arrangement, full description (text, HTML and Markdown), expiry date and the company profile. $0.40 per 1,000 jobs. No browser, no login, no proxy needed.
Quick start
Minimal input:
{"query": "data engineer","country": "AU","location": "All Sydney NSW","maxResults": 30}
Several searches in one run (every query × country × place; jobs found twice are saved once, and maxResults is shared between the searches):
{"queries": ["data engineer", "data analyst"],"countries": ["AU", "NZ", "MY"],"sortMode": "date","postedWithinDays": "7","workArrangement": "3","maxResults": 300}
Or paste a search URL (or a job URL) from the browser: {"startUrls": ["https://www.seek.com.au/software-engineer-jobs/in-All-Sydney-NSW/full-time/hybrid?daterange=7"], "maxResults": 100}.
Compatible with the input of blackfalcondata/seek-scraper, blackfalcondata/jobstreet-scraper and websift/seek-job-scraper, so you can switch by changing only the Actor ID:
- From the blackfalcondata Actors:
query,country(AU, NZ, MY, SG, ID, PH),location,startUrls,maxResults,maxPages,sortMode,dateRange,workType,workArrangement,classification,subClassification,salaryMin,salaryMax,includeKeywords,excludeKeywords, thekeywordMatch…switches,fromDate,toDate,maxAgeMinutes,includeDetails,descriptionFormat,descriptionMaxLength,compact,excludeEmptyFields. - From websift:
searchTerm,searchUrl,maxResults,sortBy(KeywordRelevance, ListedDate),dateRange(a number of days),country(australia,new zealand,malaysia,singapore,indonesia,philippines,hongkong,thailand),location,radius,salaryType,salaryMin,salaryMax,workTypes(fulltime, parttime, contract, casual),workArrangements(on-site, hybrid, remote),suburbOrCity,state,postCode,includeOneInTitleand the true/false category switches (accounting,accounts-payable,construction-management…: all 423 are mapped to SEEK categories). - Their output field names are kept too (
seekJobId,jobId,id,title,company,advertiser,location,locationCountry,salaryText,salaryMin,salaryMax,salaryCurrency,salaryType,employmentType,workTypes,workArrangement,category,subCategory,bulletPoints,teaser,description,descriptionHtml,descriptionMarkdown,postedDate,listedAt,validThrough,expiresAtUtc,canonicalUrl,jobLink,isFeatured…). - Not supported, ignored with a warning: notifications (Telegram, Slack, Discord, WhatsApp, webhooks), incremental mode, custom filters, applicant counts, salary estimation. Use Apify schedules and integrations instead.
requireContact,requireEmailandrequirePhoneare ignored on purpose: this Actor never extracts e-mail addresses or phone numbers.
Two small differences: the Apify platform checks input types, and the two leaders disagree on dateRange (text for blackfalcondata, a number for websift), so this field is not declared in the form and accepts both. The form has postedWithinDays instead. The websift content object is not reproduced: use descriptionHtml or description.
Sample output row
Real row from a run on 23 October 2026 (long texts shortened here):
{"seekJobId": "95377914","jobId": "95377914","id": "95377914","title": "Technical Lead, Data Engineering (Azure)","company": "Indigenous Business Australia","companyId": "795433","companySlug": "indigenous-business-australia-795433","companyUrl": "https://au.seek.com/companies/indigenous-business-australia-795433","companyLogo": "https://image-service-cdn.seek.com.au/562e590ca9f235a8b04ec2da94f446cc2954db47/f3c5292cec0e05e4272d9bf9146f390d366481d0","companyIndustry": "Non-Profit Organisations","companySize": "101-1,000 employees","companyWebsite": "http://www.iba.gov.au/","companyDescription": "IBA is a commercially focused organisation. Economic independence for Aboriginal and Torres Strait Islander peoples is at the heart of what we do. Our programs …","companyReviewRating": 3.1,"companyReviewCount": 13,"advertiserId": "24876952","advertiser": {"id": "24876952","name": "Indigenous Business Australia","isVerified": true,"isPrivate": false,"registrationDate": "2009-06-03T04:19:56.000Z"},"isVerifiedAdvertiser": true,"isPrivateAdvertiser": false,"location": "Sydney NSW","locations": ["Sydney NSW"],"locationCountry": "AU","salaryText": "$163682 - $191782 p.a.","salaryMin": 163682,"salaryMax": 191782,"salaryCurrency": "AUD","salaryType": "annual","employmentType": "Full time","workTypes": ["Full time"],"workArrangement": "Hybrid","category": "Government & Defence","categoryId": "1210","subCategory": "Government - Federal","subCategoryId": "1409","classifications": [{"categoryId": "1210","category": "Government & Defence","subCategoryId": "1409","subCategory": "Government - Federal"}],"roleId": "Data-Engineering-Lead","bulletPoints": [],"teaser": "Work with an organisation that drives financial inclusion and economic empowerment with Aboriginal and Torres Strait Islander people.","description": "As the Technical Lead, Data Engineering, you will:\n\n- Be responsible for designing scalable, efficient and reliable data pipelines and systems.\n- Work alongside the architecture function to make decisions about choiceof …","descriptionHtml": "<p>As the Technical Lead, Data Engineering, you will:<br> </p><ul><li>Be responsible for designing scalable, efficient and reliable data pipelines and systems.</li><li>Work alongside the architecture function to make dec…","descriptionMarkdown": "As the Technical Lead, Data Engineering, you will:\n\n- Be responsible for designing scalable, efficient and reliable data pipelines and systems.\n- Work alongside the architecture function to make decisions about choiceof …","descriptionLength": 1501,"postedDate": "2026-10-20T06:00:23.933Z","listedAt": "2026-10-20T06:00:23.933Z","validThrough": "2026-11-19T06:00:22.000Z","expiresAtUtc": "2026-11-19T06:00:22.000Z","isFeatured": false,"isExpired": false,"listingStatus": "Active","canonicalUrl": "https://www.seek.com.au/job/95377914","jobLink": "https://www.seek.com.au/job/95377914","site": "seek.com.au","detailFetched": true,"scrapedAt": "2026-10-23T11:17:27.545Z"}
Input
| Field | Type | Description |
|---|---|---|
query | string | Job title, skill or any words from the ad. Several searches: ["data engineer", "data analyst"] (a JSON list) or use queries. Empty = all jobs. searchTerm is accepted too. |
country | string | Which SEEK site to search. The lower-case names are the values used by websift/seek-job-scraper. Several countries: use countries. |
location | string | City, region, suburb or postcode as SEEK writes it. Examples: All Sydney NSW, Melbourne VIC, Auckland, Kuala Lumpur, Singapore. Empty = the whole country. Several places: a JSON list or use locations. |
maxResults | integer | Maximum number of jobs saved in total (you pay per job). 0 = as many as possible (capped at 5,000). SEEK serves at most 550 jobs per search; use several queries, locations or categories for more. maxItems is accepted too. |
queries | array | Several search terms, one search each. Jobs found twice are saved once. |
countries | array | Search several SEEK sites in one run. Added to country. |
locations | array | Several places, one search each (for every query and country). |
startUrls | array | SEEK, Jobstreet or JobsDB search URLs copied from the browser (https://www.seek.com.au/software-jobs/in-All-Sydney-NSW/full-time?daterange=7) or job URLs (https://nz.seek.com/job/12345678). When set, query, country and location are ignored. searchUrl is accepted too. |
maxPages | integer | Safety bound per search, in pages of about 22 jobs (25 pages = the 550 jobs SEEK serves). |
sortMode | string | Most relevant first, or newest first. sortBy (KeywordRelevance, ListedDate) is accepted too. |
postedWithinDays | string | Only jobs posted in the last N days. The leaders' dateRange is accepted too, as text ("7") or as a number (7, any number of days up to 365); it is not declared in this form because the two leaders disagree on its type. |
workType | string | Employment type. workTypes (a list of fulltime, parttime, contract, casual) is accepted too. |
workArrangement | string | On-site, hybrid or remote. workArrangements (a list of on-site, hybrid, remote) is accepted too. |
classification | string | SEEK role family. The true/false category switches of websift/seek-job-scraper (accounting, accounts-payable…) are accepted too. |
subClassification | string | SEEK sub-category id (6286 = Database Development & Administration), name or slug (developers-programmers). Pair it with its category. |
salaryMin | integer | SEEK's own salary filter, in the local currency. Annual on Seek, monthly on Jobstreet and JobsDB (salaryType: annual, monthly or hourly). 0 = no limit. |
salaryMax | integer | Upper end of the salary filter. 0 = no limit. |
includeKeywords | array | Keep a job only if it contains at least one of these words anywhere in the ad. |
excludeKeywords | array | Drop a job if its title, company, teaser, bullet points or description contains any of these words. |
fromDate | string | ISO date or date-time, for example 2026-10-01. Empty = no limit. |
toDate | string | ISO date or date-time. A bare date means that whole day. Empty = no limit. |
maxAgeMinutes | integer | Only jobs posted within this many minutes before the run. 0 = no limit. |
includeDetails | boolean | Read each ad for the full description (text, HTML, Markdown), expiry date and advertiser. Same price either way. |
includeCompanyProfile | boolean | Add industry, size, website, description and review rating when the advertiser has a company profile. Needs full details. |
descriptionFormat | string | all keeps description (text), descriptionHtml and descriptionMarkdown; the others keep only that one. |
descriptionMaxLength | integer | Cut descriptions to this many characters. 0 = keep everything. |
compact | boolean | Keep only the core fields: id, title, company, location, salary, category, work type, date, link. Good for AI agents. |
excludeEmptyFields | boolean | Remove null, empty text and empty list fields from each row. |
proxyConfiguration | object | Not needed: SEEK answers from Apify's datacenter servers. Set a proxy only if your runs get blocked. |
Also accepted, without a field in the form: searchTerm, searchUrl, sortBy, dateRange, workTypes, workArrangements, salaryType (annual, monthly or hourly), radius (km), maxItems, includeOneInTitle, keywordMatchTitle, keywordMatchCompany, keywordMatchDescription, keywordMatchCategory, keywordMatchBulletPoints and the websift category switches.
Output fields
| Field | Description |
|---|---|
seekJobId | SEEK job id (deduplication key). Also in jobId and id. |
jobId | Same as seekJobId (field name of blackfalcondata/seek-scraper). |
id | Same as seekJobId (field name of websift/seek-job-scraper). |
title | Job title. |
company | Company or advertiser name; "Private Advertiser" when the ad hides it. |
companyId | SEEK company profile id (null when the advertiser has no company profile). |
companySlug | Company profile slug, e.g. harvey-norman-432314. |
companyUrl | Company profile page on SEEK, Jobstreet or JobsDB. |
companyLogo | Logo URL of the advertiser. |
companyIndustry | Industry from the company profile. |
companySize | Company size band from the profile, e.g. 1,001-5,000 employees. |
companyWebsite | Company website from the profile. |
companyDescription | Company overview text from the profile. |
companyReviewRating | Average employee review rating (1-5) shown on the company profile. |
companyReviewCount | Number of employee reviews behind the rating. |
advertiserId | SEEK advertiser id (a recruitment agency or the employer itself). |
advertiser | Advertiser of the ad (field shape of websift/seek-job-scraper). |
isVerifiedAdvertiser | SEEK verified advertiser (needs job details). |
isPrivateAdvertiser | The advertiser name is hidden ("Private Advertiser"). |
location | Main location label as SEEK shows it, e.g. Sydney NSW, Kuala Lumpur. |
locations | All locations of the ad. |
locationCountry | Country code of the location (AU, NZ, MY, SG, ID, PH, HK, TH). |
salaryText | Salary text exactly as the ad shows it (null when none). |
salaryMin | Lower end of the salary parsed from salaryText (a single figure sets min and max). |
salaryMax | Upper end of the salary parsed from salaryText. |
salaryCurrency | Currency code (AUD, NZD, MYR, SGD, IDR, PHP, HKD, THB…) of the parsed salary. |
salaryType | Pay period of the parsed salary: annual, monthly, weekly, daily or hourly (null when the ad does not say). |
employmentType | Work type label: Full time, Part time, Contract/Temp, Casual/Vacation. |
workTypes | Work type labels (list form of employmentType). |
workArrangement | On-site, Hybrid or Remote (comma separated when the ad allows several). |
category | Role family (classification), e.g. Information & Communication Technology. |
categoryId | SEEK classification id of the role family. |
subCategory | Sub-category, e.g. Database Development & Administration. |
subCategoryId | SEEK sub-classification id. |
classifications | Every category/sub-category pair of the ad. |
roleId | SEEK role slug, e.g. data-engineer. |
bulletPoints | The three highlight lines the advertiser wrote for the search result. |
teaser | One-sentence summary shown in search results. |
description | Full job description as plain text (needs job details; descriptionFormat all or text). |
descriptionHtml | Full job description as HTML (needs job details; descriptionFormat all or html). |
descriptionMarkdown | Full job description as Markdown (needs job details; descriptionFormat all or markdown). |
descriptionLength | Length of the plain-text description in characters, before any descriptionMaxLength cut. |
postedDate | When the ad was listed, ISO 8601 UTC. Also in listedAt. |
listedAt | Same as postedDate (field name of websift/seek-job-scraper). |
validThrough | When the ad expires, ISO 8601 UTC (needs job details). Also in expiresAtUtc. |
expiresAtUtc | Same as validThrough (field name of websift/seek-job-scraper). |
isFeatured | Promoted (featured) ad. |
isExpired | The ad has expired (needs job details). |
listingStatus | Ad status, e.g. Active (needs job details). |
canonicalUrl | Link to the ad on SEEK, Jobstreet or JobsDB. Also in jobLink. |
jobLink | Same as canonicalUrl (field name of websift/seek-job-scraper). |
site | Site the ad comes from: seek.com.au, nz.seek.com, my.jobstreet.com, sg.jobstreet.com, id.jobstreet.com, ph.jobstreet.com, hk.jobsdb.com, th.jobsdb.com. |
detailFetched | True when the job details (description, expiry, advertiser) were read. |
scrapedAt | When the row was produced, ISO 8601 UTC. |
Fields that come from the job details (description, expiry, advertiser) or from the company profile are null when the details are off or when SEEK has no profile for the advertiser (recruitment agencies and private advertisers usually have none).
Countries
| Country | Code | Site | Brand |
|---|---|---|---|
| Australia | AU | seek.com.au | Seek |
| New Zealand | NZ | nz.seek.com (seek.co.nz redirects there) | Seek |
| Malaysia | MY | my.jobstreet.com | Jobstreet |
| Singapore | SG | sg.jobstreet.com | Jobstreet |
| Indonesia | ID | id.jobstreet.com | Jobstreet |
| Philippines | PH | ph.jobstreet.com | Jobstreet |
| Hong Kong | HK | hk.jobsdb.com | JobsDB |
| Thailand | TH | th.jobsdb.com | JobsDB |
Pricing
$0.0004 per job saved ($0.40 per 1,000), charged as the job event. Job details and the company profile are included. There is no platform-usage charge on top, no start fee and no charge for runs that find nothing. Set a maximum cost on the run and it stops cleanly when the limit is reached.
Limits and notes
- 550 jobs per search. SEEK serves at most 550 results for one search, whatever the total shown. For more, add queries, places, categories or a date filter: searches are cheap and jobs found twice are saved once.
- Places are written as SEEK writes them:
All Sydney NSW,Melbourne VIC,Auckland,Kuala Lumpur,Singapore, a suburb or a postcode. An unknown place finds nothing, and the run says so in its status message. - Salary is parsed from the text of the ad (
$140,000 – $150,000 per year,RM 4,000 – RM 6,000 per month,Rp 13.200.000 – Rp 14.500.000 per month,$900-1000 per day).salaryTextis always the original text;salaryTypestays null when the ad gives no period and the site is not Seek. The salary filter is SEEK's own: annual on Seek, monthly on Jobstreet and JobsDB. - Company data only. The Actor never extracts recruiter names, photos, e-mail addresses or phone numbers, and never asks SEEK for them. The description is the ad text as the advertiser published it, so it can contain a contact line the advertiser wrote.
- Polite by design. One request at a time with a short pause, job details and company profiles batched ten at a time. About 30 requests for 250 jobs.
- Runs on a small machine (256 to 512 MB). In local tests 30 jobs took about 9 seconds, 250 jobs about 20 seconds and 549 jobs about 40 seconds. The prefill input returns 30 jobs.