# JobThai.com Scraper (`shahidirfan/jobthai-com-scraper`) Actor

Extract live job listings from Thailand's top job board. Get job titles, companies, salaries, descriptions & apply links. Perfect for recruitment analytics, salary benchmarking, market research & AI training datasets. Fully structured, ETL-ready output.

- **URL**: https://apify.com/shahidirfan/jobthai-com-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** Jobs, AI, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## JobThai Jobs Scraper

Collect structured job listings from JobThai with URL-based filters or keyword-driven search input. Build reliable datasets for market research, hiring analysis, lead generation, and competitive monitoring.

### Features

- **Flexible start input** — Run with a full JobThai jobs URL or plain keyword/location filters.
- **Pagination controls** — Limit by both `resultsWanted` and `maxPage` for predictable runs.
- **Rich job dataset** — Includes job, company, location, salary, tags, transit, and update fields.
- **Clean output records** — Excludes null and empty values from dataset items.
- **Proxy-ready runs** — Supports proxy configuration for stronger reliability.

### Use Cases

#### Hiring Market Monitoring
Track active openings by role, region, or company to monitor demand trends over time.

#### Salary and Location Analysis
Compare salary ranges and location distribution to support recruiting strategy or relocation planning.

#### Job Lead Collection
Collect fresh job URLs and role information for outreach pipelines or matching systems.

---

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `url` | String | No | `https://www.jobthai.com/หางาน/งานทั้งหมด` | JobThai jobs URL (supports query filters). |
| `keyword` | String | No | `developer` | Search term for job title or company. |
| `location` | String | No | `Bangkok` | Location hint (mapped for supported provinces). |
| `resultsWanted` | Integer | No | `20` | Maximum jobs to save. |
| `maxPage` | Integer | No | `3` | Maximum pages to request. |
| `proxyConfiguration` | Object | No | `{ "useApifyProxy": false }` | Optional proxy settings. |

---

### Output Data

| Field | Type | Description |
|-------|------|-------------|
| `id` | Number | Job ID. |
| `jobTitle` | String | Job title text. |
| `companyName` | String | Company name. |
| `companyId` | Number | Company ID. |
| `companyLogoUrl` | String | Company logo URL. |
| `salary` | String | Salary text. |
| `workLocation` | String | Work location details. |
| `provinceId` | String | Province ID. |
| `provinceName` | String | Province name. |
| `districtId` | String | District ID. |
| `districtName` | String | District name. |
| `industrialId` | String | Industrial zone ID. |
| `industrialName` | String | Industrial zone name. |
| `countryName` | String | Country name if present. |
| `jobTypeId` | Number | Job type ID. |
| `jobTypeName` | String | Job type name. |
| `regionId` | String | Region ID. |
| `regionName` | String | Region name. |
| `urgent` | String | Urgency label. |
| `isTopCompany` | Boolean | Top company flag. |
| `tags` | Array | Job tags. |
| `transitStations` | Array | Nearby stations. |
| `updatedAt` | String | Last updated timestamp. |
| `jobUrl` | String | Direct job detail URL. |

---

### Usage Examples

#### Default Run

