Thailand Company Data — Directors, Financials & Firmographics avatar

Thailand Company Data — Directors, Financials & Firmographics

Pricing

from $25.00 / 1,000 results

Go to Apify Store
Thailand Company Data — Directors, Financials & Firmographics

Thailand Company Data — Directors, Financials & Firmographics

Look up any Thai company by 13-digit juristic ID: firmographics, 5-year financial statements (assets, revenue, net profit, equity), directors & shareholders — official DBD data as clean JSON for KYC, due diligence & B2B intelligence.

Pricing

from $25.00 / 1,000 results

Rating

0.0

(0)

Developer

Berkan Kaplan

Berkan Kaplan

Maintained by Community

Actor stats

0

Bookmarked

18

Total users

3

Monthly active users

14 hours ago

Last modified

Categories

Share

Thailand Company Data — Juristic ID, Financials & Directors (DBD) 🇹🇭

🎉 Turn Thailand's official DBD company records into clean, structured rows — look companies up by 13-digit juristic ID or search them by name, and get the legal name in Thai and English, entity type, status, TSIC industry, capital, up to five years of financial statements and the board of directors, one row per company. Built for KYB / KYC, due diligence, credit screening and B2B research on Thai companies.

🔍 What is Thailand Company Data — and when should you use it?

Give this Actor Thai juristic IDs (the 13-digit registration number, e.g. 0107544000108 for PTT) or company-name keywords, and it returns one record per company from the Department of Business Development (DBD), Ministry of Commerce: identity fields from DBD's keyless OpenAPI (openapi.dbd.go.th), and financial statements, directors and — on request — shareholders from the DBD DataWarehouse (datawarehouse.dbd.go.th). Every run reads DBD live.

Use it when you need: a company profile for KYB or vendor onboarding (Thai and English legal name, entity type, status, registration date, registered address, registered and paid-up capital); several years of assets, liabilities, revenue and net profit for a credit or due-diligence screen; the current board of directors.

Use something else when: you need phone numbers, emails or websites — this Actor returns no contact fields — or complete shareholder lists: with includeShareholders on, DBD's anonymous tier returned an empty shareholder list for 2 of 2 companies in our test, and only the nationality breakdown.

🤖 Use with AI agents

Already on the Apify MCP server? Ask for this Actor by name: foxlabs/thailand-company-data.

Your agent can pay for its own runs. This Actor is pay-per-event with agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — no Apify account or API token of its own. Billing is the same either way: per delivered company record — rows that only report a failed lookup are free from 25 September 2026.

Otherwise paste this into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

I want Thai company records from the Apify Actor `foxlabs/thailand-company-data`.
Input: `juristicIds` is a list of 13-digit Thai juristic IDs (exact match); `searchKeywords` is a list of company-name keywords searched on DBD (loose match). `includeFinancials`, `includeDirectors` and `includeShareholders` switch the data tiers, `financialYears` (1–5) sets how many years of statements, `maxResults` caps the companies.
Start with: {"juristicIds":["0107544000108","0107542000011","0107536000102"]}
Ask me what to look up, run the Actor, then summarise the rows as a table.

The machine-readable API, MCP config and OpenAPI definition live at apify.com/foxlabs/thailand-company-data.md.

📋 Overview

Everything you need to turn DBD company records into structured data — in one Actor, with no login, cookies or API key.

Why teams pick this Actor:

  • Official source — DBD, the Ministry of Commerce department that registers Thai companies and partnerships.
  • 📊 Up to five years of financial statements — assets, liabilities, equity, revenue, costs and net profit per fiscal year.
  • 🧑‍💼 Board of directors — Thai names, English names where DBD has them, nationality.
  • 🛡️ No fabricated figures — a financial block that is impossible for the company's registered size is rejected and flagged in financials_note.
  • 💰 Pay per record — $0.025 per delivered company record, no subscription.
  • 🤖 Agent-ready — MCP + x402 agentic payments.

