JobsDB Jobs Scraper — HK & Thailand Hiring Data
Pricing
from $3.75 / 1,000 jobsdb job record scrapeds
JobsDB Jobs Scraper — HK & Thailand Hiring Data
Scrape public JobsDB listings in Hong Kong and Thailand for recruiting and hiring research. Each job has employer, location, salary, classification, description, dates and apply URL.
Pricing
from $3.75 / 1,000 jobsdb job record scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
16 days ago
Last modified
Categories
Share
What is JobsDB Jobs Scraper — HK & Thailand Hiring Data?
JobsDB Jobs Scraper — HK & Thailand Hiring Data returns one dataset row per public JobsDB job listing in Hong Kong or Thailand: job ID, title, location, market, salary text with parsed minimum, maximum and period when a range is listed, description, and the direct job URL, plus employer, work type and classification fields when the public page shows them. Recruiters, talent intelligence teams, salary researchers and AI agents use it to track hiring demand by role, area and recency, from a keyword search or from known JobsDB search URLs.
Why recruiters use this JobsDB scraper
- Two markets in one Actor.
countryswitches between Hong Kong (HK) and Thailand (TH). - Recency built in.
postedWithinDayskeeps listings from the last 1, 3, 7, 14 or 30 days, andsortByorders by date or relevance. - Salary as numbers. When a listing shows a range,
salaryMin,salaryMaxandsalaryPeriodare parsed fromsalaryText. - Fuller descriptions on demand.
includeJobDetailsvisits each job page for its description. - Saved searches welcome.
startUrlsreuses any publichk.jobsdb.comorth.jobsdb.comsearch page you already filtered in the browser.
Best fit for this Actor
- Best fit for recruiter sourcing lists, hiring-demand monitoring and salary benchmarking in Hong Kong and Thailand.
- Designed for public JobsDB listings, collected through country-matched residential proxies.
- Use a specific role and
locationfor focused results, andpostedWithinDaysset toanywhen you want every listing the search returns. - To cover other Southeast Asian markets, continue with JobStreet Jobs Scraper using the same keywords.
- When you want company career pages alongside job boards, use Career Site Job Listing Scraper for the employers on your list.
Example workflow: from a role to a salary benchmark
A recruiting agency in Hong Kong starts with keywords set to data engineer, country set to HK, postedWithinDays at 14 and maxResults at 100, with includeJobDetails on. The dataset returns each listing's title, location, salaryText, salaryMin, salaryMax and jobUrl. They keep rows with a parsed salary range, compare ranges by district and seniority in the title, and share a benchmark sheet with their client. They then schedule the same input weekly and compare new listings to spot teams that are scaling up.
Input
{"keywords": "data engineer","country": "HK","location": "Central","postedWithinDays": "7","sortBy": "date","maxResults": 50,"includeJobDetails": true}
| Field | Type | What it controls |
|---|---|---|
keywords | string | Job search text, such as software engineer. Required. |
country | string | HK for Hong Kong or TH for Thailand. Default HK. |
location | string | City or region within the market, such as Central or Bangkok. |
postedWithinDays | string | any, 1, 3, 7, 14 or 30. Default 7. |
sortBy | string | date or relevance. Default date. |
maxResults | integer | Cap on job records saved, from 1 to 500. Default 20. |
includeJobDetails | boolean | Visit each job page for a fuller description. Default true. |
startUrls | array | Public hk.jobsdb.com or th.jobsdb.com search or job pages. |
Output
One row per job. Fields the public page leaves out stay null.
| Field | What it contains |
|---|---|
jobId, title, jobUrl | Job identity and direct link |
location, country | Location text and market code |
salaryText | Salary text as shown on the listing |
salaryMin, salaryMax, salaryPeriod, salaryCurrency | Parsed salary range when one is listed |
description | Listing teaser or detail-page description |
companyName, companyUrl | Employer, when the public page shows it |
workType, workArrangement | Employment type and workplace arrangement, when shown |
classification, subClassification | JobsDB role category, when shown |
postedAt, postedText | Posting date, when shown |
sourceUrl, scrapedAt | The search page and collection time |
Example row:
{"jobId": "94983267","title": "Fresh Graduate Software Engineer /Electronic Engineering Manager(Urgent )","companyName": null,"companyUrl": null,"location": "Wong Chuk Hang, Southern District","country": "HK","salaryText": "$20,000 – $30,000 per month","salaryCurrency": null,"salaryMin": 20000,"salaryMax": 30000,"salaryPeriod": "month","workType": null,"workArrangement": null,"classification": null,"subClassification": null,"description": "Embedded Software Engineer (Hong Kong Based), 5 Days, Location Wong Chuk Hang ( Near MTR), Salary ( 20-28K)Nego","jobUrl": "https://hk.jobsdb.com/job/94983267","postedAt": null,"postedText": null,"sourceUrl": "https://hk.jobsdb.com/software-engineer-jobs?sortmode=ListedDate&daterange=7","scrapedAt": "2026-10-01T01:33:16.110Z"}
Each run also writes OUTPUT and RUN_SUMMARY records to the default key-value store with the run outcome and totals.
Pricing
This Actor uses Pay per event plus Apify platform usage. Each job saved is one JobsDB job record scraped event, and each run has one Actor Start event plus the platform and residential proxy usage of the run. For example, a weekly search capped at 50 jobs is up to 50 job events plus the start event and usage. maxResults doubles as a spending limit. The live Pricing tab on this page shows the current event prices.
API example
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~jobsdb-jobs-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"keywords": "accountant", "country": "TH", "location": "Bangkok", "maxResults": 30}'
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("khadinakbar/jobsdb-jobs-scraper").call(run_input={"keywords": "data engineer", "country": "HK", "maxResults": 50})ranged = [j for j in client.dataset(run["defaultDatasetId"]).iterate_items() if j.get("salaryMin")]for job in ranged:print(job["title"], job["salaryMin"], job["salaryMax"], job["salaryPeriod"])
Use with AI agents (MCP)
Connect the Actor to Claude, ChatGPT or Cursor through Apify MCP and ask:
Find up to 40 data engineer jobs posted on JobsDB Hong Kong in the last 14 days and summarize the salary ranges by area, with links.
The agent sets keywords, country, postedWithinDays and maxResults, reads rows with get-dataset-items, groups jobs with a parsed salaryMin by location, and cites each jobUrl. It can check OUTPUT.outcome to tell a quiet search from a full one, and each saved job is one event, so maxResults keeps the cost of the request predictable.
Best results
| Starting situation | Helpful action | Expected outcome |
|---|---|---|
| Testing a new query | Start with maxResults at 20 to 50 | A quick read on result quality |
| Salary research | Keep rows where salaryMin is set | Comparable numeric ranges |
| A narrow search | Add location and a specific job title | Focused, relevant listings |
| Few results | Set postedWithinDays to any and broaden keywords | More listings per run |
| Faster runs | Set includeJobDetails to false | Search-card rows only |
| A saved browser search | Paste it into startUrls | The same filters, collected |
Builder's note
I built this around the questions recruiters in Hong Kong and Bangkok ask most: who is hiring for this role right now, where, and for how much. I parse salary into numbers only when a real range is listed and keep the original text beside it, so benchmarks are built from listed figures rather than guesses.
FAQ
Which countries does it cover?
Hong Kong and Thailand, set with country.
Why is salaryMin empty on some jobs?
Many employers leave salary off their listings. salaryText keeps whatever the listing shows.
Can I reuse a search I made on the JobsDB website?
Yes. Paste the public search URL into startUrls.
Responsible use
This Actor collects public job-posting data for recruiting, research and analytics. Respect JobsDB's terms and applicable employment and data-protection laws. It collects no candidate, applicant or account data. JobsDB is a trademark of its owner; this independent Actor is not affiliated with or endorsed by JobsDB.