JobsDB Scraper avatar

JobsDB Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
JobsDB Scraper

JobsDB Scraper

Scrape live job listings from JobsDB (Hong Kong & Thailand) - search by keyword, browse by category or location, or pull the newest postings. Salary, work-type, date-range and sort filters included.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Scrape live job listings from JobsDB — the leading job board across Hong Kong and Thailand. Search by keyword, browse by category, location, or company, or pull the newest postings site-wide. Salary, work-type, work-arrangement, date-posted, and sort filters included. No login, no cookies, no API key required.

What this actor does

  • Six modes: searchJobs, browseByCategory, browseByLocation, browseByCompany, latestJobs, byJobId
  • Two markets: Hong Kong (hk.jobsdb.com) and Thailand (th.jobsdb.com)
  • Filters: category (29 industries, multi-select), work type (multi-select), work arrangement (on-site/hybrid/remote, multi-select), company/advertiser ID (multiple, comma-separated), salary range + period, date posted, sort order
  • Rich fields: title, teaser, highlights, company, category, location, salary, work type, work arrangement, posting date, company logo, direct apply link
  • Empty fields are omitted — every record only contains data that was actually found

Output per job

  • jobId — unique JobsDB listing ID
  • title, teaser, bulletPoints[] — job highlights
  • companyName, companyUrl, logoUrl
  • employerId, companyId, advertiserId — internal JobsDB identifiers for the employer/advertiser account (feed advertiserId back into mode=browseByCompany to pull every current listing from that employer; companyId is the ID embedded in companyUrl)
  • category, categoryId, subCategory, subCategoryId
  • location, locations[], countryCode
  • workTypes[] — e.g. Full time, Part time, Contract/Temp, Casual/Vacation
  • workArrangements[] — e.g. On-site, Hybrid, Remote
  • salaryLabel — as displayed on the listing (when the advertiser disclosed one)
  • salaryMinValue, salaryMaxValue, salaryPeriod (hourly/monthly/annual), salaryCurrency (HKD/THB) — structured numbers parsed from salaryLabel when it's a clear numeric range (omitted for non-numeric labels like Negotiable or Competitive)
  • listingDate, listingDateDisplay
  • isFeatured
  • tags[] — urgency/status badges shown on the listing, e.g. Urgently hiring, Expiring soon, Be an early applicant
  • roleId
  • country — market the job was scraped from
  • jobUrl — link to the live listing
  • recordType: "job", scrapedAt

Input

FieldTypeDefaultDescription
modestringsearchJobssearchJobs / browseByCategory / browseByLocation / browseByCompany / latestJobs / byJobId
countrystringHKHK (Hong Kong) or TH (Thailand)
keywordsstringengineerJob title / skill / company keyword
locationstringArea/city, e.g. Central, Kowloon, Bangkok (required for browseByLocation)
classificationarrayOne or more job category IDs (required for browseByCategory) — 29 categories available in the UI multi-select; picking several matches ANY of them
subclassificationstringOne or more numeric sub-category IDs, comma-separated, to narrow classification further, e.g. 6038 = Project Engineering under Engineering — find one via the subCategoryId output field on any scraped job
workTypearrayMulti-select: 242 Full time / 243 Part time / 244 Contract/Temp / 245 Casual/Vacation
workArrangementarrayMulti-select: 1 On-site / 2 Hybrid / 3 Remote
advertiserIdstringOne or more numeric JobsDB company/advertiser IDs, comma-separated (required for browseByCompany) — find one via the advertiserId output field on any scraped job
jobIdstringOne or more numeric JobsDB job IDs, comma-separated or as an array (required for byJobId) — find one via the jobId output field on any previously scraped job
salaryMinintMinimum salary
salaryMaxintMaximum salary
salaryTypestringannualannual / monthly / hourly — period salaryMin/salaryMax are expressed in
dateRangestringOnly jobs posted in the last 1/3/7/14/31 days
sortModestringKeywordRelevanceKeywordRelevance or ListedDate (newest first)
maxItemsint50Hard cap on emitted records (1–1000)

Example: search with filters

{
"mode": "searchJobs",
"country": "HK",
"keywords": "data analyst",
"workType": ["242"],
"salaryMin": 20000,
"salaryMax": 40000,
"salaryType": "monthly",
"dateRange": "7",
"sortMode": "ListedDate",
"maxItems": 50
}

Example: browse a category

