# Thailand Company Registry Changes — New & Closed (`iam_not_real/thailand-company-registry-changes`) Actor

Find newly registered and dissolved Thai businesses from official DBD monthly open data. Filter by month, province, legal form, registered capital and business objective. Clean change records with provenance on every row.

- **URL**: https://apify.com/iam\_not\_real/thailand-company-registry-changes.md
- **Developed by:** [SUTHEE KOSITWONGSAKUL](https://apify.com/iam_not_real) (community)
- **Categories:** Business, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 delivered company registry changes

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Thailand Company Registry Changes — New & Closed Businesses

Turn official Thai Department of Business Development (DBD) monthly open data into a clean, filterable change feed for newly registered and dissolved businesses.

This Actor is intentionally **not** a generic company lookup scraper. It is designed for sales-intelligence pipelines, market monitoring, data agents, MCP/API workflows, and recurring business-change tracking that need deterministic official registry events rather than raw portal pages.

### What you can query

- `changeType`: `new` or `closed`
- `month`: `latest`, Gregorian `YYYY-MM` (for example `2026-08`), or Buddhist Era `YYYY-MM` (for example `2569-08`)
- `province`: optional Thai province
- `entityType`: optional legal-form filter
- `minRegisteredCapital` / `maxRegisteredCapital`
- `objectiveKeyword`: substring match against the official DBD objective code/description
- `includeAddress`: off by default
- `limit`: 1–5000 records

### Example input

```json
{
  "changeType": "new",
  "month": "latest",
  "province": "สมุทรปราการ",
  "minRegisteredCapital": 500000,
  "objectiveKeyword": "ซ่อม",
  "includeAddress": false,
  "limit": 100
}
```

### Example output

```json
{
  "juristic_id": "0112569000042",
  "legal_name_th": "หส.เจพี ท๊อป จูนเนอร์ การาจ",
  "change_type": "new",
  "registration_date": "2026-08-27",
  "entity_type": "ห้างหุ้นส่วนสามัญนิติบุคคล",
  "entity_type_basis": "derived_from_official_legal_name",
  "registered_capital": 500000,
  "business_objective_code": "45201",
  "business_objective": "...",
  "province": "สมุทรปราการ",
  "source": "Department of Business Development (DBD), Thailand Open Data",
  "source_url": "https://opendata.dbd.go.th/th/dataset/dataset_11_01",
  "license": "Open Data Common",
  "source_updated_at": "...",
  "retrieved_at": "...",
  "source_resource_id": "...",
  "source_resource_name": "..."
}
```

The example above mirrors the structure of an official DBD record. Values can change as DBD publishes new monthly resources.

### Data source and provenance

Version 1 uses only official/public DBD data. The Actor tries the DBD CKAN/DataStore endpoint first, then the official Data.go.th (DGA) mirror, then the Government Data Catalog (`gdcatalog.go.th`) dataset published under the Department of Business Development organization. GDC metadata identifies the organization as `กรมพัฒนาธุรกิจการค้า`, uses Open Data Common licensing, and links the resources back to DBD/openapi infrastructure. The source boundary is fixed in code; users cannot submit arbitrary URLs. Every delivered record identifies the actual official endpoint used and includes source name, source URL, license, resource ID/name, source update timestamp when available, and retrieval timestamp.

The primary DBD packages are `dataset_11_01` (new registrations) and `dataset_11_02` (dissolutions). Their official Data.go.th mirror packages are `dataset_11_0121` and `dataset_11_0219`; the Government Data Catalog mirrors are `gdpublish-dataset-11-0139` and `gdpublish-dataset-11-0228`.

DBD publishes monthly resources. The Actor selects a resource by the expected dataset, expected Thai resource-name token, requested month, and expected column schema. This prevents a mislabeled or cross-linked resource from silently becoming output. For `month=latest`, the Actor may use the latest valid resource available from an official mirror when earlier official routes are unavailable. Mirrors can lag the DBD primary and each other. For an explicit month, it never silently downgrades to an older month; if that exact official month cannot be obtained, the run fails closed.

#### Entity type note

The monthly new/closed resources do not expose a dedicated entity-type column. In v1, `entity_type` is therefore derived conservatively from the official Thai legal-name prefix (`บจก.`, `บมจ.`, `หจก.`, `หส.`, or equivalent long form). Every such value is explicitly labeled with `entity_type_basis = derived_from_official_legal_name`. If the prefix is not recognized, the field is `null`; the Actor does not guess.

#### Address minimization

`registered_office_address` is omitted by default. Set `includeAddress` to `true` only when the registered office is necessary for your lawful use case.

### Pricing

Pay per event (PPE) target:

- platform-managed `apify-actor-start`: **$0.00005** per actual Actor run
- custom `company-change`: **$0.01** per delivered company-change dataset record (primary event)
- `apify-default-dataset-item`: must remain removed/disabled so a delivered row is not double-charged
- platform usage pass-through to the buyer: **No**

The product code emits only the custom `company-change` event through `Actor.push_data(..., charged_event_name="company-change")`; it does not manually emit the platform-managed start event. Source failures and filtered/non-delivered records do not emit `company-change`. Active cloud PPE configuration must be verified before publication.

### Limitations

- This is monthly registry-change intelligence, not a real-time government notification service.
- The DBD primary endpoint, the official Data.go.th mirror, and the Government Data Catalog mirror can update on different schedules. During upstream outages, `month=latest` may therefore resolve to an older valid month from the first working official route in the fixed fallback chain. Explicit month requests never silently downgrade to an older month.
- Province text is normalized for common `จ.` / `จังหวัด` prefixes; no geocoding is performed.
- The Actor does not infer creditworthiness, solvency, fraud, scam, or business-quality scores.
- No phone/email enrichment, private data collection, login/CAPTCHA bypass, or arbitrary-site scraping is performed.

### Compliance disclaimer

Registry/public-business information only. This Actor is not legal advice, credit certification, due-diligence certification, or a guarantee of company quality, status, or solvency. Verify material decisions against the current authoritative registry and applicable law.

# Actor input Schema

## `changeType` (type: `string`):

Choose newly registered or dissolved businesses.

## `month` (type: `string`):

Use latest, Gregorian YYYY-MM (for example 2026-08), or Buddhist Era YYYY-MM (for example 2569-08).

## `province` (type: `string`):

Optional Thai province filter. Prefixes such as จ. or จังหวัด are normalized.

## `entityType` (type: `string`):

Optional entity type filter, e.g. บริษัทจำกัด, บริษัทมหาชนจำกัด, ห้างหุ้นส่วนจำกัด, ห้างหุ้นส่วนสามัญนิติบุคคล. In v1 this is deterministically derived from the official legal-name prefix and clearly labeled as derived.

## `minRegisteredCapital` (type: `number`):

Minimum registered capital in Thai baht. Records below this amount are excluded.

## `maxRegisteredCapital` (type: `number`):

Maximum registered capital in Thai baht. Records above this amount are excluded.

## `objectiveKeyword` (type: `string`):

Case-insensitive substring match against the official DBD objective code and description.

## `includeAddress` (type: `boolean`):

Off by default to minimize unnecessary address data. When enabled, returns the official registered-office address from DBD.

## `limit` (type: `integer`):

Maximum number of matching change records to deliver for this run.

## Actor input object example

```json
{
  "changeType": "new",
  "month": "latest",
  "includeAddress": false,
  "limit": 100
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("iam_not_real/thailand-company-registry-changes").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("iam_not_real/thailand-company-registry-changes").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{}' |
apify call iam_not_real/thailand-company-registry-changes --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,iam_not_real/thailand-company-registry-changes"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/9ROicuO8jG0Wd8KJq/builds/d14DggvU5nLpvc238/openapi.json