✨ Features

  • 🔍 Two ways injuristicIds (exact, 13 digits) or searchKeywords (DBD's company-name search, Thai or English).
  • 🧾 Identity — Thai and English legal name, entity type, status, registration date, TSIC code with Thai and English description, registered and paid-up capital, office type, registered address.
  • 📊 Financial statements — the most recent financialYears fiscal years (1–5): total and current assets, cash, total and current liabilities, equity, revenue, total income, cost of sales, gross profit, expenses, net profit and DBD's business-size code.
  • 🧑‍💼 Directors — order, Thai name, English name (when DBD has one), nationality.
  • 👥 Shareholders (optional)includeShareholders asks DBD for the shareholder list and the nationality breakdown.
  • 🧯 Outage-aware — when a DBD service is down, rows say so (identity_available, deep_tier_available, error) instead of looking complete.

🎬 Quick Start

curl -X POST "https://api.apify.com/v2/acts/foxlabs~thailand-company-data/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"juristicIds":["0107544000108","0107542000011","0107536000102"]}'

🚀 Getting Started (3 steps)

  1. Choose your targets — 13-digit juristic IDs for exact matches, or name keywords to search DBD.
  2. Pick the data tiers — financials (3 years) and directors are on by default; shareholders are off.
  3. Run and export — download the dataset as JSON, CSV, Excel, HTML or XML.

📥 Input

{"juristicIds":["0107544000108","0107542000011","0107536000102"]}
FieldTypeDescription
juristicIdsarray13-digit Thai juristic IDs, one per line — exact match. Duplicates are removed; an entry that is not 13 digits gets its own error row.
searchKeywordsarrayCompany-name keywords in Thai or English. Each keyword is sent to the DBD DataWarehouse company search and the companies found are looked up in full. Loose match — see the FAQ.
includeFinancialsbooleanFinancial statements from the DBD DataWarehouse (default on).
financialYearsintegerHow many recent fiscal years to request, 1–5 (default 3). A run on 10 September 2026 with 3 requests fiscal 2025, 2024 and 2023.
includeDirectorsbooleanBoard of directors (default on).
includeShareholdersbooleanShareholder list and nationality breakdown (default off) — see the FAQ for what DBD's anonymous tier returns.
maxResultsintegerCap on companies looked up (default 100, max 100,000). With keywords, the room left after your IDs is split evenly across the keywords.
maxConcurrencyintegerParallel lookups (default 2, max 4). It applies only to identity-only runs; when financials, directors, shareholders or keywords are requested, the DataWarehouse session handles one company at a time.
proxyConfigurationobjectApify Proxy settings (default: Apify Proxy on).

More recipes

  • Name search: {"searchKeywords":["PTT"],"maxResults":2,"financialYears":1,"includeShareholders":true} — in our test this returned 2PT TRANS COMPANY LIMITED and KITTISUPT TRACTOR PARTS AND EQUIPMENTS, not PTT itself: DBD's search matches loosely and lists hits in name order.
  • Thai keyword: {"searchKeywords":["ปตท"],"maxResults":1,"includeFinancials":false,"includeDirectors":false} — returned JUNPEN PTT SRIRACHA CO.,LTD. (บริษัท จันทร์เพ็ญ ปตท.ศรีราชา จำกัด).
  • Identity only, no browser session: {"juristicIds":["0107544000108"],"includeFinancials":false,"includeDirectors":false} — name, status, TSIC, capital and address from the OpenAPI.

📤 Output

One row per company. Rows with matched: true are delivered company records. A juristic ID that fails still writes a row with matched: false and an error saying why — not a 13-digit ID, no DBD data for the ID, or a DBD outage — so a failed ID never disappears silently. From 25 September 2026 these rows are not charged. A keyword that matches nothing adds no row; the run log says so.

FieldDescription
juristic_id13-digit juristic ID
name_th / name_enLegal name in Thai and English
entity_type / statusEntity type and status as DBD writes them, in Thai — e.g. บริษัทมหาชนจำกัด (public limited company), ยังดำเนินกิจการอยู่ (still operating)
register_dateRegistration date (ISO)
tsic_code / tsic_th / tsic_enTSIC code of the registered business objective, with Thai and English description
registered_capital / registered_capital_fmt / paidup_capitalRegistered capital (฿, number and compact text) and paid-up capital (฿)
address / branchRegistered address (Thai) and office type (e.g. สำนักงานใหญ่, head office)
financials[] / financials_textOne entry per fiscal year — fiscal_year, fiscal_year_be, business_size, total_assets, current_assets, cash, total_liabilities, current_liabilities, equity, revenue, total_income, cost_of_sales, gross_profit, expenses, net_profit (฿) plus compact texts for assets, equity, revenue and net profit — and a one-line summary of the latest year
financials_noteOnly when DBD served a financial block that is impossible for the company's registered size: it was rejected and financials is null
directors[] / directors_count / directors_textDirectors — seq, name_th, name_en (when DBD has one), nationality
shareholders / shareholders_by_nationalityOnly with includeShareholders; null otherwise
matched / errortrue for a company record; false plus error for a failed lookup
identity_available / identity_source / identity_partial / identity_note / status_code / entity_type_codeOnly when the OpenAPI was down: where the identity came from and which fields could not be filled
deep_tier_available / deep_tier_errorOnly when the DataWarehouse was down: financials, directors and shareholders are missing for that reason
source / source_url / scraped_atSource name, DBD DataWarehouse profile link, timestamp

Sample — PTT, captured 2026-09-10 (lists trimmed to one entry):

{
"juristic_id": "0107544000108",
"name_th": "บริษัท ปตท. จำกัด (มหาชน)",
"name_en": "PTT PUBLIC COMPANY LIMITED",
"entity_type": "บริษัทมหาชนจำกัด",
"status": "ยังดำเนินกิจการอยู่",
"register_date": "2001-10-01",
"tsic_code": "71209",
"tsic_en": "Other technical testing and analysis, not elsewhere classified",
"tsic_th": "การทดสอบและวิเคราะห์ทางเทคนิคอื่นๆซึ่งมิได้จัดประเภท ไว้ในที่อื่น",
"registered_capital": 28562996250,
"registered_capital_fmt": "฿28.56B",
"paidup_capital": 28562996250,
"address": "555 ถนนวิภาวดีรังสิต, จตุจักร, เขตจตุจักร, กรุงเทพมหานคร",
"branch": "สำนักงานใหญ่",
"financials": [
{
"fiscal_year_be": "2568",
"fiscal_year": 2025,
"business_size": "L",
"total_assets": 2415908875719.89,
"total_assets_fmt": "฿2.42T",
"current_assets": 638011609807.37,
"cash": 187965734884.53,
"total_liabilities": 1193892725120.39,
"current_liabilities": 506697464793.25,
"equity": 1222016150599.5,
"equity_fmt": "฿1.22T",
"revenue": 3185797113928,
"revenue_fmt": "฿3.19T",
"total_income": 3185797113928,
"cost_of_sales": 3022896209457.54,
"gross_profit": 64884825979.91,
"expenses": 3101343541083.11,
"net_profit": 57821881655.75,
"net_profit_fmt": "฿57.82B"
}
],
"financials_text": "Revenue ฿3.19T · Net profit ฿57.82B · Assets ฿2.42T · FY2025",
"directors": [
{
"seq": 1,
"name_th": "นาย ผยง ศรีวณิช",
"name_en": null,
"nationality": "TH"
}
],
"directors_count": 14,
"directors_text": "นาย ผยง ศรีวณิช; นาง พงษ์สวาท นีละโยธิน; นาย คงกระพัน อินทรแจ้ง; นางสาว ชูศรี เกียรติขจรกุล; นาย ชยธรรม์ พรหมศร; นาย วีรพัฒน์ เกียรติเฟื่องฟู; Wilert Puriwat; Teeralak Sangsnit; Vuttikrai Leewiraphan; Sommai Siriudomset",
"shareholders": null,
"shareholders_by_nationality": null,
"matched": true,
"source": "DBD — Department of Business Development, Ministry of Commerce (Thailand)",
"source_url": "https://datawarehouse.dbd.go.th/company/profile/7/0107544000108",
"scraped_at": "2026-09-10T14:53:21.537Z"
}

💼 Use cases

1. KYB and vendor onboarding — verify a Thai company before you sign. Input: its juristic ID. Output: legal names, entity type, status, registration date, address, capital. Use: confirm the entity exists and is still operating.

2. Credit and financial screening — see where a counterparty is heading. Input: a list of juristic IDs with financialYears up to 5. Output: assets, liabilities, equity, revenue and net profit per year. Use: flag shrinking or loss-making companies.

3. Board and governance checks — who runs the company. Input: juristic IDs. Output: the directors with nationality. Use: identify decision-makers and foreign directors.

4. Bilingual record matching — Thai script to English. Input: juristic IDs. Output: the Thai and the English legal name side by side. Use: match Thai-language records to English-language systems.

🔗 Integration

JavaScript / Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('foxlabs/thailand-company-data').call({"juristicIds":["0107544000108"]});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('foxlabs/thailand-company-data').call(run_input={"juristicIds": ["0107544000108"]})
for item in client.dataset(run['defaultDatasetId']).iterate_items():
print(item)

Automation (n8n / Zapier / Make): schedule or webhook → HTTP request to the Actor API with your juristicIds → handle the JSON dataset → push to a sheet, CRM or dashboard.

📊 Pricing

Pay-per-event: $0.025 per delivered company record (≈ $25 per 1,000 companies), plus Apify's run-start event of $0.00005 per GB of memory. Financial years, directors and shareholders do not change the price per company. A row that kept its identity fields but lost the DataWarehouse tier to an outage (deep_tier_available: false) is still a company record. From 25 September 2026, rows that only report a failed lookup (error) are free. Until then Apify still counts them as dataset items. Current pricing.

❓ FAQ

Where does the data come from? From DBD, Ministry of Commerce. Identity fields come from DBD's keyless OpenAPI (openapi.dbd.go.th); financial statements, directors, shareholders and the name search come from the DBD DataWarehouse (datawarehouse.dbd.go.th), which the Actor reads through an anonymous session in a headless browser. No login and no API key.

Juristic ID or keyword? An ID is exact. A keyword goes to DBD's company search, which matches loosely and returns hits in DBD's name order: in our test PTT returned 2PT TRANS COMPANY LIMITED and KITTISUPT TRACTOR PARTS AND EQUIPMENTS, and ปตท returned JUNPEN PTT SRIRACHA CO.,LTD. — not PTT itself. Use the ID when the exact company matters.

Why is financials null with a financials_note? For some companies DBD's public tier serves a financial block that cannot be theirs. The Actor rejects a block when a company DBD sizes as small shows more than ฿500M in assets, or when assets exceed 5,000 times the registered capital, instead of passing the figures on. In our test this happened for both small companies found by keyword, while PTT, CP ALL and Siam Commercial Bank each returned three years.

Why are English director names missing? DBD holds a Thai name for every director but an English name only for some — 13 of 51 directors across our test runs.

What does includeShareholders return? What DBD's anonymous tier gives: in our test the shareholder list was empty for 2 of 2 companies, while shareholders_by_nationality came back for both (DBD's own objects — nationality, share count, amount and percentage).

