JobStreet & JobsDB Scraper
Pricing
from $2.00 / 1,000 job listings
JobStreet & JobsDB Scraper
Scrape job listings from JobStreet (Malaysia, Singapore, Philippines, Indonesia) and JobsDB (Thailand, Hong Kong). Every row carries title, company, location, salary_min, salary_max, salary_currency, work_type, listing_date and the full description_text.
Pricing
from $2.00 / 1,000 job listings
Rating
0.0
(0)
Developer
herus13
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
4 days ago
Last modified
Categories
Share
JobStreet & JobsDB Scraper extracts job listings from JobStreet in Malaysia, Singapore, the Philippines and Indonesia, and JobsDB in Thailand and Hong Kong. Every row carries title, company, location, structured salary, work type and the full description.
What you get
One dataset row per job, in the same flat shape for all six markets. Export as JSON, CSV or Excel.
{"title": "Software Engineer","company": "Lenovo","url": "https://my.jobstreet.com/job/93226956","country": "MY","location": "Bangsar South, Kuala Lumpur","salary_raw": "MYR 6,500 - 8,500 per month","salary_min": 6500,"salary_max": 8500,"salary_currency": "MYR","salary_period": "monthly","work_type": "Full time","listing_date": "2026-09-02T00:00:00+00:00"}
Salary is parsed rather than passed through: salary_min, salary_max, salary_currency (MYR, SGD, PHP, IDR, THB or HKD) and salary_period come back as separate values, with the advertiser's original wording kept in salary_raw so nothing is lost. Turn on fetch_detail and every row also carries description_text with the complete advertisement, the work arrangement and the site's own classification. scraped_at records when the row was captured.
What it costs
| Event | Price |
|---|---|
Job Listing (job-result) | $0.002 |
Job Detail (job-detail) | $0.004 |
You pay per job, not per minute: $0.002 a listing, so 1,000 listings is about $2.00. With fetch_detail on, each job also bills the $0.004 description, which makes a fully described job $0.006 and 1,000 of them about $6.00. There is no per-run start fee. Apify platform usage (compute) is billed to your Apify account on top of the event price; proxy bandwidth is included unless you supply your own proxy URLs.
Input
| Field | Type | Required | Default | What it does |
|---|---|---|---|---|
country | string | yes | "MY" | Which Southeast Asian job site to search. It decides the listings you get, their language and the currency of every salary. Default MY. Values: MY Malaysia, SG Singapore, PH Philippines and ID Indonesia on JobStreet; TH Thailand and HK Hong Kong on JobsDB. Required: every run searches exactly one country. |
keywords | string | no | — | Search terms, for example python developer or accountant. Leave blank to browse every job advertised in the chosen country. |
location | string | no | — | City or region to narrow the search, for example Kuala Lumpur, Cebu or Bangkok. Leave empty to cover the whole country. |
work_type | string | no | — | Employment type a listing must advertise. Values: full-time, part-time, contract, temporary, casual. Leave empty for any type. |
salary_min | integer | no | — | Lowest monthly pay a listing must advertise, in the chosen country's own currency — 5000 means 5,000 ringgit on the Malaysian site. Minimum 0. Leave empty to include every listing, including the many that publish no salary at all. |
date_posted | string | no | — | How recent a posting must be. Values: 24h the last day, 3d the last three days, week the last seven days, month the last thirty days. Leave empty for any date. Pair 24h with a daily schedule to collect only what is new. |
fetch_detail | boolean | no | true | Also collect each job's full description as description_text, with the work arrangement and the site's own classification. Default true. Set it to false for a cheaper listing-only run: a description is charged as a separate job-detail event on top of the listing. |
max_results | integer | no | 200 | Most job listings returned for the run. Default 200, minimum 1, maximum 10000. Lower it to cap what a run costs; raise it to sweep a whole market. |
max_concurrency | integer | no | 4 | How many description requests run at the same time. Default 4, minimum 1, maximum 20. A higher number finishes a large run sooner. |
max_requests_per_minute | integer | no | 60 | Ceiling on how many requests a run may send each minute. Default 60, minimum 1, maximum 600. Raise it to finish a wide search sooner, lower it to stretch a long run out. |
proxyUrls | array | no | — | Leave empty: this actor reaches JobStreet and JobsDB directly, so no proxy is needed for normal volumes, and any the run does use is included in its price. To route the run through your own provider instead, add one gateway URL per entry, for example http://user:pass@host:port — works with any provider that issues URLs (DataImpulse, Bright Data, Oxylabs, Smartproxy, or your own). When set, these are used exactly as entered and nothing else is. |
How to run it
- Open the actor on Apify Console.
- Pick the country, then type the keywords you want — or leave them blank to browse the whole market.
- Add any filters, then Run. Export JSON, CSV or Excel from the dataset.
{"country": "MY","keywords": "python developer","location": "Kuala Lumpur","work_type": "full-time","date_posted": "week","fetch_detail": true,"max_results": 200}
Minimal input:
{"country": "MY"}
Available as the MCP tool herus13--jobstreet-scraper on mcp.apify.com and through the Apify API; send the same JSON.
Why this scraper
- Six markets, one row shape — JobStreet in Malaysia, Singapore, the Philippines and Indonesia, and JobsDB in Thailand and Hong Kong, normalised into the same flat, spreadsheet-friendly record.
- Structured salary, not free text — currency, period and a min/max pair parsed for every Southeast Asian pay format, including comma- and dot-separated thousands, with the raw label kept beside them.
- Descriptions are optional — sweep a market cheaply on listing fields, then re-run with
fetch_detailonly where the full advertisement is worth paying for. - Filters applied at the source — keywords, location, work type, posting date and a salary floor narrow the search before results are returned, so you are not billed for rows you would discard.
- No start fee — short and scheduled runs cost only the listings they collect.
- Nothing to set up — no account, no cookies, no proxy configuration.
Use cases
- Southeast Asian job-market dashboards — Six markets from one actor makes a regional view practical: the same role, the same schema, six currencies already parsed.
- Salary benchmarking by role and country — A structured min, max, currency and period is what makes Malaysian ringgit and Singapore dollar postings comparable at all.
- Recruitment and ATS feeds — Title, company, location, work type and the full advertisement give an ATS everything it needs to present a listing without a second fetch.
- Competitor hiring intelligence — Which companies are advertising, for what, in which cities, and how the volume moves week to week.
- Regional expansion research — Advertised pay and demand for a function across six markets is a cheap read on where a team is affordable to build.
FAQ
Which sites and countries are covered? JobStreet for Malaysia (MY), Singapore (SG), the Philippines (PH) and Indonesia (ID), and JobsDB for Thailand (TH) and Hong Kong (HK). One country per run — set country and run it again for the next market.
How does fetch_detail change the price? With it on, a job bills the listing and the description separately: $0.002 plus $0.004, so $0.006 all in. Set it to false when listing-level fields are enough and you pay only $0.002 a job.
Why is salary empty on some jobs? Because the advertiser did not publish one — a large share of Southeast Asian postings hide pay. When a salary is shown but written in an unusual format, salary_raw still carries the original text.
Is a proxy included? This actor connects directly and a proxy is optional. To use your own, paste gateway URLs into Your own proxy URLs. Scraping at volume? Your own DataImpulse account is cheaper per GB.
Is scraping JobStreet legal? This actor collects only publicly available job-listing data — nothing personal beyond what advertisers choose to publish. You are responsible for complying with JobStreet and JobsDB's terms and applicable laws.
Related actors
Building a job-market pipeline? Pair this actor with:
- Indeed Job Scraper — Indeed listings with structured salary and map coordinates across 59 countries.
- LinkedIn Jobs Scraper — LinkedIn job listings with company detail, salary and applicant counts.
- levels.fyi Salary Scraper — verified tech compensation by company, level and location.
- Lazada Scraper — one product row per Lazada search result across the same Southeast Asian markets.