Seek JobStreet Jobsdb Scraper — 8 Countries
Pricing
from $1.50 / 1,000 jobs
Seek JobStreet Jobsdb Scraper — 8 Countries
Scrape jobs from Seek (AU, NZ), JobStreet (SG, MY, PH, ID) and Jobsdb (HK, TH) in one Actor. Structured salary, company and location, optional full description, monitoring mode for new or changed listings. No browser, no login.
Pricing
from $1.50 / 1,000 jobs
Rating
0.0
(0)
Developer
Elena Vance
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 days ago
Last modified
Categories
Share
Scrape job listings from Seek (Australia, New Zealand), JobStreet (Singapore, Malaysia, Philippines, Indonesia) and Jobsdb (Hong Kong, Thailand) in one Actor. Every row uses the same flat shape: title, company, structured salary, location, work type, arrangement and the correct public job URL for that market. Optionally pull the full HTML description. Turn on monitoring mode to emit only new or changed listings on a schedule.
No browser, no login, no residential proxy. Results land in an Apify dataset you can export as JSON, CSV, Excel, XML or HTML, or pull through the API.
From $1.50 per 1,000 jobs. Full descriptions are an opt-in add-on. See Pricing.
Why one Actor for eight sites
Seek, JobStreet and Jobsdb are the same platform under different brands. Other Store Actors usually cover Seek AU/NZ or JobStreet or Jobsdb. This one takes a list of markets and returns the same fields for each, with the right public URL per brand — so a multi-country talent or lead pipeline is one run, not three Actors and three schemas.
What you get
A search for software engineer on Australia (trimmed):
| Field | Example |
|---|---|
| title | Graduate Software Engineer |
| companyName | SEEK |
| salary.label | Be paid $82,000 + super + annual performance bonus |
| salary.min / max / currency | 82000 / 82000 / AUD |
| salary.period / annualMin | yearly / 82000 |
| locations | Melbourne VIC (AU) |
| workTypes | Full time |
| workArrangement | Hybrid |
| listedAt | 2026-09-29T01:40:48Z |
| url | https://www.seek.com.au/job/94933963 |
With Include full description on, the same row also carries
descriptionHtml, expiresAt, isLinkOut and isVerified.
Markets
| Code | Brand | Site |
|---|---|---|
AU | Seek | seek.com.au |
NZ | Seek | seek.co.nz |
SG | JobStreet | jobstreet.com.sg |
MY | JobStreet | my.jobstreet.com |
PH | JobStreet | jobstreet.com.ph |
ID | JobStreet | jobstreet.co.id |
HK | Jobsdb | hk.jobsdb.com |
TH | Jobsdb | th.jobsdb.com |
What makes this useful
- One schema across eight markets. Filter or join on
site/brandwithout renaming columns per country. - Structured salary from free text. Seek only publishes a label. The Actor
parses
min,max,currencyandperiod, and when the period is known also fillsannualMin/annualMax(monthly × 12, weekly × 52, and so on). Currency defaults to the market's (AUD, NZD, SGD, …) when the label has$but no code. Labels with no usable number leave the numeric fields null — the original label is always kept. - Monitoring mode for schedules. First run emits every match as
NEW. Later runs only emit jobs that are new or whose title / listed date changed (UPDATED). State lives in the run's default key-value store, keyed by your search (or by an explicit State key so several schedules stay isolated). - Cheap to run. Plain HTTP, 512 MB default memory, no residential proxy.
Listings are billed only when stored; a failed detail fetch leaves
descriptionHtmlnull and is not charged for the detail event. - Ready-made Store examples. Open one, press Try for free, change the keywords — see Ready-made examples.
Limits you should know
Seek stops returning results after about 500 hits per query, regardless of page size. Narrow with keywords, location or Listed within rather than raising max pages past 10. Broader keywords will not dump the whole board.
Detail fetches that fail leave descriptionHtml null and are not billed. The
run stops cleanly when it reaches your maximum charge.
How to use it
Today's software roles in Australia:
{"sites": ["AU"],"keywords": "software engineer","dateRange": "1","maxItems": 50}
Singapore and Malaysia, with full descriptions:
{"sites": ["SG", "MY"],"keywords": "data analyst","includeDetails": true,"maxItems": 100}
Daily monitor for new nursing jobs in Auckland:
{"sites": ["NZ"],"keywords": "nurse","where": "Auckland","monitoringMode": true,"dateRange": "3"}
Tips
- Keywords are required. Use the same string you would type into the Seek / JobStreet / Jobsdb search box.
maxItemsis across every selected market. Searching AU + NZ withmaxItems: 100returns up to 100 rows in total, not 100 each.- For alerts, prefer monitoring mode + a short
dateRange. That keeps each scheduled run small and only stores what actually changed. - Set a
stateKeyif two schedules share similar keywords but different locations, so their monitoring state does not collide. - Leave proxy configuration alone. The Actor does not need a residential proxy for normal use.
Input
| Field | Default | Notes |
|---|---|---|
sites | ["AU"] | Any of AU NZ SG MY PH ID HK TH |
keywords | — | Required. Job search keywords |
where | — | City / region filter (e.g. "Sydney", "Auckland") |
dateRange | — | 1 / 3 / 7 / 14 / 31 days |
sortBy | relevance | or listedDate |
maxItems | 100 | Hard cap across every selected market |
maxPages | 10 | Per market, up to 50 jobs per page |
includeDetails | false | Paid add-on: full HTML description |
monitoringMode | false | Emit new / changed jobs only |
stateKey | — | Optional name for monitoring state |
emitUnchanged | false | Also emit unchanged rows in monitoring mode |
Output
One row per job listing:
{"id": "94933963","url": "https://www.seek.com.au/job/94933963","site": "AU","brand": "Seek","title": "Graduate Software Engineer","companyName": "SEEK","advertiser": { "id": "…", "name": "SEEK", "isVerified": true },"employer": { "id": "…", "name": "SEEK", "companyUrl": "…" },"locations": [{ "label": "Melbourne VIC", "countryCode": "AU", "areas": ["Melbourne VIC"] }],"workTypes": ["Full time"],"workArrangement": "Hybrid","classifications": [{ "id": "…", "name": "Information & Communication Technology","subId": "…", "subName": "Developers/Programmers" }],"salary": {"label": "Be paid $82,000 + super + annual performance bonus","min": 82000, "max": 82000, "currency": "AUD","period": "yearly", "annualMin": 82000, "annualMax": 82000},"teaser": "Join our graduate program…","bulletPoints": ["Competitive salary", "Hybrid work"],"listedAt": "2026-09-29T01:40:48Z","isFeatured": false,// Present when includeDetails is true and the fetch succeeded:"descriptionHtml": "<div>…</div>","expiresAt": "2026-10-29T01:40:48Z","isExpired": false,"isLinkOut": false,"isVerified": true,// Present in monitoring mode:"changeType": "NEW" // NEW | UPDATED | UNCHANGED}
The dataset Overview view in Console shows market, title, company, salary, work type, arrangement, listed date, URL and change type.
Pricing
Pay per event — you pay only for what is stored.
| Event | When it is charged | Price |
|---|---|---|
| Actor start | once per run | $0.0001 |
| Job | every stored listing | $0.0015 |
| Job detail | listing has descriptionHtml | $0.001 |
Examples:
- 1,000 list rows ≈ $1.50
- 1,000 list rows with full descriptions ≈ $2.50
- A 50-job search without descriptions ≈ $0.08 (including start)
Failed detail fetches and empty searches are not charged for job or detail events. The run stops cleanly when it hits your maximum charge.
Ready-made examples
Open one, press Try for free, and change the input to your own:
- Seek Australia software jobs this week
- JobStreet Singapore & Malaysia jobs
- Seek AU jobs with full description
FAQ
Do I need an account on Seek / JobStreet / Jobsdb?
No. The Actor only collects publicly listed jobs. No login and no API key.
Can I search several countries in one run?
Yes. Pass multiple codes in sites, for example ["SG", "MY", "PH"]. Rows
share one schema; use site or brand to filter afterward.
Why did I get fewer than maxItems rows?
Seek caps each query at about 500 results, and some keywords simply have fewer
listings in the date window you chose. Narrow or broaden keywords, or widen
dateRange.
Why is salary.min null when there is a salary label?
Some labels are qualitative (“Competitive”, “Attractive package”) or mix
benefits without a clear number. The original salary.label is always kept;
numeric fields stay null when nothing reliable can be parsed.
How does monitoring mode decide something changed?
A job is UPDATED when its title or listed date differs from the previous run
for the same search state. Unchanged jobs are skipped unless you turn on
Also emit unchanged jobs.
Is residential proxy required?
No. Normal runs use plain HTTP on low memory. Leave proxy settings at the
default unless you have a specific reason to override them.
How should I use the data?
You are responsible for complying with Seek / JobStreet / Jobsdb terms and
applicable laws (including privacy and recruitment rules) for your use case.