JobThai Jobs Scraper avatar

JobThai Jobs Scraper

Pricing

from $0.95 / 1,000 jobs

Go to Apify Store
JobThai Jobs Scraper

JobThai Jobs Scraper

Get JobThai job listings with salary, company, location, qualifications and full descriptions, in English or Thai. No login.

Pricing

from $0.95 / 1,000 jobs

Rating

0.0

(0)

Developer

Pakpoom

Pakpoom

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Categories

Share

Search JobThai, a Thai job board, and get structured job listings: title, company, province, salary, job category, qualifications, benefits and the full description as plain text, in English or Thai. Plain HTTP, no browser, no login.

Who it is for

  • Recruiters and HR teams tracking who hires for which roles, and at what pay, in Thailand.
  • Market and salary researchers building a dataset of Thai job postings by category, province and date.
  • Job aggregators and career sites that want fresh JobThai listings in their own database.
  • Analysts and LLM pipelines that need clean job text and qualification lists to classify or summarize.

What you get

  • Many searches in one run. One keyword per line: a job title, a skill or a company, in English or Thai. An empty keyword returns the newest jobs of the whole site.
  • Full details or a fast list. With includeDetails on, each job page is opened for the description, qualifications, benefits, employment type, number of positions and business type. Turn it off for a much faster run with the search-result fields only.
  • Salary as shown, and as numbers when clear. salaryText is always the text from the site. salaryMin, salaryMax and salaryCurrency (THB) are filled when the salary is a clear amount or range.
  • Only recent jobs. postedWithinDays keeps the jobs updated in the last N days. Results are read newest first, so the search stops as soon as a page holds only older jobs.
  • Duplicates removed. A job found by several of your searches, or twice because the site's pages shift while reading, is returned and charged once.
  • No contact details. Recruiter phone numbers and e-mail addresses are never collected.
  • Failures don't fail the run. A search that fails becomes an error item (never charged) and the other searches continue.
  • Options for scheduled runs. failOnError and minResults end a run as failed when something is wrong, so a scheduled run with alerts cannot fail silently.

Input

FieldDefaultWhat it does
queries["developer"]Search keywords, one per entry (1 to 50).
languageenen or th: the language of the JobThai pages (labels such as province follow it).
maxResults100Stop after this many jobs in total, 1 to 2,000.
postedWithinDaysnoneKeep only jobs updated in the last N days (1 to 365).
includeDetailstrueOpen each job page for the full details.
failOnErrorfalseEnd the run as failed if any search ends in an error item.
minResults0End the run as failed if fewer jobs than this came back.

Example: accountant jobs updated in the last three days

{ "queries": ["accountant", "บัญชี"], "maxResults": 300, "postedWithinDays": 3 }

Output

One dataset item per job. This is a real item from our test runs, shortened:

{
"jobId": 1733100,
"url": "https://www.jobthai.com/en/job/1733100",
"title": "Full Stack Web Developer",
"companyName": "บริษัท โสมาภา อินฟอร์เมชั่น เทคโนโลยี จำกัด (มหาชน)",
"companyId": 251762,
"province": "Bangkok",
"district": "Khlong Sam Wa",
"region": "Bangkok Area",
"jobType": "Computer/IT",
"subJobType": "Programmer/Software Engineer",
"employmentType": "Full-time",
"salaryText": "30,000 - 50,000 THB",
"salaryMin": 30000,
"salaryMax": 50000,
"salaryCurrency": "THB",
"tags": [],
"urgent": false,
"updatedAt": "2026-10-17T10:04:08.000Z",
"numberOfPositions": 3,
"businessType": "Computer / IT",
"query": "developer",
"scrapedAt": "2026-10-17T17:23:03.495Z"
}

The example leaves out description, qualifications, benefits, companyWebsite and workAddress, which every item also has.

FieldNotes
jobId, url, title, urgent, scrapedAtNever null.
salaryMin, salaryMax, salaryCurrencyNull unless the salary is a clear amount or range in THB.
companyName, province, district, region, jobType, salaryText, updatedAtCan be null when JobThai does not show them.
subJobType, employmentType, description, benefits, numberOfPositions, businessType, companyWebsite, workAddressNull when includeDetails is off or the employer left them empty.
tags, qualificationsArrays; empty when none (qualifications is empty when includeDetails is off).

A failed search or an invalid input produces { "type": "error", "input": ..., "message": ... }. Error items are never charged.

Measured limits

From our tests in October 2026 (10 runs, 5,400 jobs, no errors):

  • Depth. One run with an empty keyword returned 2,000 jobs with full details in about 7.5 minutes and stopped at maxResults, not because the site ran out: on the day of testing the site listed about 46,900 jobs. The result pages shift while a run reads them, so about 2% of rows were repeats, which are skipped and not charged.
  • Speed. A list-only run of 300 jobs took 12 to 16 seconds; 200 jobs with full details took about 34 seconds.
  • Salary. About a third of the jobs (33%) showed a clear THB amount or range; the others say Negotiable, Based on experience or free text, and come back as salaryText only.
  • Details. In runs with full details: description on 99% of jobs, qualifications 100%, employment type 100%, business type 100%, sub-category 97%, benefits 90%, company website 82%, number of positions 52%, work address 37%. Title, company, province, category, salary text and update time were present on every job; district on 89% and region on 98%.

Pricing

Pay per result: $0.95 per 1,000 jobs, plus a small start fee per run. No monthly fee (you need an Apify account). Error items and duplicates are never charged.

  • 100 jobs: $0.095.
  • 2,000 jobs (the per-run maximum): $1.90.

You can set a maximum cost per run in Apify; the Actor stops cleanly when it is reached.

FAQ

Does it need a login or cookies? No. It reads the same public pages any visitor sees.

Does it use a proxy? No, it runs from Apify's platform addresses and backs off when the site slows down.

Is it legal? It collects only publicly visible job postings and never reads recruiter contact details. You are responsible for how you use the data, including data-protection law for any personal data in descriptions.

Why is salaryMin empty for so many jobs? About two thirds of employers write Negotiable, Based on experience or a free-text offer, and the Actor does not guess numbers from free text.

How many jobs can I get? Up to 2,000 per run; run several searches for more.

More from this developer


Not affiliated with JobThai. Version 1.0.