Specificație feed anunțuri UniversImobiliar

Un feed este un fișier XML, JSON sau CSV pe care îl publicați la un URL stabil. Îl citim zilnic și anunțurile dvs. apar, se actualizează sau expiră automat pe universimobiliar.ro. Documentul acesta este pentru agenții și dezvoltatori care vor să publice anunțuri fără introducere manuală.

Cum funcționează

  1. Alegeți formatul: XML, JSON sau CSV.
  2. Completați câmpurile de mai jos — un element / un rând per proprietate.
  3. Publicați fișierul la un URL https stabil. Opțional îl puteți proteja cu un header Authorization — ne trimiteți valoarea și o folosim la fiecare citire.
  4. Ne trimiteți URL-ul feed-ului.
  5. Rulăm un test împreună, apoi activăm importul zilnic.

Fără CRM? Folosiți Excel / Google Sheets

Descărcați template-anunturi.csv, completați-l în Excel sau Google Sheets (un rând = un anunț). În Google Sheets: Fișier → Distribuiți → Publicați pe web → format CSV, apoi copiați linkul generat și ni-l trimiteți — acela este URL-ul feed-ului dvs.

Coloanele cu mai multe valori (images, features) se separă cu caracterul |.

Câmpuri

CâmpObligatoriuTip / valori acceptateObservații
external_idDAtext, unic și stabilID-ul din sistemul dvs.
titleDAtext 3–200
deal_typeDAvanzare / inchiriere (acceptăm și sale/rent)
property_typeDAapartament, garsoniera, penthouse, duplex, casa, vila, teren, spatiu_comercial, birou, industrial, hotel (și echivalente EN)garsoniera/penthouse/duplex setează automat subtipul
priceDAnumăr (ex. 85000 sau 85.000)fără TVA dacă vat_included=nu
currencyDAEUR / RON
countyDAjudeț (ex. Cluj, București, Ilfov)
cityDAlocalitate (ex. Cluj-Napoca; pentru București: „București Sector 3")trebuie să corespundă nomenclatorului SIRUTA
districtnucartier/zonă (ex. Mărăști)
energy_classrecomandat (obligatorie legal)A–Glipsa generează avertisment
descriptionrecomandattext simplu, paragrafe separate prin linie goală
imagesrecomandatlistă URL-uri https (XML: <image> repetat; JSON: array; CSV: separate cu |)prima imagine devine imaginea principală
addressnutextnu se afișează public, doar intern/membri
lat, lngnuzecimale WGS84afișăm doar zona aproximativă
phonenutextnu se afișează public
subtypenuapartament / garsoniera / penthouse / duplex
price_unitnutotal / mp / lunaimplicit: luna pentru închiriere, total pentru vânzare
vat_included, negotiablenuda / nu
rooms, bedrooms, bathroomsnunumăr întreg
area_usable, area_builtnum², număr
floornutext (ex. 3, Parter, Demisol)
floors_total, year_builtnunumăr
partitioningnudecomandat / semidecomandat / nedecomandat / open_space
comfortnu1 / 2 / 3 / lux
furnishingnunemobilat / mobilat_partial / mobilat / lux
parking_spotsnunumăr
land_area, front_lengthnu (teren)m², m
commercial_area, building_class (A/B/C), destination, rent_per_sqmnu (comercial)
featuresnulistă text liber (Balcon, Centrală proprie…)
updated_atnudată ISO (2026-10-01)
project_namenu (dezvoltatori)numele proiectuluifolosit pentru asocierea cu pagina proiectului (în curând)

Descărcări

Formatul XML

Rădăcina este <root> și conține un element <ad> pentru fiecare proprietate:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <ad>
    <external_id>ID-UNIC-123</external_id>
    <title>Apartament 2 camere</title>
    <deal_type>vanzare</deal_type>
    <price>85000</price>
    ...
    <images>
      <image>https://exemplu.ro/p1.jpg</image>
      <image>https://exemplu.ro/p2.jpg</image>
    </images>
  </ad>
</root>

Formatul JSON

Obiect cu cheia ads, un array de obiecte; images și features sunt array-uri:

{
  "ads": [
    {
      "external_id": "ID-UNIC-123",
      "title": "Apartament 2 camere",
      "deal_type": "vanzare",
      "price": "85000",
      "images": ["https://exemplu.ro/p1.jpg", "https://exemplu.ro/p2.jpg"],
      "features": ["Balcon"]
    }
  ]
}

Formatul CSV

Primul rând conține numele câmpurilor de mai sus. Delimitatorul poate fi ; sau ,, codare UTF-8 (cu sau fără BOM). Textele care conțin delimitatorul se încadrează între ghilimele ("Apartament 3 camere, Zorilor"). Listele (images, features) se separă cu |.

Ce se întâmplă după import

Pentru administratorul UniversImobiliar

Maparea de lipit în câmpul mapping al feed-ului, în funcție de format:

JSON (itemPath ads):

{
  "itemPath": "ads",
  "fields": {
    "sourceRef": "external_id", "title": "title", "description": "description",
    "transaction": "deal_type", "category": "property_type", "subtype": "subtype",
    "price": "price", "currency": "currency", "priceUnit": "price_unit",
    "vatIncluded": "vat_included", "negotiable": "negotiable",
    "county": "county", "localityName": "city", "zoneName": "district",
    "address": "address", "lat": "lat", "lng": "lng",
    "rooms": "rooms", "bedrooms": "bedrooms", "baths": "bathrooms",
    "surfaceUsable": "area_usable", "surfaceBuilt": "area_built",
    "floor": "floor", "totalFloors": "floors_total", "yearBuilt": "year_built",
    "partitioning": "partitioning", "comfort": "comfort", "furnishing": "furnishing",
    "parkingSpots": "parking_spots", "energyClass": "energy_class",
    "landSurface": "land_area", "frontLength": "front_length",
    "commercialSurface": "commercial_area", "buildingClass": "building_class",
    "destination": "destination", "rentPerSqm": "rent_per_sqm",
    "contactPhone": "phone", "updatedAt": "updated_at"
  },
  "imagesPath": "images",
  "featuresPath": "features"
}

CSV (aceleași câmpuri, itemPath gol — coloanele sunt citite după nume):

{
  "itemPath": "",
  "fields": {
    "sourceRef": "external_id", "title": "title", "description": "description",
    "transaction": "deal_type", "category": "property_type", "subtype": "subtype",
    "price": "price", "currency": "currency", "priceUnit": "price_unit",
    "vatIncluded": "vat_included", "negotiable": "negotiable",
    "county": "county", "localityName": "city", "zoneName": "district",
    "address": "address", "lat": "lat", "lng": "lng",
    "rooms": "rooms", "bedrooms": "bedrooms", "baths": "bathrooms",
    "surfaceUsable": "area_usable", "surfaceBuilt": "area_built",
    "floor": "floor", "totalFloors": "floors_total", "yearBuilt": "year_built",
    "partitioning": "partitioning", "comfort": "comfort", "furnishing": "furnishing",
    "parkingSpots": "parking_spots", "energyClass": "energy_class",
    "landSurface": "land_area", "frontLength": "front_length",
    "commercialSurface": "commercial_area", "buildingClass": "building_class",
    "destination": "destination", "rentPerSqm": "rent_per_sqm",
    "contactPhone": "phone", "updatedAt": "updated_at"
  },
  "imagesPath": "images",
  "featuresPath": "features"
}