Skip to content

Thailand Address Standard

Overview

A Thai address does not follow the street-and-city pattern that most European and North American address models assume. It is a four-level administrative nest, written smallest-first, in which the street is optional and the village number is not a street at all.

This article describes the Thai address format, how CDQ represents it in the CDQ address model, and which reference data CDQ maintains so that a Thai address can be validated rather than merely stored. It is the reference for anyone mapping Thai business partner data into CDQ, or consuming curated Thai addresses from CDQ.

In this article, you will understand:

  • How a Thai address is structured, and why the structure differs from the European pattern
  • How each Thai administrative level maps to a concept in the CDQ address model, and which SAP field it reaches
  • Which reference data CDQ holds for Thailand, and what the published values look like
  • Which properties of Thai addresses regularly cause integration errors
  • Where the current CDQ coverage for Thailand still has gaps

Available in:


What makes a Thai address different

Thai addresses are not a street-and-city model with local spelling. They are a four-level administrative nest, written smallest-first, in which the street is optional and the village number is not a street at all. That is the specific reason a positional mapping (first line to street, remaining lines to address supplements) produces a mangled result.

The decisive structural difference is that Thailand has no separate settlement level. In a European address, a city such as Munich sits inside an administrative region and is a distinct concept from it. Thailand has no equivalent: from the province downwards, every level is simultaneously an administrative subdivision and the address itself. There is no "city" that is separate from the district it sits in.

The four levels

Written smallest-first, as they appear on a Thai envelope:

LevelThaiRomanisedEnglishExample
4หมู่บ้าน; in an address, หมู่ with a numberMuban, Moovillageหมู่ 1 (Moo 1)
3ตำบลTambonsubdistrictสำโรงใต้ (Samrong Tai)
2อำเภอAmphoedistrictพระประแดง (Phra Pradaeng)
1จังหวัดChangwatprovinceSamut Prakan

A complete address adds the house number, an optional street, and the post code:

186/1 Moo 1, Old Railway Road
Samrong Tai, Phra Pradaeng
Samut Prakan 10130

Reading that from the bottom up: province Samut Prakan, district Phra Pradaeng, subdistrict Samrong Tai, village number 1, house 186/1 on Old Railway Road.

Bangkok uses different words for the same levels

Bangkok (กรุงเทพมหานคร) is administratively distinct from the 76 provinces, and its two middle levels carry different names:

LevelRest of ThailandBangkok
2 (district)อำเภอ Amphoeเขต Khet
3 (subdistrict)ตำบล Tambonแขวง Khwaeng

The levels are the same; only the words differ.

Both vocabularies must be recognised

Any logic that identifies Thai address levels by their marker words has to accept both sets. Recognising only อำเภอ and ตำบล silently misses every Bangkok address, and Bangkok accounts for a large share of Thailand's registered companies.

Bangkok is also written several ways in Thai. The official form is กรุงเทพมหานคร; the short forms กรุงเทพ and กรุงเทพฯ are both in common use, including in official filings. All three resolve to Bangkok in the CDQ reference data.

Properties that regularly cause integration errors

These are the characteristics that most often break a mapping built on European assumptions.

The village number is not a street

หมู่ (Moo) followed by a number identifies which village within the subdistrict the address sits in. Geocoding services frequently read Moo 1 as Soi 1 (Soi being a numbered lane) and return an invented street name as a result. Moo must be treated as its own level, never as part of the street or the house number.

Many addresses have no street. Outside urban areas a complete, deliverable Thai address is house number, Moo, tambon, amphoe, changwat, post code. No street is involved. Logic that requires a street, or that promotes some other value into the street field to avoid leaving it empty, will corrupt these addresses.

House numbers are compound. 186/1 means plot 186, sub-plot 1. It is a single value, not a range and not two fields. Splitting it on the slash destroys the meaning.

ถนน (Thanon) is a road; ซอย (Soi) is a numbered lane off a road. In a name such as Soi Sukhumvit 21, the number 21 belongs to the lane name, not to the building. A house-number parser must therefore only accept a number at the start of a line.

The district seat usually carries the district's own name. Tambon Hat Yai sits inside Amphoe Hat Yai. A name on its own cannot tell you which level it belongs to; only the marker word (ตำบล versus อำเภอ) can. Logic that assigns a level by matching a name against a district list will systematically mis-file district seats.

Romanisation is not standardised. สำโรงใต้ appears as Samrong Tai, Samrongtai and Samrong-tai, and all three occur in real filings. Matching a Thai place name by exact string comparison misses most real-world spellings.

Truncating a Thai name renames the place

District Phra Pradaeng contains the subdistricts Samrong Tai, Samrong and Samrong Klang. Dropping the final word from Samrong Tai does not abbreviate it. It produces the name of a different, neighbouring subdistrict.

