JobStreet & JobsDB Jobs Scraper (SEA + HK) avatar

JobStreet & JobsDB Jobs Scraper (SEA + HK)

Pricing

from $3.00 / 1,000 results

Go to Apify Store
JobStreet & JobsDB Jobs Scraper (SEA + HK)

JobStreet & JobsDB Jobs Scraper (SEA + HK)

Scrape JobStreet Indonesia, Malaysia, Singapore, Philippines and JobsDB Thailand, Hong Kong with parsed numeric salary in local currency, structured location and incremental mode.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Axery

Axery

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

JobStreet & JobsDB Jobs Scraper (SEA + Hong Kong)

Scrapes job listings from JobStreet (Indonesia, Malaysia, Singapore, Philippines) and JobsDB (Thailand, Hong Kong) over plain HTTP — no browser, no login, no cookies. These brands all run on SEEK's platform, and this Actor reads its public search API, the same endpoint the website calls to paint its results page.

What makes this different

Salary you can actually use. JobStreet publishes salary only as a display string like "Rp 8.000.000 – Rp 12.000.000 per month", which you cannot sort, filter or average. This Actor splits it into numeric min/max, ISO-4217 currency and a period — and gets the local convention right, parsing Indonesian 5.000.000 as five million rather than five:

"salary": {
"min": 8000000, "max": 12000000, "currency": "IDR",
"period": "month", "is_estimated": false,
"raw": "Rp 8.000.000 – Rp 12.000.000 per month"
}

raw is always kept, so if the parser ever misreads a format you still have the original — the data is never silently lossy.

Incremental mode. Turn on incremental and the Actor remembers which listings it has already returned. Subsequent runs return only new jobs, and you are charged only for those new rows. A daily monitor over 5,000 listings costs full price once, then a fraction of that per day.

One schema across boards. Every job Actor in this suite emits the same record shape, with a source-prefixed job_id (id.jobstreet.com:81234567). Merge JobStreet, SEEK and Himalayas results into one dataset and dedupe without writing a normalizer.

Honest coverage reporting. Each run writes a RUN_COVERAGE record to the key-value store saying what you asked for, what came back, and which limit applied.

Input

FieldTypeNotes
queriesarraySearch keywords. Leave empty to browse by location/classification.
siteenumOne of the six country sites. Each has its own listings and its own local salary currency.
wherestringLocation as the site spells it, e.g. Jakarta Raya, Kuala Lumpur. An unrecognised value returns zero results, not an error — prefer blank over a guess.
classificationstringSEEK classification id, e.g. 6281 for ICT.
workTypeenumFull time / Part time / Contract / Casual.
salaryMin, salaryMaxintegerSalary band in the site's local currency. Listings with no disclosed salary are excluded when this is set.
dateRangeenumPosted within N days.
sortModeenumNewest first or most relevant.
maxItemsintegerPer query. 0 = unlimited, still bounded by the ceiling below.
incrementalbooleanOnly return listings not seen in previous runs.
proxyConfigurationobjectResidential recommended.

Known limits

  • Pagination ceiling. The platform stops serving results at roughly page 50 (about 1,000 listings per query), regardless of what totalCount reports. To go deeper, split the query by location, classification or salary band. The Actor stops cleanly at the ceiling and records it in RUN_COVERAGE.
  • Most listings have no salary. In a typical run only 1 in 5 to 1 in 8 rows carry a salary, because advertisers in these markets frequently omit it. Empty salary.min is usually correct data, not a parse failure — check salary.raw, which is null when the site showed nothing.
  • No detail endpoint. The platform exposes no public JSON for a single job, and the job page carries no embedded state, so the full description body is not available over HTTP alone. The search response already includes teaser, bulletPoints, salary, location and classification.
  • remote is strict. It is true only for genuinely location-free roles. Hybrid roles report remote: false with "Hybrid" in work_arrangements, because conflating the two makes the flag useless for filtering.

Sister Actors

ActorCovers
SEEK Jobs ScraperAustralia, New Zealand — same platform, those catalogues
Himalayas Remote Jobs Scraper100,000+ worldwide remote roles
Remote OK Jobs ScraperRemote OK's public feed — read its README first, the feed has known quality problems

Local development

pip install -r requirements.txt
python test_local.py "software engineer" --max 20 --out sample_output.json
python test_local.py "developer" --site my.jobstreet.com --max 10

sample_output.json in this folder is real output from a live run, kept so the schema can be reviewed without running anything.