JobStreet & JobsDB Jobs Scraper (SEA + HK)
Pricing
from $3.00 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
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
| Field | Type | Notes |
|---|---|---|
queries | array | Search keywords. Leave empty to browse by location/classification. |
site | enum | One of the six country sites. Each has its own listings and its own local salary currency. |
where | string | Location 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. |
classification | string | SEEK classification id, e.g. 6281 for ICT. |
workType | enum | Full time / Part time / Contract / Casual. |
salaryMin, salaryMax | integer | Salary band in the site's local currency. Listings with no disclosed salary are excluded when this is set. |
dateRange | enum | Posted within N days. |
sortMode | enum | Newest first or most relevant. |
maxItems | integer | Per query. 0 = unlimited, still bounded by the ceiling below. |
incremental | boolean | Only return listings not seen in previous runs. |
proxyConfiguration | object | Residential recommended. |
Known limits
- Pagination ceiling. The platform stops serving results at roughly page 50 (about 1,000 listings per query), regardless of what
totalCountreports. To go deeper, split the query by location, classification or salary band. The Actor stops cleanly at the ceiling and records it inRUN_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.minis usually correct data, not a parse failure — checksalary.raw, which isnullwhen 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. remoteis strict. It is true only for genuinely location-free roles. Hybrid roles reportremote: falsewith"Hybrid"inwork_arrangements, because conflating the two makes the flag useless for filtering.
Sister Actors
| Actor | Covers |
|---|---|
| SEEK Jobs Scraper | Australia, New Zealand — same platform, those catalogues |
| Himalayas Remote Jobs Scraper | 100,000+ worldwide remote roles |
| Remote OK Jobs Scraper | Remote OK's public feed — read its README first, the feed has known quality problems |
Local development
pip install -r requirements.txtpython test_local.py "software engineer" --max 20 --out sample_output.jsonpython 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.