The same applies to mechanically generated spelling variants: Sang Khom and Sangkhom are two different districts. A variant is only safe for matching if its normalised form is unique across the whole country.


How CDQ models a Thai address

The CDQ address model has two parallel hierarchies. Administrative areas represent the political containers and support two levels, typed REGION and COUNTY. Localities represent the places themselves and support up to ten levels, typed CITY, DISTRICT, QUARTER or BLOCK. Streets are held as thoroughfares, with the house number in a separate field.

Thailand's four levels are placed as follows:

Thai levelCDQ conceptTypeSAP field
จังหวัด Changwat (province)administrative area, level 1REGIONregion
อำเภอ Amphoe / เขต Khet (district)administrative area, level 2COUNTYcounty
ตำบล Tambon / แขวง Khwaeng (subdistrict)locality, level 1CITYcity
หมู่ Moo (village)locality, level 2DISTRICTdistrict
StreetthoroughfareSTREETstreet
House numberthoroughfare numbern/ahouse number

Why the levels are placed this way

Four properties drove the placement:

  • The two administrative levels stay together, and the two place levels stay together. Splitting one national hierarchy across both CDQ hierarchies produces a structure that is hard to reason about and harder to query.
  • Each of the four levels reaches its own distinct SAP field. Nothing collapses onto a shared output field, so no level is lost on export.
  • No value is stored twice. The district appears once, as an administrative area.
  • No new concept type is required. The model works with the types the CDQ address model already defines.

Two alternatives were considered and rejected:

Rejected alternativeWhy
Place the amphoe in the locality hierarchyDuplicates the district, which is an administrative subdivision, and leaves the village with no level to occupy.
Type the amphoe as DISTRICTConflicts with the definition of that type. In the CDQ address model DISTRICT is a subdivision of a city, whereas an amphoe is a subdivision of a province. DISTRICT is, however, exactly right for the village, which genuinely is a subdivision of the tambon.
Reading the SAP output

The SAP output reads localities by level, not by type: the city line takes locality level 1 whatever its type, and the district line takes locality level 2. For Thailand this means the subdistrict appears on the city line and the village on the district line.

Worked example

The address used above, expressed in the CDQ address model:

FieldValue
CountryTH
Administrative area 1 (REGION)Samut Prakan
Administrative area 2 (COUNTY)Phra Pradaeng
Locality 1 (CITY)Samrong Tai
Locality 2 (DISTRICT)หมู่ 1 (Moo 1)
Thoroughfare (STREET)Old Railway Road
Thoroughfare number186/1
Post code10130

Reference data CDQ maintains for Thailand

Validating a Thai address requires knowing which provinces, districts and marker words exist. CDQ maintains that reference data centrally, so the same lists back address curation and the published metadata.

These tables are extracts

The examples below show the shape of each dataset, not its full contents. The complete published lists for Thailand, with every province, district, code and alternative name, are on the CDQ Wiki page business partner metadata for Thailand.

Provinces

78 entries: the 76 changwat, Bangkok, and the special administrative city of Pattaya. Each carries a code, names in Thai and Latin script, and the alternative spellings CDQ will also match.

CodeThaiLatinAlso matched as
TH-10กรุงเทพมหานครBangkokKrung Thep Maha Nakhon, กรุงเทพ, กรุงเทพฯ
TH-11จังหวัดสมุทรปราการSamut PrakanChang Wat Samut Prakan, SamutPrakan, Samut-Prakan
TH-50จังหวัดเชียงใหม่Chiang Maiจ.เชียงใหม่, ChiangMai, Chiang-Mai
TH-83จังหวัดภูเก็ตPhuketChang Wat Phuket

Districts

928 entries, one per amphoe and per Bangkok khet, each linked to its province. Note that the alternative names carry the level marker, so a value arriving as อำเภอพระประแดง or Khet Phra Nakhon is matched as readily as the bare name.

CodeProvinceThaiLatinAlso matched as
TH-1001TH-10พระนครPhra Nakhonเขตพระนคร, Khet Phra Nakhon, PhraNakhon, Phra-Nakhon
TH-1010TH-10มีนบุรีMin Buriเขตมีนบุรี, Khet Min Buri, MinBuri, Min-Buri
TH-1104TH-11พระประแดงPhra Pradaengอำเภอพระประแดง, Amphoe Phra Pradaeng, PhraPradaeng, Phra-Pradaeng
TH-5001TH-50เมืองเชียงใหม่Mueang Chiang Maiอำเภอเมืองเชียงใหม่, Amphoe Mueang Chiang Mai, MueangChiangMai

Address terms

The marker words that identify a level from the address text rather than from its position. Each term is typed to the CDQ concept it identifies, and the Thai abbreviations are recognised alongside the full forms.

