Seek JobStreet Jobsdb Scraper — 8 Countries avatar

Seek JobStreet Jobsdb Scraper — 8 Countries

Pricing

from $1.50 / 1,000 jobs

Go to Apify Store
Seek JobStreet Jobsdb Scraper — 8 Countries

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

Elena Vance

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 days ago

Last modified

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):

FieldExample
titleGraduate Software Engineer
companyNameSEEK
salary.labelBe paid $82,000 + super + annual performance bonus
salary.min / max / currency82000 / 82000 / AUD
salary.period / annualMinyearly / 82000
locationsMelbourne VIC (AU)
workTypesFull time
workArrangementHybrid
listedAt2026-09-29T01:40:48Z
urlhttps://www.seek.com.au/job/94933963

With Include full description on, the same row also carries descriptionHtml, expiresAt, isLinkOut and isVerified.

Markets

CodeBrandSite
AUSeekseek.com.au
NZSeekseek.co.nz
SGJobStreetjobstreet.com.sg
MYJobStreetmy.jobstreet.com
PHJobStreetjobstreet.com.ph
IDJobStreetjobstreet.co.id
HKJobsdbhk.jobsdb.com
THJobsdbth.jobsdb.com

What makes this useful

  • One schema across eight markets. Filter or join on site / brand without renaming columns per country.
  • Structured salary from free text. Seek only publishes a label. The Actor parses min, max, currency and period, and when the period is known also fills annualMin / 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 descriptionHtml null 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.
  • maxItems is across every selected market. Searching AU + NZ with maxItems: 100 returns 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 stateKey if 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

FieldDefaultNotes
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
sortByrelevanceor listedDate
maxItems100Hard cap across every selected market
maxPages10Per market, up to 50 jobs per page
includeDetailsfalsePaid add-on: full HTML description
monitoringModefalseEmit new / changed jobs only
stateKey—Optional name for monitoring state
emitUnchangedfalseAlso 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.

EventWhen it is chargedPrice
Actor startonce per run$0.0001
Jobevery stored listing$0.0015
Job detaillisting 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:

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.