{
"mode": "browseByCategory",
"country": "TH",
"classification": ["6281"],
"maxItems": 100
}

Example: newest jobs in a location

{
"mode": "browseByLocation",
"country": "HK",
"location": "Kowloon",
"maxItems": 50
}

Example: all current listings from one company

{
"mode": "browseByCompany",
"country": "HK",
"advertiserId": "61282529",
"maxItems": 50
}

Example: remote jobs only

{
"mode": "searchJobs",
"country": "HK",
"keywords": "developer",
"workArrangement": ["3"],
"maxItems": 50
}

Example: multiple categories and work types at once

{
"mode": "searchJobs",
"country": "HK",
"keywords": "manager",
"classification": ["1209", "1200"],
"workType": ["242", "243"],
"workArrangement": ["1", "3"],
"maxItems": 100
}

Example: look up specific jobs by ID

{
"mode": "byJobId",
"country": "HK",
"jobId": "93889825,93902058"
}

Use cases

  • Job seekers & career sites — aggregate fresh listings by role, category, location, or remote/hybrid arrangement
  • Recruiters & staffing agencies — monitor competitor job postings and market salary ranges
  • Labor market research — track hiring demand across categories and regions in HK/TH
  • HR tech / salary benchmarking tools — collect posted salary ranges by role and market
  • Lead generation — find companies actively hiring in a given industry
  • Competitor/company tracking — pull every current listing from a specific employer with mode=browseByCompany

FAQ

What's JobsDB? A leading job board across Hong Kong and Thailand, part of the SEEK employment network. See jobsdb.com.

Do I need to log in or provide cookies? No. This actor uses JobsDB's public job-search endpoint — no account, API key, or proxy required.

Why is salaryLabel missing on some jobs? Not every advertiser discloses a salary. The field is only included when JobsDB displays one.

Why is salaryMinValue/salaryMaxValue missing even though salaryLabel is present? A handful of advertisers enter free text instead of a number (e.g. Negotiable, Competitive, Attractive Salary Package). The structured fields are only added when salaryLabel is confidently a numeric amount or range — never a guessed value.

What's the difference between category and subCategory? JobsDB classifies each job into a broad category (e.g. Information & Communication Technology) and a more specific sub-category (e.g. Developers/Programmers).

How fresh is the data? Real-time — every run queries JobsDB's live search API directly.

Why does jobUrl sometimes fail a curl/HEAD check? JobsDB's listing pages sit behind bot-detection that blocks non-browser HTTP clients (no cookies, no JS) while allowing real browsers through normally. The URLs themselves are valid, live links — opening them in a browser works fine. companyUrl and logoUrl are not behind this protection and are directly fetchable.

Can I use Thai-script place names for location in Thailand? Yes. location: "กรุงเทพ" and location: "Bangkok" both work for country: "TH" — the actor automatically detects Thai-script input and queries JobsDB's Thai-language endpoint so the place name resolves correctly. category, workTypes, and workArrangements are always normalized back to English in the output either way, so filtering/grouping by those fields stays consistent regardless of which locale a record was fetched under. teaser, bulletPoints, and subCategory remain in whatever language the advertiser/JobsDB used (Thai for Thai-script location lookups), since those are free text with no fixed English translation to fall back to.

Which markets are supported? Hong Kong and Thailand, JobsDB's two active markets. Other former JobsDB markets (Singapore, Indonesia, Philippines) have migrated to the sister JobStreet/Jora brands and are out of scope for this actor.

How do I get an advertiserId to use with mode=browseByCompany? Run any other mode first and copy the advertiserId field from a job posted by the company you're interested in, then feed it back in as input.

How do I use subclassification? It narrows a classification down to a specific sub-category (e.g. only Developers/Programmers inside Information & Communication Technology). Copy a value from the subCategoryId output field on a job you've already scraped in the category you want, then pass it as input on a later run.

Can I filter by more than one category, work type, or work arrangement at once? Yes. classification and workType and workArrangement are multi-select — pick as many as you want and a job matching ANY of your selections is returned. subclassification and advertiserId accept multiple comma-separated IDs the same way, e.g. advertiserId: "61282529,61359613" pulls current listings from both companies in one run.

How do I re-fetch a specific job I already scraped? Use mode: "byJobId" with the jobId value(s) from a previous run's output — comma-separated for multiple, e.g. jobId: "93889825,93902058". Useful for refreshing a saved shortlist or checking whether a listing is still live.