IdentifiesThaiThai abbreviationLatin
Provinceจังหวัดจ.Changwat
Districtอำเภอ, เขตอ.Amphoe, Khet
Subdistrictตำบล, แขวงต.Tambon, Khwaeng
Villageหมู่, หมู่บ้านม.Moo, Muban
Streetถนน, ซอย, ทางหลวงถ., ซ.Road (Rd), Lane (Ln), Highway (Hwy), Thanon, Soi
Post office boxnot publishednot publishedtupo nor

Spelling variants

Romanised Thai is not standardised, so CDQ publishes the common spelling variants as alternative names on the province and district records. A value matches whether it arrives spaced, joined or hyphenated, with or without its level marker.

Variant kindExample
JoinedSamutPrakan matches Samut Prakan, MinBuri matches Min Buri
HyphenatedSamut-Prakan, Chiang-Mai, Phra-Pradaeng
With the level marker written outChang Wat Samut Prakan, Amphoe Phra Pradaeng, เขตพระนคร
Thai abbreviated markerจ.เชียงใหม่ matches Chiang Mai
Colloquial short formกรุงเทพ and กรุงเทพฯ both match Bangkok
Variants are published only where they are unambiguous

A variant is added only when its normalised form is unique nationally. Where a joined spelling would collide with the official name of a different district, no variant is published, because a wrong match is more damaging than a missed one.

District codes follow the official Thai administrative numbering maintained by the Department of Provincial Administration. The codes are hierarchical and fixed-width: two digits for a province, four for a district, six for a subdistrict, with each level prefixed by its parent. TH-1104 is therefore province 11, district 04, which makes the parent-child relationship readable from the code itself.

ISO 3166-2 and codes below province level

ISO 3166-2 registers only first-level subdivisions, so for Thailand the registered codes are the 77 province codes. District codes such as TH-1104 are ISO-3166-2-style codes built from the official national district number. They follow the same shape as the registered codes and are used consistently across the CDQ reference data, but they are not themselves registered ISO values.

The CDQ Wiki page business partner metadata for Thailand is the place to browse everything published for Thailand: the provinces with their names and alternative names, the districts, legal forms, identifier types, data quality rules and the integrated data sources.

What CDQ validates today

A Thai address submitted to CDQ has its province and district standardised against reference data: the value is matched, and the canonical name and code are written back. Street terms and level markers are recognised in both scripts, so a street or a district can be identified from the address text rather than from its position in the input.

Where an address provider is enabled, it can additionally enrich the levels CDQ holds no reference list for: the subdistrict and the village.


Current limitations

The Thai coverage described above is deliberately incomplete in places. These are the gaps worth knowing about before designing an integration.

LimitationWhat it means for an integration
Subdistricts and villages have no CDQ reference listCDQ maintains reference data for provinces and districts, but not yet for the tambon or the Moo. Those two levels are therefore not standardised against a CDQ-controlled list. They are never discarded, and they can still be corrected or completed by an enabled address provider (see the row below), but the outcome depends on that provider rather than on CDQ reference data.
Provider results for Thai input varyWhere an address provider such as Google Maps or HERE is enabled, CDQ uses it to enrich and correct Thai addresses, and it is currently the main way the subdistrict and village levels get improved. Providers are not equally reliable on Thai input, though: the same address can come back structured differently, and a village number can be returned as an invented street. CDQ therefore constrains provider output rather than adopting it wholesale, which means a provider-derived subdistrict is an improvement, not a guarantee.
Post code consistency is not checkedA Thai post code identifies a district, not a subdistrict. CDQ does not currently cross-check a submitted Thai post code against the district on the same address.
Spelling variant coverage is partial by designAs described above, a variant is published only where it is unambiguous nationally. A romanised Thai name can therefore still fail to match, and the safe assumption is that an unrecognised spelling is a spelling CDQ does not yet publish rather than an invalid place name.
Do not trust a field named city

Because Thailand has no settlement level, data providers make different choices about what belongs in a city field: some populate it with the province, some with the district, some with the subdistrict. When mapping a Thai address from any external source, check what the field actually contains rather than what it is called.

The safest integration reads the marker words in the address text and validates candidate values against the province and district reference data, rather than trusting the position or the name of the source field.


Summary

A Thai address is a four-level administrative nest with an optional street, written smallest-first, and with no separate settlement level. CDQ models it by placing the province and district in the two administrative area levels and the subdistrict and village in the first two locality levels, so that each of the four levels reaches its own distinct output field.

Provinces, districts and the Thai address vocabulary are maintained as CDQ reference data, and the complete published lists can be browsed on the CDQ Wiki. Subdistrict and village validation, and post code consistency checking, are not yet covered.



Your opinion matters!

We are constantly working on providing an outstanding user experience with our products. Please share your opinion about this tutorial!