```json
{
  "url": "https://www.jobthai.com/หางาน/งานทั้งหมด",
  "resultsWanted": 20,
  "maxPage": 3
}
````

#### Keyword Search

```json
{
  "keyword": "developer",
  "resultsWanted": 50,
  "maxPage": 5
}
```

#### URL With Built-In Filters

```json
{
  "url": "https://www.jobthai.com/th/jobs?province=01&jobtype=7&page=1",
  "resultsWanted": 40,
  "maxPage": 4
}
```

***

### Sample Output

```json
{
  "id": 1319950,
  "jobTitle": "เจ้าหน้าที่จัดกิจกรรมคณิตศาสตร์/วิทยาศาสตร์",
  "companyName": "บริษัท สู่อัจฉริยะ จำกัด",
  "salary": "16,000บาท(Full time)/500บาท(Part time)",
  "provinceName": "กรุงเทพมหานคร",
  "districtName": "บางกะปิ",
  "jobTypeName": "งานวิชาการ",
  "updatedAt": "2026-06-01T14:03:58.000Z",
  "jobUrl": "https://www.jobthai.com/th/company/job/1319950"
}
```

***

### Tips for Best Results

#### Use Specific Keywords

Short, role-specific keywords usually produce cleaner datasets than broad terms.

#### Keep Pagination Practical

Start with `resultsWanted: 20` and `maxPage: 3`, then scale after verifying output quality.

#### Prefer Filtered URLs for Precision

When you already know province/job type filters, using a prepared JobThai URL gives tighter results.

***

### Integrations

Connect output data to:

- **Google Sheets** — Share and analyze job feeds quickly.
- **Airtable** — Build searchable hiring databases.
- **Make** — Automate enrichment and notifications.
- **Zapier** — Trigger downstream workflows.

#### Export Formats

- **JSON** — Programmatic integrations.
- **CSV** — Spreadsheet workflows.
- **Excel** — Business reporting.

***

### Frequently Asked Questions

#### Can I run with only keyword and no URL?

Yes. The actor supports keyword-only runs.

#### Does it support pagination?

Yes. It paginates automatically up to `maxPage` and stops at `resultsWanted`.

#### Why are some fields missing in some rows?

Some postings do not publish every attribute; missing values are excluded from output.

#### Does user input override defaults?

Yes. Values you provide at run time always take priority.

#### Can I use proxy settings?

Yes. Use `proxyConfiguration` when needed.

***

### Legal Notice

Use this actor responsibly and ensure your usage complies with JobThai terms and applicable laws.

# Actor input Schema

## `url` (type: `string`):

Any JobThai listing URL (for example /th/jobs, /หางาน/งานทั้งหมด, or URLs with filters).

## `keyword` (type: `string`):

Job keyword, title, or company term.

## `location` (type: `string`):

Location text (for example Bangkok, Nonthaburi, Chonburi).

## `resultsWanted` (type: `integer`):

Maximum number of jobs to collect.

## `maxPage` (type: `integer`):

Maximum number of result pages to request.

## `proxyConfiguration` (type: `object`):

Use Apify Proxy for reliability if needed.

## Actor input object example

```json
{
  "url": "https://www.jobthai.com/หางาน/งานทั้งหมด",
  "keyword": "developer",
  "location": "Bangkok",
  "resultsWanted": 20,
  "maxPage": 3,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "url": "https://www.jobthai.com/หางาน/งานทั้งหมด",
    "keyword": "developer",
    "location": "Bangkok",
    "resultsWanted": 20,
    "maxPage": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/jobthai-com-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "url": "https://www.jobthai.com/หางาน/งานทั้งหมด",
    "keyword": "developer",
    "location": "Bangkok",
    "resultsWanted": 20,
    "maxPage": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/jobthai-com-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "url": "https://www.jobthai.com/หางาน/งานทั้งหมด",
  "keyword": "developer",
  "location": "Bangkok",
  "resultsWanted": 20,
  "maxPage": 3
}' |
apify call shahidirfan/jobthai-com-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=shahidirfan/jobthai-com-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "JobThai.com Scraper",
        "description": "Extract live job listings from Thailand's top job board. Get job titles, companies, salaries, descriptions & apply links. Perfect for recruitment analytics, salary benchmarking, market research & AI training datasets. Fully structured, ETL-ready output.",
        "version": "0.0",
        "x-build-id": "CY3g4Xs9BANvXN1bW"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/shahidirfan~jobthai-com-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-shahidirfan-jobthai-com-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/shahidirfan~jobthai-com-scraper/runs": {
            "post": {
                "operationId": "runs-sync-shahidirfan-jobthai-com-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/shahidirfan~jobthai-com-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-shahidirfan-jobthai-com-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "url": {
                        "title": "JobThai jobs URL",
                        "type": "string",
                        "description": "Any JobThai listing URL (for example /th/jobs, /หางาน/งานทั้งหมด, or URLs with filters)."
                    },
                    "keyword": {
                        "title": "Keyword",
                        "type": "string",
                        "description": "Job keyword, title, or company term."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Location text (for example Bangkok, Nonthaburi, Chonburi)."
                    },
                    "resultsWanted": {
                        "title": "Results wanted",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of jobs to collect.",
                        "default": 20
                    },
                    "maxPage": {
                        "title": "Max pages",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of result pages to request.",
                        "default": 3
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Use Apify Proxy for reliability if needed.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
