JobsDB Hong Kong & Thailand Jobs Scraper avatar

JobsDB Hong Kong & Thailand Jobs Scraper

Pricing

Pay per event

Go to Apify Store
JobsDB Hong Kong & Thailand Jobs Scraper

JobsDB Hong Kong & Thailand Jobs Scraper

Search JobsDB Hong Kong and Thailand by keyword and location, then export normalized vacancy records for recruiting and hiring-market monitoring.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Export current jobsdb jobs from Hong Kong and Thailand as normalized vacancy records. Search by role or skill, narrow the search by location, and send structured results to spreadsheets, recruiting workflows, dashboards, or hiring-market monitoring systems.

The Actor uses the anonymous JobsDB search feed. It does not need a JobsDB account and does not open every detail page. This listing-focused scope keeps runs fast while preserving the fields most useful for vacancy discovery and recurring market analysis.

What can this JobsDB jobs scraper do?

  • Search Hong Kong, Thailand, or both country feeds.
  • Apply a keyword and an optional location such as Bangkok, Central, or Kowloon.
  • Paginate through current public search results up to a user-set limit.
  • Export stable job IDs, titles, employers, locations, salary labels, work types, classifications, highlights, dates, and links.
  • Deduplicate records by source country and JobsDB job ID.
  • Produce a consistent default dataset for API, spreadsheet, webhook, and scheduled-run workflows.

The Actor extracts search-result vacancy data only. Full job-description enrichment, login-only data, saved jobs, applications, and employer account features are outside this version's scope.

Who is it for?

Recruiters and talent teams

Build focused lists of open roles, identify active employers, and compare hiring demand between Hong Kong and Thailand.

Labor-market and strategy analysts

Schedule the same query repeatedly and compare datasets to monitor new listings, salary signals, location patterns, or category changes.

Job aggregators and data engineers

Feed normalized JobsDB records into a warehouse, spreadsheet, CRM, search index, or internal vacancy product without maintaining browser automation.

Researchers and journalists

Collect a reproducible snapshot of public vacancy search results for a defined keyword and geography.

Why use this Actor?

The public JobsDB search pages can be protected by browser checks. This Actor uses the underlying anonymous search-data operation instead of downloading detail pages or rendering a browser. That provides:

  • lower memory and runtime than full-page browser crawling;
  • exact pagination totals and stable source IDs;
  • consistent field names across Hong Kong and Thailand;
  • no automatic residential proxy charges;
  • explicit errors when the upstream response is invalid rather than silent empty output.

What JobsDB data is extracted?

FieldMeaning
jobIdStable JobsDB vacancy ID
titleVacancy title
employerEmployer or advertiser name, when disclosed
countryHK or TH source feed
locationJobsDB location label
workTypesEmployment-type labels
workArrangementRemote, hybrid, or on-site label when available
classificationTop-level job category
subclassificationMore specific category
salaryDisplayed salary text when disclosed
benefitsSearch-card highlights and benefits
summaryShort listing teaser
listedAtSource listing timestamp
jobUrlCanonical public vacancy URL
applyUrlJobsDB application route
searchQueryQuery that produced the row
scrapedAtExtraction timestamp

JobsDB does not disclose every optional value on every listing. Missing optional values are returned as null or an empty array rather than invented.

How to run the scraper

  1. Open the Actor in Apify Console.
  2. Enter a role or skill in Job keywords.
  3. Optionally enter a JobsDB location.
  4. Select Hong Kong, Thailand, or both.
  5. Set the maximum number of records.
  6. Click Start.
  7. Open the Job listings dataset view or export it as JSON, CSV, Excel, XML, or RSS.

A useful first input is:

{
"query": "data analyst",
"countries": ["HK", "TH"],
"maxItems": 50
}

Input parameters

ParameterTypeDefaultDescription
querystringdata analystRequired role, skill, or phrase; 2–200 characters
locationstringnoneOptional location text understood by JobsDB
countriesarray["HK", "TH"]One or both supported country feeds
maxItemsinteger50Maximum unique records across selected feeds; 1–1,000

When both feeds are selected, the Actor reserves a fair share of the limit for each country. The final feed can use capacity left by an earlier naturally sparse search.

Output example

A current run returns rows shaped like this:

{
"jobId": "94071473",
"title": "Software Engineer (Node.js & React.js)",
"employer": "AVA Intelligent Partners Limited",
"country": "HK",
"location": "Wan Chai, Wan Chai District",
"workTypes": ["Full time"],
"workArrangement": null,
"classification": "Information & Communication Technology",
"subclassification": "Developers/Programmers",
"salary": null,
"benefits": [
"Solid experience in React, Node.js, TypeScript",
"2-4 years relevant experience in programming"
],
"summary": "Build scalable web apps with Node.js & React.js.",
"listedAt": "2026-08-19T04:33:51.000Z",
"jobUrl": "https://hk.jobsdb.com/job/94071473",
"applyUrl": "https://hk.jobsdb.com/job/94071473/apply",
"searchQuery": "software engineer",
"scrapedAt": "2026-08-19T20:40:00.000Z"
}

The example demonstrates the schema; live listings can change or expire after a run.

