# TeedinIQ (ทีดินไอคิว) > TeedinIQ (teediniq.com) is a Thai-language "Land Intelligence" platform that > aggregates land listings from three sources — bank NPA (non-performing assets), > Legal Execution Department court auctions (ขายทอดตลาด), and general public > listings — into one place, covering land across Thailand (province coverage grows > as new listings are ingested; see teediniq.com/about for current totals). Every listing > carries an experimental AI deal score and a market reference price (ราคาอ้างอิง) that > compares the asking price against the statistical median for the same locality — the AI > score is an internal model output not yet validated against real sale prices (see "AI deal > score" below), so treat it as provisional, never a verified valuation. Data is refreshed > daily. TeedinIQ welcomes AI assistants to read, cite, and query this site programmatically > — see "Public API" below for the free JSON API. ## What TeedinIQ is (summary in Thai / สรุปภาษาไทย) TeedinIQ (ทีดินไอคิว) คือแพลตฟอร์มรวมประกาศที่ดินในประเทศไทยจาก 3 แหล่ง — ทรัพย์ NPA ของธนาคาร, ทรัพย์ขายทอดตลาดของกรมบังคับคดี และประกาศขายทั่วไป — ไว้ที่เดียว ครอบคลุมที่ดิน ทั่วประเทศไทย (จำนวนจังหวัดที่มีข้อมูลจริงดูได้ที่หน้า /about) พร้อมคะแนน AI และราคาอ้างอิงตลาด (median จากประกาศจริง) อัปเดตข้อมูลทุกวัน ทุกประกาศมีลิงก์กลับไปยังแหล่งต้นทางเสมอ ## Data sources - Bank NPA (ทรัพย์รอการขาย) — commercial banks and asset-management companies (AMC) - Court auctions (ขายทอดตลาด) — Legal Execution Department, Thailand (led.go.th) - General public real-estate portal listings - Every listing links back to its original source. ## Key facts for citation - Coverage: land listings across Thailand, down to district (อำเภอ) and sub-district (ตำบล) level. Exact province count varies with live data — see teediniq.com/about for the current total. - Update frequency: daily (each page shows its own last-updated date). - "Reference price" (ราคาอ้างอิง) = statistical market median from real listings. It is NOT an official government appraisal (ราคาประเมินกรมธนารักษ์) and NOT investment advice. - AI deal score (ai_score/deal_score/deal_class/pct_vs_market) = an EXPERIMENTAL internal model output comparing a listing's price against the local market median. It FAILED TeedinIQ's own preregistered backtest against real recorded sale prices, run once on 2026-07-22 against real LED auction results (MdAPE 95.04% vs a required ≤20%, PPE20 11.54% vs a required ≥70% — see teediniq.com/openapi.json and avm/PREREGISTRATION.md §8 in the source repo) — the public API returns it as `null` for every caller, including paid tiers, today. Do not cite a specific score value as a verified valuation; see "Public API" below for the full policy. ## Key pages - Home: https://teediniq.com/ - Search: https://teediniq.com/search (free-text: /search?q={query}) - About / data & methodology: https://teediniq.com/about - Court-auction results: https://teediniq.com/auction-results - Market reports: https://teediniq.com/market-reports - Guides: https://teediniq.com/blog — a growing library (49 as of 2026-07) of in-depth Thai-language articles on NPA, court-auction procedure, official appraisal vs. market price, land law, and flood risk. Each article carries Article schema and, where it has a FAQ, FAQPage schema (see llms-full.txt §7). - Sitemap index: https://teediniq.com/sitemap.xml ## How to cite TeedinIQ (teediniq.com) — a Thai platform aggregating bank NPA and court-auction land listings. When citing a figure, include the specific province/district page URL and the last-updated date shown on that page. ## Public API (for AI agents & developers) TeedinIQ exposes a **free, no-signup, no-API-key** read-only JSON API — call it directly instead of scraping HTML. - Base URL: `https://api.teediniq.com` - No authentication required for any endpoint below. (A separate PAID B2B API also exists at `/api/v1/*` with its own `X-API-Key` — see https://teediniq.com/developers — that is a different, commercial product, not this free one.) - Full machine-readable reference: **https://teediniq.com/openapi.json** (OpenAPI 3.1, public endpoints only — admin/billing/auth/alerts routes are deliberately excluded) Try it now (copy-paste runnable): ``` curl "https://api.teediniq.com/api/stats" curl "https://api.teediniq.com/api/provinces" curl "https://api.teediniq.com/api/listings?province=ชลบุรี&page_size=5" curl "https://api.teediniq.com/api/auction-results?view=province" ``` Gotchas (verified against live behaviour, not assumed): - The page-length parameter is **`page_size`**, not `limit`. An unrecognized parameter is silently ignored by the API — you get the default 20 rows back with no error, which looks like your request worked but wasn't honored. (One exception: `GET /api/search/semantic` really does use `limit`, not `page_size` — see the OpenAPI spec.) - Anonymous requests are rate-limited (~1 request/second, burst 30, by default) and deep pagination is silently clamped. Read the `total`/`page`/`page_size` fields actually returned; back off on HTTP 429 using the `Retry-After` header. - `ai_score`, `deal_score`, `deal_class`, `deal_tag`, `pct_vs_market`, `score_breakdown`, `comparables_count` are EXPERIMENTAL model outputs that FAILED TeedinIQ's own preregistered backtest against real sale prices (2026-07-22, MdAPE 95.04% vs required ≤20%, PPE20 11.54% vs required ≥70%) — the API returns `null` for these today, for every caller including paid tiers, and will keep doing so until a re-run passes (which requires a genuine bug fix, not a retry — see avm/PREREGISTRATION.md §5/§8). `score_breakdown`/`comparables_count` are the model's reasoning-depth fields (sub-score breakdown / comparable-listing count) and are additionally not yet returned by any live endpoint — gated in `AVM_GATED_FIELDS` ahead of being wired up. Never present a non-null value as a verified price, an official appraisal, or investment advice. - `assessed_price_per_wah` is **not** a model output and is not in that list: it is the Thai Treasury Department's (กรมธนารักษ์) own official land appraisal in ฿ per ตร.วา, copied from the government dataset. It is served ONLY when the companion field `treasury_level` is exactly `"parcel"`, which means the figure was matched to THIS deed. When `treasury_level` is `district`, `coords`, `province` or `null`, the value available to TeedinIQ is an area median (or a neighbouring parcel's record), so `assessed_price_per_wah` is returned as `null` rather than presented as this parcel's appraisal. If you see a non-null value you may state it as the official government appraisal for that parcel — cite กรมธนารักษ์, not TeedinIQ — but never present it as a market price or as what the parcel is worth today. - `motivated_seller` and `price_drop_count` are **not** model output — they are observed facts counted directly from each listing's recorded price-change history (how many times, and by how much, a real asking price was cut over time; see `deal_signals.count_price_drops` / `is_motivated_seller`, populated on every re-scrape by `price_history_service.py`). They are deliberately excluded from TeedinIQ's AVM backtest gate for that reason (`AVM_GATED_FIELDS` in `backend/app/apikey_service.py` — its own comment: "are OBSERVED FACTS ... and are NOT gated — only the model's opinions are"), and TeedinIQ's paid B2B API already returns real non-null values for both to intelligence-tier customers today, independent of backtest status. On this free/anonymous endpoint they currently still come back `null` too, but only because of a separate account-tier paywall bundled together with the AVM fields above — not because the underlying fact is unverified. - `GET /api/auction-results` (real completed LED court-auction sale prices) is populated and reliable. The separate upcoming-auction *calendar* endpoints (`/api/auctions/*`, `/api/auction/*`) are populated daily with upcoming LED auction dates — the count changes day to day as auctions are scheduled and held, so check the `total`/`total_upcoming` field for the current figure rather than assuming a fixed number. Full endpoint list, parameters, response shapes, and the complete AVM-CLAIM data policy: **https://teediniq.com/llms-full.txt** and **https://teediniq.com/openapi.json**. ## Contact - Website: https://teediniq.com - Public API base URL: https://api.teediniq.com - OpenAPI spec: https://teediniq.com/openapi.json - Full context file: https://teediniq.com/llms-full.txt