· 12 min read
JobsDB Scraper: 33 Data Fields, Up to 1,000 Free Results/Month (2026)
Each record carries 33 output fields, including title, companyName, salaryLabel, workTypes, and direct jobUrl links. Covering Hong Kong and Thailand, this Actor features six modes with filters for numeric salary ranges, work arrangements, and posting dates. Results cost $5.00 per 1,000 items on Apify's free plan.
Try it: open JobsDB Scraper on Apify, sign in on the free plan and run the prefilled example.
Can you try JobsDB Scraper before paying?
Yes. Apify's free plan includes $5.00 of prepaid usage every month and asks for no credit card. At $0.005 per result, that covers up to 1,000 results of JobsDB Scraper a month, before run-start charges and platform usage.
JobsDB Scraper was last updated on 2026-08-12. It is one of 1,725 Actors CrawlerBros publishes on Apify, which together have 686,270 lifetime public runs and an average rating of 4.63 out of 5 across 416 reviews.
What does it cost to run JobsDB Scraper?
Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.
| Apify plan | Per result | Per 1,000 results |
|---|---|---|
| FREE | $0.005 | $5.00 |
| BRONZE | $0.00433 | $4.33 |
| SILVER | $0.00367 | $3.67 |
| GOLD | $0.003 | $3.00 |
| PLATINUM | $0.003 | $3.00 |
| DIAMOND | $0.003 | $3.00 |
The maxItems control dictates the total dataset items written during an execution. Result charges apply only to items written to the dataset alongside platform usage fees, so setting a small maxItems value limits overall costs while testing inputs. Keep maxItems low on initial test runs to confirm your search parameters before collecting large datasets.
How do you run JobsDB Scraper from the API?
The schema marks 2 of its 16 controls as required: mode, country. Every value in the payload below comes from the published schema's own prefills, which means you can paste it, swap the token, and get a real result.
Call the synchronous endpoint to start a run and receive dataset items in one request:
curl -X POST "https://api.apify.com/v2/acts/crawlerbros~jobsdb-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"searchJobs","country":"HK"}'
The same run from Python, using the official client:
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"mode": "searchJobs",
"country": "HK"
}
run = client.actor("crawlerbros~jobsdb-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
And from Node.js:
import { ApifyClient } from 'apify-client'
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
const input = {
"mode": "searchJobs",
"country": "HK"
}
const run = await client.actor('crawlerbros~jobsdb-scraper').call(input)
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)
That endpoint blocks until the run completes. Fine while you are testing a handful of records, risky once a run takes minutes: a dropped connection loses the response even though the run itself finished. Switch to an asynchronous start with polling or a webhook before you schedule anything.
Which JobsDB Scraper inputs matter, and which can you skip?
The mode and country parameters are required for every run. Setting mode to searchJobs with keywords isolates specific job roles, whereas mode browseByCompany requires an advertiserId. Optional controls like subclassification or dateRange can be left empty on initial runs to prevent over-filtering.
mode(string): What to fetch. Default:"searchJobs".country(string): Which JobsDB market to scrape. Default:"HK".keywords(string): Job title, skill, or company to search for (mode=searchJobs). Also works as an optional refinement in browseByCategory / browseByLocation. Default:"engineer".location(string): Free-text location/area to browse or filter by, e.g.Central,Kowloon,Bangkok. Required for mode=browseByLocation. Default:"".classification(array): Job categor(y/ies). Pick one or more (OR match) - required for mode=browseByCategory; optional filter for other modes. Leave empty for any category. Default:[].subclassification(string): One or more numeric JobsDB sub-category IDs (comma-separated for OR match) to narrow aclassificationfurther (e.g.6038= Project Engineering under Engineering). Get valid IDs from thesubCategoryIdfield on a previously scraped job. Optional filter for any mode. Default:"".workType(array): Filter by employment type. Pick one or more (OR match). Leave empty for any work type. Default:[].workArrangement(array): Filter by on-site/hybrid/remote work arrangement. Pick one or more (OR match). Leave empty for any arrangement. Default:[].advertiserId(string): One or more numeric JobsDB advertiser IDs (comma-separated for OR match) to browse all current listings from one or more employers/agencies. Required for mode=browseByCompany; get an ID from theadvertiserIdfield on any previously scraped job. Also works as an optional filter in other modes. Default:"".jobId(string): One or more numeric JobsDB job IDs (comma-separated, or pass an array) to look up specific listings directly. Required for mode=byJobId; get an ID from thejobIdfield on any previously scraped job. Ignored in other modes. Default:"".salaryMin(integer): Minimum salary (in the local currency, persalaryTypeperiod). Leave unset for no lower bound.salaryMax(integer): Maximum salary (in the local currency, persalaryTypeperiod). Leave unset for no upper bound.
The other 4 controls, with their defaults, are listed in the input schema on JobsDB Scraper on Apify.
Fixed-choice controls: mode accepts searchJobs (Search jobs by keyword), browseByCategory (Browse jobs by category), browseByLocation (Browse jobs by location), browseByCompany (Browse jobs by company (advertiserId)), latestJobs (newest first, site-wide), byJobId (Look up job(s) by jobId); country accepts HK (Hong Kong (hk.jobsdb.com)), TH (Thailand (th.jobsdb.com)).
What does JobsDB Scraper return?
Returned records provide structured employment data including company identifiers, parsed salary ranges, work arrangements, and job listing URLs. They suit recruitment analysis, salary benchmarking, and job market tracking.
jobId- unique JobsDB listing IDtitle,teaser,bulletPoints[]- job highlightscompanyName,companyUrl,logoUrlemployerId,companyId,advertiserId- internal JobsDB identifiers for the employer/advertiser account (feedadvertiserIdback intomode=browseByCompanyto pull every current listing from that employer;companyIdis the ID embedded incompanyUrl)category,categoryId,subCategory,subCategoryIdlocation,locations[],countryCodeworkTypes[]- e.g.Full time,Part time,Contract/Temp,Casual/VacationworkArrangements[]- e.g.On-site,Hybrid,RemotesalaryLabel- as displayed on the listing (when the advertiser disclosed one)salaryMinValue,salaryMaxValue,salaryPeriod(hourly/monthly/annual),salaryCurrency(HKD/THB) - structured numbers parsed fromsalaryLabelwhen it's a clear numeric range (omitted for non-numeric labels likeNegotiableorCompetitive)listingDate,listingDateDisplayisFeaturedtags[]- urgency/status badges shown on the listing, e.g.Urgently hiring,Expiring soon,Be an early applicantroleIdcountry- market the job was scraped fromjobUrl- link to the live listingrecordType: "job",scrapedAt
These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.
How do you build the workflow end to end?
Open JobsDB Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.
- Select mode searchJobs and set country to HK or TH based on your target market.
- Supply a target job title or role keyword into keywords or supply an area string in location.
- Set maxItems to 1 and execute a test run to inspect the resulting dataset.
- Confirm that the dataset contains required fields such as jobId, title, and jobUrl.
- Extract any advertiserId or subCategoryId values from the output for downstream filter configurations.
- Apply classification, workType, or workArrangement selections to narrow the query.
- Set maxItems to your desired extraction batch size and schedule the full run.
How do you apply it? Three worked playbooks
These are JobsDB Scraper's own documented use cases, each worked through as an operating pattern rather than a description.
Use case 1: Job seekers & career sites
Outcome: Aggregate fresh listings by role, category, location, or remote/hybrid arrangement
Configure: mode="searchJobs", country="HK", keywords="engineer", workArrangement=["3"], maxItems=50
Working method: Run an initial search with workArrangement set to remote work. Inspect the output array to verify workArrangements reflects remote postings. Increase maxItems to collect broader results across the region.
Deliverable: A dataset of live job listings including titles, work arrangements, category values, and direct jobUrl links.
Stop condition: The run emits zero results or jobUrl values are missing from output records.
Use case 2: Recruiters & staffing agencies
Outcome: Monitor competitor job postings and market salary ranges
Configure: mode="browseByCompany", country="HK", advertiserId="61282529", maxItems=50
Working method: Execute mode browseByCompany using a target employer's numeric advertiserId string. Check companyName and listingDate values across returned items. Filter by listingDate to identify newly posted job openings.
Deliverable: A collection of current postings from specified employer accounts detailing job titles and salary labels.
Stop condition: The dataset returns zero listings for an active advertiserId.
Use case 3: HR tech / salary benchmarking tools
Outcome: Collect posted salary ranges by role and market
Configure: mode="browseByCategory", country="TH", classification=["6281"], salaryType="monthly", maxItems=100
Working method: Pull targeted category records using browseByCategory across specific industry IDs. Separate items containing numeric salaryMinValue bounds from unparsed text labels. Group numerical salary output by subCategory to build compensation metrics.
Deliverable: A structured dataset of listings containing parsed numeric salary ranges, salaryCurrency, and category IDs.
Stop condition: More than 80% of emitted dataset records lack populated salaryMinValue fields.
What breaks, and how do you design around it?
If maxItems reaches its cap, restrict search parameters using dateRange or subclassification to fetch smaller dataset batches. Listing links in jobUrl sit behind bot protection against non-browser tools; open those links directly in a regular web browser instead. Structured numeric fields like salaryMinValue are omitted when advertisers enter non-numeric text like Negotiable in salaryLabel.
When should you not use JobsDB Scraper?
Do not use this Actor if you require employment data outside Hong Kong and Thailand. For European market coverage, refer to HelloWork Jobs Scraper or eJobs.ro Scraper. For US federal listings or dedicated remote boards, tools like USAJobs Scraper or Remote Jobs Scraper provide targeted coverage.
What should you check before trusting the output?
- Confirm country matches the target HK or TH selection across all emitted records.
- Verify that jobId contains a populated numeric identifier string.
- Ensure salaryMinValue is populated whenever salaryLabel contains explicit numbers.
- Check that jobUrl contains a valid web link pointing to JobsDB.
- Halt execution if a broad keyword query returns an empty dataset array.
None of this proves a record is correct. It gives a scheduled JobsDB Scraper run defined points where it should stop instead of quietly passing bad data downstream.
Frequently asked questions
How much does running JobsDB Scraper cost?
Results cost $0.005 per item on the free plan, which equals $5.00 per 1,000 results. Apify's free plan includes $5.00 of monthly platform usage, covering up to 1,000 results per month before run-start and platform usage charges.
Why are salaryMinValue and salaryMaxValue missing on some items?
Structured numeric salary fields are included only when the listing provides clear numeric figures. When advertisers write non-numeric text like Negotiable or Competitive inside salaryLabel, structured numeric bounds are omitted to prevent inaccurate parsed values.
How do I use browseByCompany mode?
Provide a numeric JobsDB company identifier in the advertiserId field and set mode to browseByCompany. You can retrieve valid advertiserId values from the advertiserId output field of previously scraped job records.
Can I search for locations using Thai script?
Yes, location accepts Thai text inputs like กรุงเทพ.
Why do jobUrl links fail when checked with non-browser HTTP clients?
JobsDB listing pages sit behind bot-detection that blocks non-browser HTTP requests. The URLs returned in jobUrl are valid, live links that open normally when loaded inside a regular web browser.
Where to go next
When you are ready to run it, open JobsDB Scraper on Apify; the free plan covers up to 1,000 results a month.
Start with the JobsDB Scraper Actor page for the current input schema, pricing tier, and run history.
Other Actors we maintain for related data:
- HKEX Disclosure & Announcements Scraper: Scrape Hong Kong Exchange (HKEXnews) listed-company announcements and disclosures.
- eJobs.ro Scraper: Scrape eJobs.ro, Romania's largest job board.
- SimplyHired Jobs Scraper: Scrape job listings from SimplyHired.com - search by keyword and location, filter by employment type, remote work, date posted, and minimum salary.
- HelloWork Jobs Scraper: Scrape live job listings from HelloWork.com, one of France's largest job boards.
- USAJobs Scraper: Scrape federal job postings from USAJobs.gov - search by keyword, location, agency, grade, schedule, and more.
- Foodpanda Restaurant & Menu Scraper: Scrape Foodpanda restaurants by URL or location.
- Remote Jobs Scraper: Scrape remote job listings from Jobicy - a curated remote job board with 1,000+ active remote jobs.
- CareerJunction Jobs Scraper: Scrape live job listings from CareerJunction.co.za, South Africa's largest job board.
Related guides:
- Remote OK Scraper: 3 Operating Playbooks for Job Data
- ZipRecruiter Jobs Scraper: Practical Use Cases & Data Guide
- ZipRecruiter Jobs Scraper Pro: 3 Practical Use Cases
- Foodpanda Restaurant & Menu Scraper: Up to 2,500 Free Results a Month
Resources
Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-28.
Actor last updated by its maintainers on 2026-08-12.
Run outcome figures cover the 30 day public window ending 2026-09-28.
Featured actors
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.
Run on Apify ↗