How much does it cost to extract JobsDB job listings?

The Actor uses pay-per-event pricing: one small start event per run and one item event per unique vacancy saved. Failed, duplicate, or rejected source rows are not charged as items.

Your exact item rate depends on your Apify pricing tier and is shown before starting a run. At the Bronze rate of $0.000792 per item plus the $0.005 start event:

Saved vacanciesExample total
10$0.01292
100$0.08420
1,000$0.79700

These examples describe Actor event charges. Apify plan terms may separately apply. Check the live pricing panel for your tier before a large run.

Recurring monitoring workflow

  1. Create a task with a stable query, countries, location, and limit.
  2. Add a daily or weekly schedule.
  3. Send completed-run data to your webhook, integration, or warehouse.
  4. Compare country + jobId with the previous snapshot.
  5. Flag new IDs, removed IDs, changed salary labels, or shifts in employer activity.

The Actor returns snapshots. It does not retain historical changes or send alerts itself; those are downstream workflow decisions.

Spreadsheet and data-pipeline exports

Use the dataset export menu for CSV or Excel. For an automated pipeline, read the run's default dataset through the Apify API. Stable field names make it straightforward to load records into BigQuery, Snowflake, PostgreSQL, Airtable, Google Sheets, or a search index.

For deduplication outside one run, use the composite key country + jobId. The same numeric ID should not be assumed globally unique across unrelated sources.

Run with the Apify API

Replace YOUR_TOKEN with your Apify token.

cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~jobsdb-hk-th-job-listings-retry/runs?token=YOUR_TOKEN&waitForFinish=120" \
-H "Content-Type: application/json" \
-d '{"query":"cybersecurity","countries":["HK","TH"],"maxItems":50}'

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/jobsdb-hk-th-job-listings-retry').call({
query: 'cybersecurity',
countries: ['HK', 'TH'],
maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("automation-lab/jobsdb-hk-th-job-listings-retry").call(
run_input={
"query": "data analyst",
"location": "Bangkok",
"countries": ["TH"],
"maxItems": 50,
}
)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

Use with Apify MCP

Add the Actor to Claude Code:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/jobsdb-hk-th-job-listings-retry"

Claude Desktop, Cursor, and VS Code MCP setup

Claude Desktop, Cursor, and VS Code can use the same remote MCP server configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/jobsdb-hk-th-job-listings-retry"
}
}
}

Example prompts:

  • “Search JobsDB for 30 data analyst vacancies in Bangkok and summarize the hiring companies.”
  • “Export 100 cybersecurity vacancies from Hong Kong and Thailand and group them by classification.”
  • “Run my JobsDB monitoring task and identify job IDs not present in the previous dataset.”

Limits and failure behavior

  • Only anonymous public JobsDB Hong Kong and Thailand search feeds are supported.
  • maxItems is capped at 1,000 per run.
  • Location matching follows JobsDB's own search interpretation and is not a custom geocoder.
  • Thailand fields can contain Thai-language labels.
  • Salary, work arrangement, benefits, and some employer fields are optional at the source.
  • Listings can expire or be removed after extraction.
  • Full detail descriptions are intentionally excluded.
  • The Actor retries temporary upstream failures three times, then fails non-zero instead of returning a misleading successful empty dataset.

Performance tips

  • Use a specific role phrase instead of a broad single word.
  • Add a location when you need a city or district rather than country-wide results.
  • Start with a modest maxItems while designing a downstream workflow.
  • Use scheduled tasks for repeated inputs rather than manually recreating runs.
  • Avoid assuming a displayed salary label uses one currency; interpret it with the country field.

Legality and responsible use

JobsDB content may be subject to website terms, database rights, copyright, privacy rules, and local law. Extract only public information you have a lawful reason to process. Do not use the Actor for spam, discrimination, harassment, automated applications, or attempts to access private accounts. Minimize retention and protect exported data. You are responsible for your inputs and downstream use.

FAQ and troubleshooting

Why did my run return fewer results than requested?

The source may have fewer matching vacancies, filters may narrow the feed, or duplicate IDs may occur across pagination. Check the query and location, then inspect the run log's source totals.

Why is a salary or work arrangement missing?

JobsDB does not disclose these values for every search result. Missing source values remain null; the Actor does not infer compensation or remote status.

Why did the run fail instead of returning zero rows?

An invalid or challenged upstream response is different from a valid no-result search. The Actor fails after bounded retries so scheduled workflows can alert on a source problem rather than accepting a false empty snapshot.

Does this Actor apply for jobs?

No. It exports public vacancy search records and URLs. Applications, saved jobs, login-only features, and employer workflows are not supported.

Does it scrape full descriptions?

No. V1 deliberately uses search-result records, including the source summary and highlights. This makes regional monitoring faster and less expensive than visiting every detail page.

For broader recruiting automation, explore other public job-feed Actors from automation-lab on Apify. Choose a source-specific Actor when you need another job board; combine datasets downstream using stable source and job identifiers.

Support

If a valid public JobsDB query repeatedly fails, open an Actor issue with the input (remove secrets), run ID, expected country feed, and the relevant log excerpt. Do not include Apify tokens or private candidate data.