JobThai.com Job Scraper
Pricing
from $0.97 / 1,000 result scrapeds
JobThai.com Job Scraper
Scrape job listings from jobthai.com - Thailand's leading job board. GraphQL API, no proxy, no Playwright. PAY_PER_EVENT.
Pricing
from $0.97 / 1,000 result scrapeds
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
1
Bookmarked
3
Total users
1
Monthly active users
18 days ago
Last modified
Categories
Share

Extract job listings from jobthai.com at scale, in a clean, consistent structure ready for analysis, job boards, recruiting tools and market research. No API key required.
Why this scraper?
🎯 Built for Thailand
A dedicated Thai scraper, not a global tool with a country dropdown. Search, locations and currency (THB) are tuned for jobthai.com.
📄 Complete job data
Full job title and description, direct listing URL and publish date for every record.
💶 Salary data
Salary information parsed from the listing where the employer publishes it, in THB. Missing salaries are returned as null, never guessed.
🏢 Company details
Hiring company name plus the profile details the source publishes, such as logo and company page.
📍 Precise location
City, region and country plus latitude/longitude for mapping and radius analysis.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQuery | string | (empty) | Job title, skill, or free-text keyword (e.g. 'python developer', 'accountant'). |
province | string | (empty) | '01'=Bangkok, '09'=Chon Buri, '10'=Chiang Mai, '99'=Overseas. Leave blank for all. |
jobtype | string | (empty) | Category ID: 4=Accounting, 10=IT, 7=Engineering, 2=Sales, 16=HR, 31=Overseas. Blank=all. |
region | string | (empty) | '1'=North, '2'=Northeast, '3'=Central, '4'=East, '5'=West, '6'=South/Bangkok Area. |
salarymin | integer | 0 | Minimum monthly salary in THB. |
salarymax | integer | 0 | Maximum monthly salary in THB. |
hybridwork | boolean | false | Only show jobs that offer hybrid work arrangements. |
wfh | boolean | false | Only show fully remote / work-from-home jobs. |
onlineInterview | boolean | false | Only show jobs offering online interviews. |
startPage | integer | 1 | Page number to start from (1-indexed, 20 jobs per page). |
maxPages | integer | 0 | Maximum pages to scrape. 0 = unlimited. |
maxResults | integer | 100 | Maximum number of job listings to return. Increase or set to 0 for unlimited (will scrape all 47,000+ jobs - use with maxPages too). |
scrapeDetail | boolean | false | Fetch the detail page for each job: adds description, benefit, GPS coords, contact details, numberOfPositions, employmentType, and more. |
language | string | "en" | 'en' = English field labels. 'th' = Thai field labels. |
fetchDetails | boolean | false | Fetch full job details from individual listing pages. |
Output schema
Every field below is present on every record. Fields the source does not publish for a given job are returned as null rather than omitted.
| Field | Type | Description |
|---|---|---|
jobId | string | Numeric job ID |
companyId | string | Employer company ID |
title | string | Job title |
company | string | Hiring company |
province | string | Province code (see table). Blank = all |
provinceId | string | Province code (e.g. "01" = Bangkok) |
district | string | District name |
districtId | string | District code |
region | string | Region: 1=N 2=NE 3=Central 4=E 5=W 6=S/Bangkok |
regionId | string | Region ID ("6" = Bangkok Area) |
country | string | Country name — only populated for overseas jobs (province="99"). null for all domestic Thai listings |
jobType | string | Job type |
jobTypeId | number | Job category ID |
industry | string | Industrial estate / area name |
industryId | string | Industry ID |
salary | string | Salary range or description |
isUrgent | boolean | true if marked as urgent hiring |
isTopCompany | boolean | true if featured company |
workLocation | string | Free-text work location detail |
transitStations | array | Nearby BTS/MRT/BRT stations with distance (metres) and type |
tags | array | Labels: "Hybrid Work", "Online Interview", "Hybrid Working" |
datePosted | string | ISO date (YYYY-MM-DD) |
updatedAt | string | Full ISO timestamp |
jobUrl | string | Canonical link: https://www.jobthai.com/jobsearch/job/{id} |
scrapedAt | string | ISO timestamp of extraction |
companyWebsite | string | Employer website |
businessType | string | Company business category |
companyBenefit | string | Benefit text from company profile |
description | string | Full job description / responsibilities |
descriptionMarkdown | string | Description in Markdown/plain text. |
benefit | string | Welfare and benefits (company-level) |
applyMethod | string | How to apply |
numberOfPositions | string | Number of open positions |
employmentType | string | FULL_TIME / PART_TIME / CONTRACT |
englishApply | boolean | Whether English CV is accepted |
subJobType | string | Sub-category of job type |
industryArea | string | Industry area. |
subdistrict | string | Sub-district (tambon) |
address | string | Full work address |
latitude | number | GPS latitude — null if employer did not set location |
longitude | number | GPS longitude — null if employer did not set location |
contactName | string | HR contact name |
contactTel | string | HR phone number |
contactFax | string | HR fax number |
contactEmails | array | HR email addresses (trustmail masked) |
contactLineId | string | HR Line ID |
applyExternalLink | string | External application URL (if any) |
Example record
{"jobId": "1881848","companyId": "144124","title": "เจ้าหน้าที่บุคคล","company": "บริษัท เซมมิ เทรดดิ้ง จำกัด","province": "Bangkok","provinceId": "01","district": "Rat Burana","districtId": "0137","region": "Bangkok Area","regionId": "6","country": null,"jobType": "Human Resources","jobTypeId": 16,"industry": null,"industryId": null,"salary": "Based on company’s structure","isUrgent": false,"isTopCompany": false,"workLocation": "","transitStations": [],"tags": [],"datePosted": "2026-07-02","updatedAt": "2026-07-02T16:02:10.000Z","jobUrl": "https://www.jobthai.com/jobsearch/job/1881848","scrapedAt": "2026-07-02T16:10:09.017Z","companyWebsite": "http://www.cemmitrading.co.th","businessType": "Metal","companyBenefit": " - ค่าโทรศัพท์ (เฉพาะ ตำแหน่ง)\r\n- เบี้ยขยัน (400 บาท พนักงานรายผลิต)\r\n- โบนัสประจำปี (ตามผลประกอบการ)\r\n- เสื้อฟอร์มบริษัท\r\n- OT + ค่าข้าว\r\n- วันหยุดประจำปีอย่างน้อย 14 วัน\r\n- วันหยุดพักร้อน \r\n- เงินทุ …","description": "• สรรหาและคัดเลือกบุคลากรให้เหมาะสมกับองค์กร\r\n• จัดทำสัญญาจ้างตามกฎหมายแรงงาน\r\n• ดูแลและจัดทำระบบเงินเดือน\r\n• จัดทำเอกสารและดูแลข้อมูลพนักงาน\r\n• พัฒนาทักษะบุคลากรในองค์กร\r\n• จัดทำการประเมินผลการทำงาน …","descriptionMarkdown": "• สรรหาและคัดเลือกบุคลากรให้เหมาะสมกับองค์กร\r\n• จัดทำสัญญาจ้างตามกฎหมายแรงงาน\r\n• ดูแลและจัดทำระบบเงินเดือน\r\n• จัดทำเอกสารและดูแลข้อมูลพนักงาน\r\n• พัฒนาทักษะบุคลากรในองค์กร\r\n• จัดทำการประเมินผลการทำงาน …","benefit": " - ค่าโทรศัพท์ (เฉพาะ ตำแหน่ง)\r\n- เบี้ยขยัน (400 บาท พนักงานรายผลิต)\r\n- โบนัสประจำปี (ตามผลประกอบการ)\r\n- เสื้อฟอร์มบริษัท\r\n- OT + ค่าข้าว\r\n- วันหยุดประจำปีอย่างน้อย 14 วัน\r\n- วันหยุดพักร้อน \r\n- เงินทุ …","applyMethod": "- สมัครงานผ่านทาง JobThai (Click Apply Now)\r\n- สมัครผ่านทาง E-mail\r\n- สมัครได้ด้วยตนเอง ในวันและเวลาทำการ \r\n- สอบถามเพิ่มเติมได้ตามเบอร์โทรศัพท์ด้านล่าง","numberOfPositions": "2","employmentType": "FULL_TIME","englishApply": false,"subJobType": "Human Resources","industryArea": null,"subdistrict": "Bang Pa Kok","address": "","latitude": 13.678325,"longitude": 100.497889,"contactName": "ฝ่ายบุคคล","contactTel": "02-428-6183-4 ต่อ 212 ","contactFax": "02-427-3418","contactEmails": ["cemmitrading_hr_54@trustmail.jobthai.com"],"contactLineId": "0842074615","applyExternalLink": null}
Examples
Search for วิศวกร roles in กรุงเทพมหานคร:
{"searchQuery": "วิศวกร","region": "กรุงเทพมหานคร","maxResults": 100}
Broad nationwide crawl:
{"searchQuery": "วิศวกร","maxResults": 1000}
Larger run with a hard cap:
{"searchQuery": "วิศวกร","region": "กรุงเทพมหานคร","maxResults": 500}
Daily feed (run on a schedule):
{"searchQuery": "วิศวกร","maxResults": 500}
Schedule this input in the Apify Scheduler (for example daily at 07:00) to keep an always-fresh feed of the newest listings.
💰 Pricing
$0.99 per 1,000 results — you only pay for successfully retrieved listings. Failed retries are never charged.
| Results | Cost |
|---|---|
| 100 | ~$0.10 |
| 1,000 | ~$0.99 |
| 10,000 | ~$9.9 |
| 100,000 | ~$99 |
Flat-rate alternatives typically charge $29–$49/month regardless of usage.
Subscription tiers lower the rate further, down to $0.95 per 1,000 at the highest tier. Use the Max results cap in the input to control your spend exactly.
Performance
| Run size | Typical time |
|---|---|
| 100 results | under 1 minute |
| 1,000 results | 2–4 minutes |
| 10,000 results | 20–35 minutes |
Known limitations
- Salary is only returned when the employer publishes it — many listings carry
nullsalary fields. - Company details vary per listing; the scraper returns what the source publishes and never invents data.
- Very large result sets are bounded by the source's own paging limits.
- Listings can be removed by the source at any time, so a small share of URLs may expire shortly after scraping.
Technical details
- Source: jobthai.com — Thailand job listings
- Coverage: everything the public search exposes, filterable via the input parameters above
- Retry: automatic retry on network errors with exponential backoff
Need a custom scraper?
Unfenced Group builds Apify actors for any website — for free.
If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.
Get in touch: www.unfencedgroup.nl