What happens when DBD is down? The row says so. With the OpenAPI down, the identity comes from the DataWarehouse search index (identity_partial: true, with identity_note naming the fields it cannot fill), or the row becomes matched: false with an error. With the DataWarehouse down, rows keep the identity fields and get deep_tier_available: false, and a keyword-only run returns one error row per keyword.

What if I start it with no input? It runs the three demo companies (PTT, CP ALL, Siam Commercial Bank) and says so in the log.

Can I export to CSV / Excel / JSON? Yes — directly from the Apify dataset.

🐛 Troubleshooting

  • Not a 13-digit Thai juristic ID — skipped. — the entry has other characters or the wrong length. If no entry is valid and there are no keywords, the run stops with a message listing them.
  • No DBD data found for juristic id … — neither DBD service returned anything for that ID; check the number.
  • A keyword returns other companies, or nothing — keywords match loosely; use juristic IDs for exact companies.
  • The run is slow — financials, directors and shareholders go through one DataWarehouse session, one company at a time; switch off the tiers you don't need or lower financialYears.
  • identity_available: false or deep_tier_available: false — a DBD service was down during the run; re-run later.

The Actor reads company records that DBD makes publicly available, without a login. Director and shareholder names are personal data under Thailand's Personal Data Protection Act B.E. 2562 (2019) — process them only for a lawful purpose such as KYC or due diligence, and check that your use fits DBD's terms. This Actor is not affiliated with DBD or the Ministry of Commerce.

