Property feed specification for Propal
For website admins. Build an RSS file so Propal can import an agent's listings and photos into their account.
1. Build the RSS file
Have your website generate an RSS 2.0 file like the sample below, adding Propal fields with the
propal:prefix.2. Make the link public
The file must open without a login, for example
https://your-site.com/feed.xml.3. Send the link to the agent
The agent pastes the link into Propal, which shows a preview to review before importing.
propal: fields to be read accurately.Link requirements
| Item | Value |
|---|---|
| Protocol | https:// (or http://), standard ports 80/443 only |
| Access | Must open without a login (links with embedded user:password are not supported) |
| File size | 5 MB maximum |
| Items per import | 200 items maximum (extra items are dropped) |
| Content-Type | application/rss+xml, application/xml or text/xml |
| Encoding | UTF-8, no gzip needed |
| Not allowed | <!DOCTYPE> and <!ENTITY> (rejected for security) |
Structure of each item (<item>)
<guid>your own listing ID. It must never change.<title>listing name (required)<link>URL of the listing page on your website<description>description (HTML tags are stripped to plain text)<propal:updated>last-modified time in ISO 8601 (reserved for automatic sync in the future)
Photos (up to 20 per listing)
Use any one of these three forms. The first photo becomes the cover.
<media:content url="..." medium="image"/><enclosure url="..." type="image/jpeg"/><propal:image>URL</propal:image>(repeat for each photo)
Photo URLs must be publicly reachable, with no login and no hotlink blocking. JPG / PNG / WebP only, 10 MB per photo maximum. Propal downloads each photo, resizes it (longest side 1600 px), converts it to WebP, strips EXIF/GPS data and stores a copy in the agent's account.
Propal fields
Add them as propal:name tags inside <item>. Leave out any field you have no data for.
| Tag | Meaning | Type | Required | Allowed values / notes | Example |
|---|---|---|---|---|---|
propal:title | Listing name | Text | Required | Can use the RSS <title> instead · max 200 characters | คอนโด ลุมพินี สุขุมวิท 24 |
propal:propertyType | Property type | Fixed value | Required | CONDO, HOUSE, TOWNHOUSE, LAND, COMMERCIAL, APARTMENT, RESORT, POOL_VILLA, WAREHOUSE | CONDO |
propal:listingType | Listing type | Fixed value | Required | SALE, RENT, BOTH (sale and rent), INSTALLMENT (direct installments from the owner) | SALE |
propal:price | Sale price (THB) | Number | By listing type | Required for SALE or BOTH · digits only | 3500000 |
propal:rentalPriceMonthly | Monthly rent (THB) | Number | By listing type | Required for RENT or BOTH · digits only | 25000 |
propal:province | Province | Text | Optional | กรุงเทพมหานคร | |
propal:district | District | Text | Optional | วัฒนา | |
propal:subdistrict | Sub-district | Text | Optional | คลองตันเหนือ | |
propal:postalCode | Postal code | Text | Optional | 5 digits | 10110 |
propal:address | Address | Text | Optional | Max 500 characters | 123/45 ถ.สุขุมวิท 24 |
propal:areaSqm | Usable area (sqm) | Number | Optional | 45 | |
propal:landRai | Land area (rai) | Number | Optional | 1 | |
propal:landNgan | Land area (ngan) | Number | Optional | 2 | |
propal:landSqwa | Land area (sq wah) | Number | Optional | 50 | |
propal:bedrooms | Bedrooms | Integer | Optional | 2 | |
propal:bathrooms | Bathrooms | Integer | Optional | 2 | |
propal:floors | Floors | Integer | Optional | 5 | |
propal:parkingSpaces | Parking spaces | Integer | Optional | 1 | |
propal:securityDeposit | Security deposit (THB) | Number | Optional | Rental listings only | 50000 |
propal:latitude | Latitude | Number | Optional | -90 to 90 | 13.7305 |
propal:longitude | Longitude | Number | Optional | -180 to 180 | 100.5695 |
propal:locationUrl | Map link | Text | Optional | Starts with http(s):// or coordinates "lat, lng" | https://maps.google.com/... |
propal:videoUrl | Video link | Text | Optional | Starts with http(s):// | https://youtube.com/... |
propal:virtualTourUrl | Virtual tour link | Text | Optional | Starts with http(s):// | https://... |
propal:websiteUrl | Listing page link | Text | Optional | Your listing page URL · falls back to <link> if omitted | https://... |
propal:hasFurniture | Furnished | true/false | Optional | true or false | true |
propal:petsAllowed | Pets allowed | List | Optional | DOG, CAT separated by | e.g. DOG|CAT | แมว|สุนัขเล็ก |
propal:poolLengthM | Pool length (m) | Number | Optional | POOL_VILLA only | 8 |
propal:poolWidthM | Pool width (m) | Number | Optional | POOL_VILLA only | 4 |
propal:poolDepthM | Pool depth (m) | Number | Optional | POOL_VILLA only | 1.4 |
propal:poolType | Pool type | Text | Optional | INFINITY | |
propal:poolSystem | Pool system | Text | Optional | SALTWATER | |
propal:description | Description | Text | Optional | Can use the RSS <description> instead · max 3,000 characters | วิวสวย ใกล้ BTS อโศก |
propal:titleEn | Listing name (English) | Text | Optional | Lumpini Suite Sukhumvit 24 Condo | |
propal:titleZh | Listing name (Chinese) | Text | Optional | 素坤逸24公寓 | |
propal:descriptionEn | Description (English) | Text | Optional | Nice view, near BTS Asoke | |
propal:descriptionZh | Description (Chinese) | Text | Optional | 风景优美,靠近BTS | |
propal:downPayment | Down payment (THB) | Number | Optional | INSTALLMENT only | 200000 |
propal:monthlyInstallment | Monthly installment (THB) | Number | By listing type | Required for INSTALLMENT | 15000 |
propal:installmentMonths | Installment term (months) | Integer | By listing type | Required for INSTALLMENT · 1–600 | 120 |
propal:installmentInterestPct | Installment interest (% per year) | Number | Optional | 0–100 (% per year) | 0 |
propal:commonFeeMonthly | Monthly common fee (THB) | Number | Optional | 1500 |
Filling rules
- Numbers digits only, with no commas, units or symbols, e.g.
3500000 - Fixed values use the English codes in the table (uppercase)
- true/false use
trueorfalse - Not accepted from feeds title deed data, appraisal price, internal notes and status are ignored even if present
- An item that fails validation is skipped, with the reason shown in the preview. Other items are not affected. A listing whose name already exists in the account is skipped too.
Sample file
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
xmlns:propal="https://propal.app/ns/feed/1"
xmlns:media="http://search.yahoo.com/mrss/">
<channel>
<title>ทรัพย์ของ บริษัท ตัวอย่างพร็อพเพอร์ตี้</title>
<link>https://example.com</link>
<description>รายการทรัพย์ขาย-เช่า</description>
<propal:version>1</propal:version>
<!-- ตัวอย่างที่ 1: คอนโดขาย -->
<item>
<guid isPermaLink="false">EX-1024</guid>
<title>คอนโด ลุมพินี สุขุมวิท 24 ห้องมุม วิวสวน</title>
<link>https://example.com/property/1024</link>
<description><![CDATA[<p>ห้องมุม ชั้น 15 วิวสวน ใกล้ BTS พร้อมพงษ์</p>]]></description>
<propal:updated>2026-10-17T09:00:00+07:00</propal:updated>
<propal:propertyType>CONDO</propal:propertyType>
<propal:listingType>SALE</propal:listingType>
<propal:price>3500000</propal:price>
<propal:areaSqm>45</propal:areaSqm>
<propal:bedrooms>1</propal:bedrooms>
<propal:bathrooms>1</propal:bathrooms>
<propal:province>กรุงเทพมหานคร</propal:province>
<propal:district>คลองเตย</propal:district>
<propal:postalCode>10110</propal:postalCode>
<propal:hasFurniture>true</propal:hasFurniture>
<media:content url="https://example.com/img/1024-1.jpg" medium="image"/>
<media:content url="https://example.com/img/1024-2.jpg" medium="image"/>
</item>
<!-- ตัวอย่างที่ 2: บ้านให้เช่า (ใช้ enclosure สำหรับรูป) -->
<item>
<guid isPermaLink="false">EX-2048</guid>
<title>บ้านเดี่ยว 2 ชั้น หมู่บ้านตัวอย่าง ให้เช่า</title>
<link>https://example.com/property/2048</link>
<description>บ้านเดี่ยว 3 ห้องนอน เลี้ยงสัตว์ได้</description>
<propal:propertyType>HOUSE</propal:propertyType>
<propal:listingType>RENT</propal:listingType>
<propal:rentalPriceMonthly>35000</propal:rentalPriceMonthly>
<propal:bedrooms>3</propal:bedrooms>
<propal:bathrooms>3</propal:bathrooms>
<propal:petsAllowed>DOG|CAT</propal:petsAllowed>
<propal:province>นนทบุรี</propal:province>
<enclosure url="https://example.com/img/2048-1.jpg" type="image/jpeg" length="0"/>
</item>
</channel>
</rss>
Want to import listings from your website?
Sign up for Propal, then go to Settings → Import/Export → RSS / XML link.
Feed spec version 1. New fields may be added without a version change; changing the meaning of an existing field will bump the version.