XML Format
The XML document — a <properties> list — and one annotated property with its agency and agent. Element names map 1:1 to the JSON field names.
Document
A feed is a single <properties> element. Each <property> carries its own <agency> and <agent>; there are no separate agency or agent lists and no removal list.
<?xml version="1.0" encoding="UTF-8"?>
<havho_feed providerId="acme-realty">
<properties>
<property> <!-- agency, agent and listing fields --> </property>
</properties>
</havho_feed>
| Element / attribute | Required | Notes |
|---|---|---|
<havho_feed> (root) | Required | Confirms the document type without relying on the URL extension. |
<properties> | Required | Wrapper for the active listings; may be empty. One <property> per listing. Listings missing from it are removed from our database on the next sync. |
version, generated_at, updated_since attributes | Optional | Tolerated. When version is present its major must be 2. |
providerId attribute | Optional | Only read the first time this feed imports, to seed the agreed identity — see the callout in the Field Reference. Never put it on a <property>, <agency> or <agent>. |
Property element
<property>
<id>CPT-S-1842</id>
<agency>
<id>AGY-77</id>
<name>Atlantic Edge Properties</name>
</agency>
<agent>
<id>AGT-1049</id>
<fullName>Naledi Mokoena</fullName>
<email>naledi.mokoena@example.co.za</email>
<phone>+27 82 555 0142</phone>
<location>Cape Town, Atlantic Seaboard</location>
<photoUrl>https://cdn.example.com/agents/agt-1049.jpg</photoUrl>
<ffcNumber>FFC-2026-114829</ffcNumber>
</agent>
<type>sale</type>
<status>active</status>
<propertyType>apartment</propertyType>
<title>Sea-facing apartment in Green Point</title>
<description>Renovated two-bedroom apartment with open-plan living areas and sea views.</description>
<price>4250000</price>
<address>14 Ocean View Drive, Green Point, Cape Town, Western Cape</address>
<suburb>Green Point</suburb>
<city>Cape Town</city>
<province>Western Cape</province>
<beds>2</beds>
<baths>2</baths>
<garage>1</garage>
<parking>1</parking>
<unitSize>98</unitSize>
<photoUrls>
<url>https://cdn.example.com/listing/1842/image1.jpg</url>
<url>https://cdn.example.com/listing/1842/image2.jpg</url>
<url>https://cdn.example.com/listing/1842/image3.jpg</url>
</photoUrls>
<features>
<feature>Pool</feature>
<feature>Security Estate</feature>
</features>
</property>
For a <type>rent</type> listing, add <availableNow>true</availableNow> and <availableFrom>2026-10-01</availableFrom>.
<agency> and <agent> are required on every property and identify themselves with <id>. They repeat for each of their properties. Never send <providerId>: it is set automatically from the feed. <sourceUpdatedAt> and <status> are optional and normally left out. See the Field Reference.
Type & value conventions
- Element names are exactly the JSON field names,
camelCaseincluded. - Numbers are plain text that parses cleanly as a number (
4250000, notR 4,250,000). Booleans aretrue/false. - Wrap
descriptionin<![CDATA[ … ]]>rather than escaping inline. photoUrlsholds repeated<url>children;featuresholds repeated<feature>children. Keep the wrapper element even for a single value.- Omit an optional element entirely rather than sending it empty. Declare the document
UTF-8.
Full example
See examples/sample-feed.xml — the same data as sample-feed.json.