# BAANLYY JSON listings feed — version 1

This is the listing file **we** document for agents and developers in Thailand. Send us a URL that returns this JSON. We pull it through the same engine as XML2U, Kyero, CSV and Google Sheets: we show your listings with your name and a link to you, we copy photos, we refresh about once a day, and we take a listing off the site after it has been missing from two daily runs. This is free.

A JSON Schema file sits next to this note: [baanlyy-json-v1.schema.json](/feeds/baanlyy-json-v1.schema.json).

## Envelope

| Field | Required | What it is |
|---|---|---|
| `version` | yes | Must be the number `1`. |
| `listings` | yes | An array of listing objects. An empty array is valid (we will have nothing to show). |

## Each listing

| Field | Required | What it is |
|---|---|---|
| `ref` | yes | Your stable id for this listing. We use it to update the same row later. |
| `deal` | yes | `"rent"` or `"sale"`. |
| `type` | yes | One of: `condo`, `apartment`, `villa`, `townhouse`, `penthouse`, `serviced_apartment`, `house`, `commercial`, `land`. |
| `title` | yes | Short English title, max 160 characters. |
| `price` | yes | A positive number. For rent this is monthly rent in the given currency; for sale this is the asking price. We apply the same sanity bands as the rest of the site (monthly rent under ฿500,000; sale at or above that split; sale above ฿1,000,000,000 is held for review). |
| `city` | yes | City name, for example `"Bangkok"`. |
| `description` | no | Plain text. HTML is stripped if present. |
| `currency` | no | Defaults to `"THB"`. |
| `area` | no | District or neighbourhood, for example `"Thong Lo"`. |
| `lat` | no | Latitude. |
| `lng` | no | Longitude. |
| `bedrooms` | no | Number. `0` is allowed. |
| `bathrooms` | no | Number. |
| `size_sqm` | no | Internal area in square metres. |
| `plot_size_sqm` | no | Plot in square metres, or `null`. |
| `floor` | no | Floor number. |
| `year_built` | no | Four-digit year. |
| `building_floors` | no | How many floors the building has. |
| `tenure` | no | `freehold`, `leasehold`, `foreign_quota`, `company`, or `unknown`. |
| `furnishing` | no | `fully_furnished`, `partly_furnished`, or `unfurnished`. |
| `available_from` | no | `YYYY-MM-DD`. |
| `amenities` | no | Array of short labels. We keep the ones that already exist on BAANLYY (`pool`, `gym`, and so on) and drop the rest. |
| `photos` | no | Array of `http://` or `https://` image URLs. A listing without a photo we could copy will not go live until a photo is stored. |
| `url` | no | Link back to this listing on your own site. |
| `status` | no | `available` (default if omitted), `sold`, `let`, or `withdrawn`. Anything other than `available` counts as not available — we do not show it, and the engine will archive a previously shown row after it has been missing from two daily runs. |

## Example

```json
{
  "version": 1,
  "listings": [
    {
      "ref": "A-101",
      "deal": "rent",
      "type": "condo",
      "title": "EXAMPLE — 2-bed on Thong Lo",
      "description": "Corner unit near BTS Thong Lo. Fictional example for the schema.",
      "price": 45000,
      "currency": "THB",
      "city": "Bangkok",
      "area": "Thong Lo",
      "lat": 13.73,
      "lng": 100.58,
      "bedrooms": 2,
      "bathrooms": 2,
      "size_sqm": 78,
      "plot_size_sqm": null,
      "floor": 12,
      "year_built": 2019,
      "building_floors": 34,
      "tenure": "foreign_quota",
      "furnishing": "fully_furnished",
      "available_from": "2026-11-01",
      "amenities": ["pool", "gym"],
      "photos": ["https://cdn.example.test/a-101.jpg"],
      "url": "https://agent.example.test/listing/101",
      "status": "available"
    }
  ]
}
```

## What we do not do

We do not run your code. We do not scrape a website that is not a feed. This path does not add a trust badge. Email a feed URL to [hello@baanlyy.com](mailto:hello@baanlyy.com?subject=Listing%20feed%20link).
