One feed for every ₿20M+ home in Thailand.
Nine portals scraped weekly. Cross-source dedup. THB-normalised prices. Static geocoding to 14 provinces and 90+ named luxury areas. 12,484 unified properties, 11,959 pinned on the map, 1,618 verified across two or more portals.

Ardinz
Thai native, Bangkok-based. A decade at the intersection of Thai real estate and international capital — sourcing, structuring, and advising on private acquisitions across the Kingdom for foreign principals.
Why this exists: luxury Thai property is fragmented across nine portals and three platforms. Each lists the same villa at different prices, in different currencies, with different photos. Foreign buyers spend weeks reconciling. This site does the reconciliation once, with a verifiable method, and shows the spread.
From nine portals to one feed
- 1ScrapeNine Thai and global luxury portals are crawled on a weekly schedule. Each source has a dedicated spider that extracts listing URLs, prices, specs, photos, and geo metadata.
- 2DeduplicateListings appearing on multiple portals are matched by address, coordinates, and price fingerprint. The result is one canonical record per physical property with a source_count field recording portal coverage.
- 3NormalizeAll prices are converted to Thai Baht at mid-market FX rates captured at scrape time. Property specs (area, bedrooms, bathrooms) are unified to SI units (sqm, whole numbers).
- 4GeocodeProvince and district are resolved from listing metadata. Where lat/lng is available it is stored directly; otherwise it is estimated from the reported district centroid.
- 5PublishThe deduplicated, normalized dataset is exported as a static JSONL file and shipped with the Next.js build. There is no database — all data lives in the bundle and is refreshed at each weekly build.
Common questions
- How often is the data updated?
- The nine portals are scraped on a weekly schedule. A new static build is deployed each time the pipeline completes, so data freshness is typically 5–8 days.
- How are duplicate listings removed?
- Listings are fingerprinted by province, approximate coordinates, property type, and price band. Exact address matches and coordinate proximity within 50 metres are used for high-confidence deduplication. The source_count field on each record shows how many portals carry the listing.
- Does Luxury Thailand accept paid listings or developer sponsorship?
- No. There are no paid placements, no promoted listings, and no developer or agency money. Every listing in the index was discovered organically via the portal scrapers. Acquisition enquiries are handled privately through the concierge.
How the data is built
- Scrape. Nine HTTP scrapers run weekly using
curl-cffiwith Chrome JA3/JA4 impersonation. Each emits JSONL intooutput/residence/<source>.jsonl. - Dedup. Fingerprint = (normalised name, province, bedrooms). Same villa across multiple portals collapses to one record with a
sources: [...]list. - Price-normalise. Per-source price + currency → THB at fixed reference rates (USD 36, EUR 39, GBP 46, SGD 27, HKD 4.6). The unified record carries a median THB plus the per-source breakdown.
- Geocode. Static lookup table of ~110 hand-curated Thai luxury locations (subdistrict / district / area-token / province). Free, instant, predictable. 90% of records get coords; misses are the long tail.
- Classify. Rules-based property type: villa / condo / penthouse / house / townhouse / land / commercial.
- Enrich photos. Detail-page visits pull the real listing photos (skipping agent badges and dealer logos) via JSON-LD, og:image, and inline img tags.
The nine sources
- JamesEdition
- Global luxury portal; richest detail-page JSON-LD
- FazWaz
- Thai-native; rich card payloads with units + project pages
- DDProperty
- Largest Thai sale inventory; weak agent-photo bleed (filtered out)
- DotProperty
- Sister site to TH-Property; Lifull platform
- Thailand-Property
- Lifull platform sibling — overlap with DotProperty
- Knight Frank
- Sitemap-driven; ~1,300 luxury URLs harvested
- Realtor International
- realtor.com TH country index — broker syndication
- LuxuryEstate
- Italian luxury portal with Thailand vertical
- Hipflat (BKK index)
- Cherry-picked from our Bangkok building dataset (₿24M+ floor)
Where we stand
- —We represent the buyer. Not the seller, not the developer. This index is the leverage we negotiate with — the cross-portal spread is our buyers' advantage, handled privately through the concierge.
- —No paid placements. No developer money, no seller fees, no sponsored listings. What you see is the public market, reconciled honestly — which is precisely why the price intelligence is trustworthy.
- —Independent legal counsel. We don't self-certify title or foreign-ownership quota — a vetted, independent Bangkok lawyer reviews every acquisition before completion.
Limitations
- !FX rates are fixed at reference levels — they're not real-time. For a USD-denominated listing the actual THB cost at transaction time will differ.
- !12,484 of 12,484 records carry a price — about 100%. The rest are hide-price listings; we keep them indexed but show no THB figure.
- !Geocoding is area-level for ~80% of records (district / province centroid). Building-precise coordinates require a paid geocoder and aren't worth it for a "browse by region" interface.
The data is the diligence. We do the acquisition.
When you've found the one — or want us to find it — this same intelligence becomes your negotiating position. One desk, complete discretion.