🤝 Support & contact

Changelog

0.1.1 — 2026-09-10 — failed lookups become free (per-record billing) + README corrected

  • You will pay only for delivered company records. The Actor now charges a new company-record event for each delivered company (matched: true). Rows that only report a failed lookup — not a 13-digit ID, no DBD data for the ID, a keyword that could not be searched, a DBD outage that left no identity — are pushed without a charge.
  • Timing: Apify applies pricing changes after a 14-day notice. From 25 September 2026 the pricing switches from the per-dataset-item event to company-record at the same price ($0.025). Until then billing is exactly as before; the code detects the switch by itself.
  • No output field changed.
  • README corrected. The previous README showed inputs this Actor does not read (queries, maxResultsPerQuery, includeRaw) with placeholder values, and claimed things it does not do: whole-registry calls, formation monitoring, relevance-ranked search, contact fields, camelCase rows with a query field, English status values, and free failed lookups before this billing change. This README is written from the code and from test runs on 2026-09-10.

0.1 — 2026-09-07

  • README rebuilt and AI-agent payments (x402) enabled. That README described inputs this Actor does not have and said seven columns had been removed; they had not — the Actor still returns them (see 0.1.1).

0.0

  • Initial release: data from the Thai Department of Business Development (DBD) registry by name or registry ID.