🇹🇭 Built for Thai real estate agencies LINE-first CRM Your-brand SEO website Thai ETA 2544 e-signatures DDproperty + Hipflat sync Commission engine AI social posts AI video generation Nisa AI chatbot Free 20-min diagnostic →

Add and manage listings — properties, photos, foreign quota

Listings & inventory 25 min read Updated 2026-05-29

How to structure your inventory in DevProp so every listing carries the right metadata for Thai-market search, portal sync, and foreign-quota enforcement.

Listing model — what a record actually contains

Every DevProp listing has 24 mandatory fields and ~30 optional ones. The mandatory set is designed to match what DDproperty and Hipflat require for clean publish, plus what foreign buyers ask for inside the first 3 LINE messages. Filling them properly once saves 8-12 minutes per listing downstream.

Mandatory fields, in form order:

  1. Property type — condo, house, townhouse, commercial, land. Determines which other fields appear.
  2. Transaction type — for sale, for rent, both. Both = single listing with two price fields.
  3. Title (TH + EN) — auto-translates one to the other (you can override).
  4. Location — Google Place ID + your zone tag (Sukhumvit, Silom, Thonglor, Bang Tao, etc.).
  5. Bedrooms / bathrooms / sqm / parking — numbers only, integer for bed/bath/parking.
  6. Floor (if condo) — important for foreign quota cross-reference.
  7. Price — THB (you can show MM by toggling display unit per page).
  8. Foreign quota % (condos only) — see below, this is the field that prevents disasters.
  9. Photos — min 4, max 30 (we recommend 8-15). 1280px+ wide.
  10. Building / project entity — link to a parent building record (created automatically if it doesn't exist).

Foreign quota — the rule that breaks half the deals

Thailand's Condominium Act B.E. 2522 (1979) caps foreign ownership of each condo building at 49% of total saleable area. Every individual unit listing inherits the building's current %.

When you create a building entity in DevProp, you set its foreign_owned_pct. As foreign buyers close on units in that building, the % auto-increments. When the building hits 49%, all unsold units in that building have their foreign_eligible flag flipped to false.

What this means for you:

  1. Your agent filters inventory for a Chinese buyer → only foreign-eligible units appear.
  2. You can't accidentally take a reservation for a foreigner on a full building.
  3. When a Thai buyer closes on a foreign-held unit, the quota drops; affected units flip back to eligible.
  4. The CRM logs the quota change with timestamp + transaction reference for audit.

Bulk import (CSV)

For agencies migrating from another CRM or Excel: Listings → Import → CSV. Template at devprop.io/templates/listings-import.csv. Map your columns to ours during the wizard (50+ aliases are auto-detected: "Bedrooms" / "Beds" / "BR" / "ห้องนอน" all map to bedrooms).

Import speed: ~100 listings/minute. The system pre-validates each row and flags issues (missing photos, invalid foreign quota, malformed coords). You decide whether to fix-and-retry or import-with-warnings.

Photo handling

Upload photos directly (max 30 per listing) or paste URLs (we re-host them on Cloudflare R2 so the source URL going down doesn't kill your listing). The system auto-generates 3 sizes (thumbnail 400px, gallery 1280px, full 2400px). Photos are EXIF-stripped (privacy + smaller size).

Drag-reorder by clicking and dragging the thumbnail. The first photo is the hero (used on portal sync, public website cards, LINE message previews).

Status lifecycle

A listing moves through: DraftActiveReservedUnder contractClosedArchived. Only Active listings appear on portal sync and the public website. Closed is searchable internally (for sold-comp analysis) but invisible to public crawlers.

Auto-archive: listings older than 180 days with no activity (no enquiry, no price change, no photo update) are moved to Stale. You confirm archive or refresh. This keeps your portal listings looking actively-managed (DDproperty downranks stale ads).

Cross-listing same unit (with parent project)

For developer-direct or new-project agencies, you'll often have multiple units in the same building. Best practice: create the Project entity first (Settings → Projects → New), then create individual unit listings linked to the project. Project-level fields (developer, completion date, common-area fees) are shared; unit-level fields (floor, view, price) are individual.

Why this matters: the public SEO website surfaces the project page (e.g. /projects/the-esse-sukhumvit-36) with all linked units below it. Google ranks project pages higher than individual unit listings for searches like "The Esse Sukhumvit 36 price".

Stuck on this step?

Book a free 20-minute call. We'll walk through it on screen-share.

Book diagnostic