JobStreet & JobsDB Scraper: 6 Asian Countries in One Run
Pricing
Pay per event
JobStreet & JobsDB Scraper: 6 Asian Countries in One Run
Scrape JobStreet (Philippines, Malaysia, Singapore, Indonesia) and JobsDB (Hong Kong, Thailand) in one run: title, company, salary parsed to min/max/yearly, work type, remote, category, posting date, URL. Job alerts mode returns only new jobs. No login. $1 per 1,000 jobs.
Pricing
Pay per event
Rating
0.0
(0)
Developer
DataDesk
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
3 days ago
Last modified
Categories
Security
Limited permissionsShare
Scrape JobStreet (Philippines, Malaysia, Singapore, Indonesia) and JobsDB (Hong Kong, Thailand) in one run: title, company, salary parsed to min/max/yearly, work type, remote, category, posting date, URL. Job alerts mode returns only new jobs. No login. $1 per 1,000 jobs.
Scrape jobs from JobStreet (Philippines, Malaysia, Singapore, Indonesia) and JobsDB (Hong Kong, Thailand) in seconds: no login, no browser, no proxy setup. Built for recruiters, BPO and staffing firms, HR-tech and market researchers in Southeast Asia.
What you can do with it
- One feed for 6 countries instead of one Actor per site
- Salary comparison across PH, MY, SG, ID, HK and TH (local currency + yearly)
- Lead lists of companies hiring in Southeast Asia
- Daily job alerts per country and keyword
Why this scraper
- Clean, normalized salary: the text as shown plus
salaryMin,salaryMax,salaryCurrency,salaryPeriodand a yearly equivalent (salaryYearlyMin/salaryYearlyMax) so you can sort and compare. - Job alerts mode: turn on Only new jobs, schedule the Actor daily, and you get (and pay for) only jobs you have not received before.
- Fast and cheap: reads the site's own search data instead of rendering pages. A default run finishes in a few seconds.
- Pay only for results: $1.00 per 1,000 jobs + $0.005 per run. No results, no job charges. Your spending limit is respected exactly: we never deliver rows you did not pay for, and never charge for rows we did not deliver.
- Deduplicated across keywords and pages.
Job alerts (only new jobs)
- Set your search and turn on Job alerts mode: only new jobs.
- Give it an Alert name (one per saved search).
- Create a Schedule (e.g. every morning) and connect an integration (email, Slack, Google Sheets, Make, Zapier, webhook). Each run returns only jobs posted since the previous run. Runs with no new jobs cost almost nothing.
Sources and coverage
| Source | Coverage | Data |
|---|---|---|
| JobStreet | Philippines, Malaysia, Singapore, Indonesia | title, company, location, salary, work type, classification, teaser, bullet points |
| JobsDB | Hong Kong, Thailand | same fields |
How to use it
- Click Try for free (or Start): the prefilled input runs a quick test.
- Fill in the input fields (see the examples below). Every field is optional.
- Click Start and wait a few seconds to minutes, depending on how many jobs you ask for.
- Open the Output tab and export as JSON, CSV, Excel, XML or HTML, or read the results via API.
Input examples
Software engineers in PH, MY, SG (default):
{"keywords": ["software engineer"], "countries": ["ph", "my", "sg"], "maxJobsPerSearch": 20}
All 6 countries, last 3 days:
{"keywords": ["accountant"], "countries": ["ph", "my", "sg", "id", "hk", "th"], "postedWithinDays": 3}
Manila full-time:
{"keywords": ["customer service"], "countries": ["ph"], "location": "Manila", "workType": "full-time"}
Daily alerts:
{"keywords": ["nurse"], "countries": ["sg"], "onlyNewJobs": true, "alertsKey": "sg-nurse"}
Input fields
| Field | Type | Description |
|---|---|---|
keywords | array | Job titles or skills, e.g. accountant, software engineer. One search per keyword and country. |
countries | array | Country sites to search: ph, my, sg, id (JobStreet) and hk, th (JobsDB). Each keyword is searched in every selected country. |
location | string | City or area inside the selected country, e.g. "Makati", "Kuala Lumpur". Empty = whole country. |
workType | string | Optional: only full-time, part-time, contract or casual jobs. Empty = all work types. |
maxJobsPerSearch | integer | Cap per keyword (and per country). You only pay for jobs saved. |
postedWithinDays | integer | Only jobs posted in the last N days. 0 = any date. |
onlyNewJobs | boolean | Remember jobs from earlier runs and save only jobs you have not received before. Schedule the Actor daily to get a job alert feed. You pay only for new jobs. |
alertsKey | string | Separate memory per alert (e.g. "sydney-nurses"). Use a different name for each saved search. |
Output example
One row per item. Values below are example values from a real test run (long text shortened):
{"source": "jobstreet","country": "MY","jobId": "95697419","title": "Internship (IR4.0. A.I, ioT)(Software, APP, UX/UI, Network, Cloud) (KL and JB)","company": "Hispeedcity Sdn Bhd","advertiserId": "60739675","location": "Bukit Jalil, Kuala Lumpur","locations": ["Bukit Jalil, Kuala Lumpur"],"classification": "Information & Communication Technology","subClassification": "Developers/Programmers","workType": "Full time","workArrangement": "On-site","isRemote": false,"salary": "RM 800 – RM 1,200 per month","salaryMin": 800.0,"salaryMax": 1200.0,"salaryCurrency": "MYR","salaryPeriod": "month""…": "more fields below"}
Fields a source does not publish are null.
Output fields
| Field | Description |
|---|---|
source | Site the job came from |
country | Country code |
jobId | Job ID on the source site |
title | Job title |
company | Employer name |
advertiserId | Advertiser / employer ID on the source site |
location | Location as shown |
locations | All job locations (with details on) |
classification | Job category on the board |
subClassification | Job sub-category on the board |
workType | Work type (full-time, part-time, contract, casual) |
workArrangement | Work arrangement (on-site, hybrid, remote) |
isRemote | True for remote jobs |
salary | Salary as shown |
salaryMin | Minimum salary (number) |
salaryMax | Maximum salary (number) |
salaryCurrency | ISO currency code |
salaryPeriod | hour, day, week, month or year |
salaryYearlyMin | Minimum salary converted to a yearly amount |
salaryYearlyMax | Maximum salary converted to a yearly amount |
teaser | Short teaser text shown in search results |
bulletPoints | Highlight bullet points from the listing |
postedAt | Posting date (ISO 8601 UTC) |
postedText | Posting date text as shown on the site |
isFeatured | True if the listing is a featured/premium ad |
url | Job page URL |
keyword | Search keyword that found the job |
scrapedAt | When the job was scraped (ISO 8601 UTC) |
isNew | True when job alerts mode is on (job not seen in earlier runs) |
The Output tab has a Jobs view.
Pricing
Pay-per-event: you pay only for results delivered, no monthly fee.
- Job (
job): $1.00 per 1,000 ($0.001 each) - Actor start: $0.005 per run
| Run | Jobs | Cost |
|---|---|---|
| Quick test | 20 | $0.025 |
| Small run | 100 | $0.105 |
| Regular run | 1,000 | $1.005 |
| Large run | 10,000 | $10.005 |
Rows that are not delivered are never charged. Apify's free plan includes monthly credit, and you can set a maximum cost per run in the run options.
Integrations and API
- Export results as JSON, CSV, Excel, XML or HTML from the Output tab.
- Schedule runs (daily, hourly) and send results to Google Sheets, Slack, Zapier, Make, n8n, Airbyte or webhooks.
- Call it from code with the Apify API:
curl -X POST "https://api.apify.com/v2/acts/datadesk-io~jobstreet-jobsdb-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"keywords": ["software engineer"], "countries": ["ph", "my", "sg"], "maxJobsPerSearch": 20}'
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("datadesk-io/jobstreet-jobsdb-scraper").call(run_input={'keywords': ['software engineer'], 'countries': ['ph', 'my', 'sg'], 'maxJobsPerSearch': 20})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item.get('title'), item.get('company'), item.get('url'))
FAQ
Do I need an account or cookies? No. The Actor only reads public job listings.
Does it scrape personal data? No. It returns job ads and company names only, no candidate or recruiter profiles. Use the data in line with the site's terms and applicable laws (GDPR etc.).
Can I get full job descriptions? Rows include the summary/snippet the search shows. Open url for the full ad.
Something broke or you need a field? Open an issue on the Issues tab; we usually answer within a day.
How fresh is the data? Live: every run reads the source at that moment. Schedule it to keep a dataset up to date.
Why did I get fewer jobs than the maximum? The source had fewer matching jobs, or duplicates were removed. You only pay for jobs delivered.
Not affiliated with or endorsed by the job board. Trademarks belong to their owners.
Limitations
- Salary appears only when the employer publishes it.
- Full job description is not included (teaser + bullet points are).
- Up to the max per keyword × country.
Support
Found a bug, or need a new field, source or filter? Open an issue in the Issues tab; we usually answer within 24 hours. Custom data work: datadesk.io@proton.me.