Formats d'import
Skautik lit les formats que le secteur utilise déjà : dans la plupart des cas vous envoyez ce que vous envoyez déjà à un portail et ne changez rien d'autre.
En un coup d'œil
| Format | Où il est utilisé | Livraison | Identifiant |
|---|---|---|---|
| OpenImmo | Allemagne, Autriche, Suisse | Dépôt SFTP, ou envoi du ZIP à l'API | verwaltung_techn / objektnr_extern |
| RESO Web API | États-Unis, Canada | Nous tirons depuis votre endpoint selon un calendrier | ListingKey |
| RETS | États-Unis, hérité | Nous tirons depuis votre serveur RETS selon un calendrier | Le champ d'identifiant unique du MLS |
| BLM | Royaume-Uni | Dépôt SFTP, ou envoi à l'API | AGENT_REF |
| Kyero XML | Espagne, Portugal et annonces internationales | Nous récupérons l'URL de votre flux selon un calendrier | id |
| CSV | Partout | Envoi à l'API, dépôt SFTP, ou une URL récupérée | colonne external_id |
| JSON natif | Partout | Envoi à l'API, ou POST de fiches une par une | external_id |
OpenImmo
Le standard germanophone du secteur, et le format que presque tous les CRM de langue allemande savent déjà produire.
Région Allemagne, Autriche, Suisse
Encodage XML 1.2.7, UTF-8, dans un ZIP
Livraison Dépôt SFTP, ou envoi du ZIP à l'API
Identifiant de fiche verwaltung_techn / objektnr_extern
Un transfert est un ZIP contenant un document XML et les images qu'il référence par nom de fichier. Le XML contient un bloc anbieter par fournisseur et un bloc immobilie par bien. Nous lisons la famille 1.2.x et acceptons les anciens documents 1.1 que certains systèmes émettent encore.
Comment fonctionne le retrait
Explicitement. Chaque bien porte un élément aktion dont aktionart vaut CHANGE ou DELETE : un transfert dit donc quoi retirer plutôt que de le laisser déduire.
Images
Les images voyagent dans le ZIP et sont référencées par nom de fichier dans des éléments anhang. L'ordre suit l'ordre du document, et la première image devient l'image principale sauf si une autre est signalée.
Exemple
<?xml version="1.0" encoding="UTF-8"?>
<openimmo>
<uebertragung art="OFFLINE" umfang="TEILZUGRIFF"
modus="NEW" version="1.2.7"
sendersoftware="YourCRM" />
<anbieter>
<anbieternr>AG-4471</anbieternr>
<immobilie>
<objektkategorie>
<nutzungsart WOHNEN="true" />
<vermarktungsart KAUF="true" />
<objektart><wohnung wohnungtyp="DACHGESCHOSS" /></objektart>
</objektkategorie>
<geo>
<plz>10999</plz>
<ort>Berlin</ort>
<strasse>Oranienstrasse</strasse>
</geo>
<preise><kaufpreis>429000</kaufpreis></preise>
<flaechen>
<wohnflaeche>74</wohnflaeche>
<anzahl_zimmer>3</anzahl_zimmer>
</flaechen>
<freitexte>
<objekttitel>Dachgeschosswohnung mit Balkon</objekttitel>
</freitexte>
<anhaenge>
<anhang location="INTERN" gruppe="BILD">
<anhangtitel>Wohnzimmer</anhangtitel>
<daten><pfad>wohnzimmer.jpg</pfad></daten>
</anhang>
</anhaenge>
<verwaltung_techn>
<objektnr_extern>AG-4471-0812</objektnr_extern>
<aktion aktionart="CHANGE" />
</verwaltung_techn>
</immobilie>
</anbieter>
</openimmo>Bon à savoir
- anzahl_zimmer est un nombre de pièces selon la convention allemande et inclut généralement le séjour. Nous le mappons vers les pièces, et n'en déduisons pas de nombre de chambres.
- Un transfert marqué TEILZUGRIFF est une mise à jour partielle et n'implique jamais que les biens absents doivent être retirés. Seul VOLLZUGRIFF est traité comme un remplacement complet.
- Les prix sont bruts ou nets selon les champs présents. Nous lisons les champs de prix tels qu'ils sont fournis plutôt que d'en dériver un de l'autre.
RESO Web API
Le standard MLS moderne. Si vos données viennent d'un MLS doté d'une Web API certifiée, c'est la voie qui demande le moins de mappage.
Région États-Unis, Canada
Encodage OData 4.0 sur JSON, Data Dictionary 1.7 ou ultérieur
Livraison Nous tirons depuis votre endpoint selon un calendrier
Identifiant de fiche ListingKey
Vous fournissez la racine du service et les identifiants, et nous répliquons la ressource Property, en suivant Media et OpenHouse là où elles sont exposées. Comme le Data Dictionary normalise déjà les noms de champs et les énumérations, le mappage est en grande partie automatique.
Comment fonctionne le retrait
Par statut plutôt que par suppression. Une annonce dont le StandardStatus quitte l'ensemble actif est retirée de notre côté ; les fiches ne sont pas supprimées, l'historique survit donc.
Images
Lues depuis la ressource Media et récupérées par URL. MediaModificationTimestamp nous permet de ne re-télécharger que ce qui a changé plutôt que toutes les images à chaque exécution.
Exemple
GET /Property?$filter=ModificationTimestamp gt 2026-08-11T04:00:00Z
&$orderby=ModificationTimestamp
&$expand=Media
&$top=200
{
"@odata.context": "…/$metadata#Property",
"value": [
{
"ListingKey": "MLS-88213004",
"StandardStatus": "Active",
"ListPrice": 429000,
"LivingArea": 796,
"LivingAreaUnits": "Square Feet",
"BedroomsTotal": 2,
"City": "Austin",
"StateOrProvince": "TX",
"ModificationTimestamp": "2026-08-11T09:14:22Z"
}
]
}Bon à savoir
- La réplication est incrémentale sur ModificationTimestamp. Nous faisons chevaucher la fenêtre entre exécutions, car une fiche validée juste après une coupure serait sinon manquée pour toujours.
- LivingAreaUnits est respecté plutôt que supposé. Un flux en pieds carrés est converti une fois à l'import, pas traité silencieusement comme métrique.
- Les champs locaux hors Data Dictionary sont conservés mais pas mappés, leur sens étant propre à un MLS.
RETS
Pris en charge pour les flux qui n'ont pas encore migré vers la Web API, et traité comme une voie de migration plutôt que comme une destination.
Région États-Unis, hérité
Encodage RETS 1.7.2, requêtes DMQL2
Livraison Nous tirons depuis votre serveur RETS selon un calendrier
Identifiant de fiche Le champ d'identifiant unique du MLS
RETS est antérieur au Data Dictionary : les noms de champs sont donc propres à chaque MLS et exigent un mappage explicite que nous construisons une fois avec vous. Tout le reste de l'import se comporte de la même façon.
Comment fonctionne le retrait
Par champ de statut, comme avec la Web API. Certains serveurs n'exposent les fiches supprimées que par une requête distincte, que nous utilisons là où elle existe.
Images
Récupérées via GetObject, un appel par annonce, ce qui rend les imports RETS plus lents qu'un tirage équivalent en Web API.
Bon à savoir
- RETS est en cours de retrait dans tout le secteur. Passez à la Web API dès que votre MLS la propose : le travail de mappage disparaît et les imports deviennent nettement plus rapides.
- Les noms de champs, les énumérations et même les formats de date varient d'un MLS à l'autre : un connecteur RETS se configure donc individuellement plutôt qu'automatiquement.
BLM
Le format de chargement en masse du Royaume-Uni. Presque tous les CRM d'agence britannique savent l'émettre, ce qui en fait généralement le chemin le plus court pour faire entrer du stock britannique.
Région Royaume-Uni
Encodage Texte délimité, en sections, généralement avec un ZIP d'images
Livraison Dépôt SFTP, ou envoi à l'API
Identifiant de fiche AGENT_REF
Un fichier .blm est découpé en sections #HEADER#, #DEFINITION# et #DATA#. La ligne de définition nomme les colonnes : le format est donc auto-descriptif et l'ordre des colonnes n'a pas à être convenu à l'avance.
Comment fonctionne le retrait
Par indicateur. PUBLISHED_FLAG à 0 retire un bien. Une fiche qui disparaît simplement d'un fichier ultérieur ne la retire pas, car un export tronqué effacerait sinon le stock d'une agence.
Images
Référencées par nom de fichier dans les colonnes MEDIA_IMAGE_00 à MEDIA_IMAGE_NN, les fichiers étant fournis à côté.
Exemple
#HEADER#
Version : 3
EOF : '^'
EOR : '~'
#DEFINITION#
AGENT_REF^ADDRESS_1^TOWN^POSTCODE1^POSTCODE2^PRICE^
PUBLISHED_FLAG^BEDROOMS^PROP_SUB_ID^MEDIA_IMAGE_00~
#DATA#
BR-10024^12 Oranien Street^London^SE1^4TX^650000^
1^2^1^BR-10024-01.jpg~
#END#Bon à savoir
- L'en-tête déclare ses propres séparateurs de champ et d'enregistrement. Nous les lisons dans le fichier plutôt que de supposer le circonflexe et le tilde habituels.
- PROP_SUB_ID encode le type de bien sous forme d'un nombre dont le sens est fixé par la spécification, pas par l'expéditeur.
- Les prix sont en livres entières. Un fichier passé par un tableur et ayant acquis des décimales est rejeté plutôt qu'arrondi.
Kyero XML
Un schéma court et lisible, largement utilisé pour du stock résidentiel international, et facile à émettre depuis un système sans export spécifique à l'immobilier.
Région Espagne, Portugal et annonces internationales
Encodage Flux XML, version 3
Livraison Nous récupérons l'URL de votre flux selon un calendrier
Identifiant de fiche id
Un seul document contient tous les biens, avec les prix, un type, des composantes de localisation et des descriptions par langue. Sa simplicité est le point : un flux complet est simple à générer et à vérifier à l'œil.
Comment fonctionne le retrait
Implicitement. Le flux est un état complet du stock actuel : tout ce qui est absent d'une récupération réussie est retiré. C'est le seul format où l'absence signifie retrait.
Images
Référencées par URL dans des éléments image, chacun avec un id qui fixe l'ordre d'affichage.
Exemple
<?xml version="1.0" encoding="UTF-8"?>
<root>
<kyero><feed_version>3</feed_version></kyero>
<property>
<id>4471-0812</id>
<date>2026-08-11 09:14:22</date>
<ref>AG-4471-0812</ref>
<price>429000</price>
<currency>EUR</currency>
<price_freq>sale</price_freq>
<type>Apartment</type>
<town>Marbella</town>
<province>Malaga</province>
<country>Spain</country>
<beds>2</beds>
<baths>1</baths>
<surface_area><built>74</built></surface_area>
<images>
<image id="1"><url>https://example.com/1.jpg</url></image>
</images>
</property>
</root>Bon à savoir
- Comme l'absence signifie retrait, une récupération échouée ou tronquée pourrait effacer votre stock. Nous refusons un flux qui a rétréci de plus d'une proportion configurable, et alertons à la place.
- price_freq distingue un prix de vente d'une période de location. L'omettre rend le prix ambigu, et nous rejetons plutôt que de deviner.
CSV
Le repli quand rien d'autre ne convient. Tout système sait produire un tableur, et un mappage transforme vos noms de colonnes en les nôtres.
Région Partout
Encodage RFC 4180, UTF-8, séparé par des virgules
Livraison Envoi à l'API, dépôt SFTP, ou une URL récupérée
Identifiant de fiche colonne external_id
Fournissez une ligne d'en-tête et mappez-la une fois ; le mappage est stocké sur la source d'import et réutilisé. Seuls external_id et une poignée de colonnes essentielles sont obligatoires, et toute colonne dont vous ne disposez pas peut simplement être absente.
Comment fonctionne le retrait
Par colonne. Une colonne de statut à withdrawn retire un bien. L'absence ne retire jamais rien, car un export partiel est bien trop facile à produire par accident.
Images
Une ou plusieurs colonnes d'URL d'image, ou des noms de fichiers si vous fournissez aussi un ZIP.
Exemple
external_id,title,transaction_type,property_type,price,currency,
living_area,bedrooms,street,postal_code,city,country,status,image_urls
AG-4471-0812,Top-floor apartment,sale,apartment,42900000,EUR,
74,2,Oranienstrasse,10999,Berlin,DE,active,"https://…/1.jpg|https://…/2.jpg"Bon à savoir
- L'argent est un entier en unités mineures, comme partout ailleurs dans l'API. 42900000 avec EUR vaut 429 000,00. Se tromper d'un facteur cent est l'erreur CSV la plus courante : un essai à blanc vous rapporte donc le prix le plus haut et le plus bas qu'il a lus, pour vérification.
- Les colonnes à valeurs multiples utilisent une barre verticale, car une virgule à l'intérieur d'un champ CSV est un problème de guillemets en puissance.
- Un fichier dont l'en-tête ne correspond pas à son mappage stocké est rejeté en totalité plutôt qu'appliqué partiellement.
JSON natif
Notre propre schéma, sans aucune couche de mappage. Le bon choix quand vous maîtrisez le système exportateur.
Région Partout
Encodage NDJSON ou un tableau JSON, conforme au schéma de bien
Livraison Envoi à l'API, ou POST de fiches une par une
Identifiant de fiche external_id
Les fiches correspondent à l'objet property que renvoie l'API, avec external_id ajouté pour que nous puissions rapprocher les vôtres des nôtres. NDJSON est préférable pour tout ce qui est volumineux, puisqu'il se diffuse en flux plutôt que d'exiger tout le document en mémoire.
Comment fonctionne le retrait
Par champ de statut, ou en appelant DELETE directement sur le bien.
Images
Des URL d'images dans un tableau images, récupérées après acceptation de la fiche.
Bon à savoir
- Envoyer des POST individuels convient pour une poignée de fiches et non pour des milliers : utilisez un import pour que l'ensemble soit validé et appliqué d'un bloc.
Tout autre chose
Si votre système exporte un format absent de cette liste, envoyez-nous un échantillon plutôt que d'écrire un convertisseur. Les formats d'échange immobilier forment un ensemble restreint et bien connu, et en ajouter un représente généralement une journée de travail de notre côté contre des semaines du vôtre.
Commencez par l'import en masse pour comprendre le cycle de vie, quel que soit le format que vous retiendrez.