Jobstreet & JobsDB Jobs Scraper - MY, SG, PH, ID, HK, TH
Pricing
$0.80 / 1,000 results
Jobstreet & JobsDB Jobs Scraper - MY, SG, PH, ID, HK, TH
Use this to get job ads from Jobstreet (MY, SG, PH, ID) and JobsDB (HK, TH). Input: keywords, locations, filters or site URLs. One result = one job: title, company, location, salary, work type, category, date, URL; optional full description and company profile. Not capped at 550. $0.80 per 1,000.
Pricing
$0.80 / 1,000 results
Rating
0.0
(0)
Developer
Giovanni Rich
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Jobstreet & JobsDB Jobs Scraper & API - Malaysia, Singapore, Philippines, Indonesia, Hong Kong, Thailand
Jobstreet & JobsDB Jobs Scraper is a Jobstreet scraper, JobsDB scraper and unofficial jobs API for my.jobstreet.com, sg.jobstreet.com, ph.jobstreet.com, id.jobstreet.com, hk.jobsdb.com and th.jobsdb.com. Give it keywords, locations and filters (or paste search URLs from the sites) and get every matching job ad as clean JSON, CSV or Excel: title, company, location, salary (as written and as numbers with the currency), work type, on-site / hybrid / remote, classification, listing date, the job URL and, if you want it, the full description and the company profile (website, industry, size, rating, perks).
It reads the same JSON the websites load, over plain HTTP: no browser and no login, 100 jobs per request. The sites show at most 550 jobs for any one search; this scraper splits big searches automatically by category, sub-category, work type and work arrangement and merges the results without duplicates, so a search that lists 19,533 jobs returned 17,881 of them in testing instead of 550, and 5,250 Malaysian accountant jobs took 56 seconds.
Use it for hiring-signal lead generation across South-East Asia and Hong Kong (which companies are hiring for what, right now), job boards and aggregators, recruitment market mapping, salary benchmarking and labour-market research.
How to use
- Pick the Country / site: Malaysia, Singapore, Philippines, Indonesia (Jobstreet), Hong Kong or Thailand (JobsDB). One country per run.
- Type one or more Search keywords (
accountant,software engineer,customer service) and, optionally, Locations (Kuala Lumpur,Selangor,Metro Manila,Jakarta Raya,Bangkok). Every keyword is searched in every location. No keyword = all jobs matching your location and filters. - Optionally filter: Classification (30 job categories), Work types, Work arrangements (on-site, hybrid, remote), Posted within (days), Minimum / Maximum salary and Sort order.
- Set Max jobs per search (0 = everything). Tick Include full description & company profile if you need the ad text.
- Click Start. Download the results as JSON, CSV, Excel or HTML from the Output tab, or pull them through the Apify API, Make, Zapier, n8n or an MCP client.
Already have links? Paste search URLs or job URLs from any of the six sites into Search or job URLs instead; the filters in a search URL are read from the URL, and the site is read from the link.
What you get
One dataset item per job ad:
- Identity:
id(job id, stable across runs),title,url,site,country. - Company:
company,advertiserNameandadvertiserId(the account that posted the ad, which can be a recruiter),companyId,companyProfileUrl,companyLogoUrl. - Where:
location,locations,area(the wider region),countryCode. - Work:
workType(Full time, Part time, Contract/Temp, Casual/Vacation),workArrangement(On-site, Hybrid, Remote),isRemote. - Pay:
salaryTextexactly as the advertiser wrote it, plussalaryMin,salaryMax,salaryCurrency(MYR, SGD, PHP, IDR, HKD, THB, or USD where the ad says so) andsalaryPeriodparsed from it. - Category:
classification,subclassificationandclassifications(an ad can sit in two). - Ad text:
teaser,bulletPoints. - Dates and flags:
listedAt,isFeatured,isSponsored,isExpiringSoon. - Where it came from:
sourceQuery,sourceLocation,position,scrapedAt.
With Include full description & company profile on, each job also gets description (plain text), optional descriptionHtml, expiresAt, status, appliesOnCompanySite, isVerifiedAdvertiser, advertiserSince, screeningQuestions, and from the company profile where one exists: companyWebsite, companyIndustry, companySize, companyRating, companyReviewCount, companyDescription, companyPerks, companyJobsUrl.
Use cases
- Lead generation from hiring signals: a company in Selangor advertising for five accounts executives is a prospect for accounting software; a Singapore firm hiring DevOps engineers buys cloud tooling. Run your keywords daily with Posted within 1 day and send new ads to your CRM with the company website attached.
- Recruitment agencies and RPO: see who is hiring in your niche, which ads are direct employers and which are other agencies (
advertiserNamevscompany), and the screening questions they ask. - Job boards and aggregators: pull a category or a whole country into your own feed, deduplicated by
id. - Salary benchmarking:
salaryMin/salaryMaxby role, city and country in local currency, from ads that publish pay. - Offshoring and remote-hiring research: the Philippines site lists many remote roles paid in USD; filter with
workArrangements: ["remote"]. - AI agents: "find remote accountant jobs in the Philippines posted this week" maps straight onto the input fields.
Input example
| Field | Default | Description |
|---|---|---|
country | MY | MY, SG, PH, ID (Jobstreet), HK, TH (JobsDB) |
searchQueries | - | Keywords, one search each. Empty = all jobs matching the filters |
locations | whole country | Locations as the site writes them: Kuala Lumpur, Selangor, Metro Manila, Jakarta Raya, Bangkok |
classification | any | One of the 30 categories; via API also "Accounting > Payroll" or an id |
workTypes | all | Any of fulltime, parttime, contract, casual |
workArrangements | all | Any of onsite, hybrid, remote |
postedWithinDays | 0 (any) | 1 = listed today, 3, 7, 14, 31 |
salaryMin / salaryMax | 0 | In local currency, in the unit set by salaryType |
salaryType | monthly | monthly, annual or hourly |
sort | relevance | relevance or date |
maxItems | 100 | Max jobs per search; 0 = all |
deepSearch | true | Split searches above 550 jobs so nothing is cut off |
includeDetails | false | Full description, expiry, screening questions, company profile (one extra request per job) |
includeDescriptionHtml | false | Also keep the description HTML |
startUrls | - | Search URLs, job URLs or bare job ids |
proxyConfiguration | Apify datacenter | No residential proxies needed |
Software jobs in Singapore listed this week, with descriptions:
{"country": "SG","searchQueries": ["software engineer", "devops engineer"],"postedWithinDays": 7,"maxItems": 200,"includeDetails": true}
Full-time accountant jobs in central Hong Kong paying HK$30,000 a month or more, newest first:
{"country": "HK","searchQueries": ["accountant"],"locations": ["Central and Western District"],"workTypes": ["fulltime"],"salaryMin": 30000,"salaryType": "monthly","sort": "date","maxItems": 0}
From links you copied off the sites (any mix of the six):
{"startUrls": ["https://th.jobsdb.com/accountant-jobs/in-Bangkok","https://id.jobstreet.com/job/95039993","https://ph.jobstreet.com/job/95218270"]}
Output example
From a real run (software engineer in Singapore, details on; description, company description, questions and perks shortened):
{"id": "95236588","title": "Software Engineer (Full stack with Automation)","company": "HOPE Technik Pte Ltd","location": "Teban Gardens, West Region","locations": ["Teban Gardens, West Region"],"area": "West Region","countryCode": "SG","workType": "Full time","workTypes": ["Full time"],"workArrangement": "On-site","workArrangements": ["On-site"],"isRemote": false,"salaryText": "$4,500 – $6,000 per month","salaryMin": 4500,"salaryMax": 6000,"salaryCurrency": "SGD","salaryPeriod": "month","classification": "Information & Communication Technology","subclassification": "Engineering - Software","classifications": ["Information & Communication Technology > Engineering - Software"],"teaser": "Seeking a potential software engineer interested in working on a wide range of projects across different industries!","bulletPoints": ["Dynamic, fun, learning and casual working environment", "Opportunity to work in multiple projects (govt. & commercial)"],"listedAt": "2026-10-13T07:07:06Z","isFeatured": false,"isSponsored": false,"isExpiringSoon": false,"advertiserId": "60257926","advertiserName": "HOPE Technik Pte Ltd","companyId": "168550780952919","companyProfileUrl": "https://sg.jobstreet.com/companies/hope-technik-pte-ltd-168550780952919","companyLogoUrl": "https://bx-branding-gateway.cloud.seek.com.au/30ec5e2a-157c-4a32-b5ab-3a330dbc13c7.1/jdpLogo","roleId": "full-stack-software-engineer","url": "https://sg.jobstreet.com/job/95236588","site": "sg.jobstreet.com","country": "Singapore","sourceQuery": "software engineer","sourceLocation": null,"position": 3,"scrapedAt": "2026-10-13T17:24:28.410Z","description": "Role:\n\nWork as a part of the team to meet project targets and quality objectives. Provide hands-on advice to members of the project team. Provide effort estimat ...","expiresAt": "2026-11-12T12:59:59.999Z","isExpired": false,"status": "Active","appliesOnCompanySite": false,"isVerifiedAdvertiser": true,"advertiserSince": "2008-09-18T01:38:24.390Z","screeningQuestions": ["How many years' experience do you have as a Software Engineer?","Which of the following programming languages are you experienced in?","Which of the following front end development libraries and frameworks are you proficient in?"],"companyWebsite": "http://www.hopetechnik.com","companyIndustry": "Science & Research","companySize": "51-100 employees","companyRating": null,"companyReviewCount": null,"companyDescription": "HOPE Technik, a Singapore-proud engineering company, has been evolving the industry landscape with its technological innovations since 2006. ...","companyPerks": ["Medical", "Miscellaneous allowance", "Education support", "Sports (e.g. Gym)"],"companyJobsUrl": "https://sg.jobstreet.com/HOPE-Technik-Pte-Ltd-jobs/at-this-company"}
Fill rates on a 17,881-job test run (admin, all of Indonesia): id, title, company, location, area, work type, work arrangement, classification, sub-classification, teaser, listing date and URL 100%; advertiser id 95%; company profile link 52%; salary text 38%; parsed salary numbers 37%; company logo 32%; bullet points 13%. On a 162-job run with details (Singapore and Thailand): description, expiry date and status 100%; company industry 64%; screening questions 62%; company size and description 60%; company website 38%; company perks 27%; company rating 22% (company fields exist only for employers with a company profile on the site). A field the site does not publish for a job is null, never guessed.
Pricing
Pay per result: $0.80 per 1,000 jobs (one result = one job ad saved to the dataset). The full description and company profile are included in that price.
- 100 jobs for a quick search = $0.08
- Every
accountantjob in Malaysia, about 5,250 jobs = $4.20 - A daily run of 20 keywords, new ads only (about 300 jobs) = $0.24 a day
No start fee and no charge per search. Failed requests, duplicate ads, expired job URLs and empty searches are never charged. If you set a maximum cost per run, the scraper stops cleanly when it reaches it. Apify's free plan includes $5 of monthly platform credit, enough for about 6,000 jobs.
Integrations
- Make, Zapier and n8n: start runs and push new jobs to your CRM, Slack, Google Sheets or Airtable.
- Google Sheets: export the dataset straight into a spreadsheet, or refresh it on a schedule.
- Apify API: run the actor and fetch results over REST, or with the official JavaScript and Python clients.
- Webhooks: get notified when a run finishes and process the data right away.
- Schedules: run daily with
postedWithinDays: 1and deduplicate byidto collect only new ads. - MCP for AI agents: through the Apify MCP server (https://mcp.apify.com), Claude, ChatGPT, Cursor and other agents can call this jobs API directly and read the results.
Limits (read before large runs)
- 550 jobs per single search is the sites' own limit. Deep search gets around it by splitting; on the largest test (19,533 listed) it returned 92%. A slice that is still above 550 after every split is fetched in both sort orders, and the run summary counts those slices (
searchesCappedAt550). - Site totals are estimates. The
siteTotalin the run summary can differ from the number of unique jobs by a few percent, and the same ad can be listed twice (sponsored and organic); duplicates are dropped and not charged. - One country per run for keyword searches. URLs in
startUrlscan mix sites. - Language: results come from the English version of each site. Ads written in Bahasa Indonesia, Thai or Chinese are returned as written; category names are in English.
- Locations must be ones the site recognises. An unknown location returns 0 jobs and the summary says so.
- Salary numbers are parsed from free text. Fewer than half of all ads show a salary; those that do not keep the numbers
null. - No applicant or personal data. The scraper returns the public job ad and company profile only; recruiter phone numbers and emails are not collected.
- Details cost one request per job, so runs with details are slower.
FAQ
Is there an official Jobstreet or JobsDB API for job search? The official API is for hirers and recruitment software posting ads, not for reading the job market. This actor is an unofficial alternative that reads the public search results.
Can I scrape SEEK Australia or New Zealand as well? Yes, with the sister actor SEEK Jobs Scraper. Same input and output fields.
How do I get only new jobs every day?
Schedule the actor daily with postedWithinDays: 1 and sort: "date", and deduplicate on id in your own system.
How do I find companies, not recruiters?
Compare company with advertiserName; when they differ the ad was placed by an agency. With details on, companyWebsite is filled for companies that have a profile on the site.
Why did I get fewer jobs than the site's count?
The site's count includes duplicates and is rounded. Check RUN_SUMMARY in the key-value store: it lists each search with the site total, pages fetched and why it stopped.
Is scraping Jobstreet or JobsDB legal? The actor collects publicly visible job ads, not personal data. You are responsible for how you use the data and for following the sites' terms and the laws that apply to you.
Something is wrong or a field is missing. Open an issue on the Issues tab of the actor page with the run ID. It reaches the developer directly.