Importar Propiedades por JSON

Version del documento: v1.0 Fecha: 2026-04-29 Audiencia: Clientes avanzados, integradores, power users


Resumen

El modo JSON es la forma mas rapida y precisa de importar una propiedad cuando ya tenes los datos estructurados. A diferencia de URL y HTML, este modo no usa scraping ni IA: lo que vos pegas es lo que entra al sistema, sin transformaciones automaticas.

Es el modo recomendado si:

  • Ya tenes un export desde otro sistema (CRM, ERP, Excel convertido a JSON, etc.)
  • Estas haciendo una integracion personalizada
  • Queres tener control total sobre los campos sin depender del scraper

Si nunca trabajaste con JSON, te conviene usar URL o HTML primero.


Como funciona

Pegas el JSON  ->  Mapaprop valida la estructura  ->  Te muestra los datos en el Editor  ->  Confirmas  ->  Propiedad importada

El JSON se carga directo al Editor. Ahi vas a ver todos los campos pre-llenados con lo que pasaste — podes corregir cualquier cosa antes de presionar Importar.


Estructura del JSON

El JSON es un objeto plano (sin envolvente). Si tu fuente lo envuelve en { "data": { ... } }, no hay problema — el sistema desempaca el campo data automaticamente.

Lo minimo que necesitas (ejemplo)

Con esto solo, ya podes importar una propiedad. Despues completas el resto en el Editor.

{
    "title": "Departamento 2 ambientes en Palermo",
    "description": "Departamento luminoso, balcon a la calle, cocina integrada.",
    "operation": 1,
    "type": 1,
    "price": 95000,
    "currency": "USD",
    "address": "Avenida Santa Fe 3500",
    "zone0": 1,
    "zone1": 1,
    "zone2": 23,
    "zone3": 1340,
    "rooms": 1,
    "bathrooms": 1,
    "buildingArea": 45
}

Eso es todo. El resto de los campos (orientacion, expensas, fotos, atributos) podes agregarlos desde el Editor.


Campos: que es cada uno

Identificacion

CampoTipoObligatorioEjemploDescripcion
titlestringSi"Casa con jardin"Titulo publico de la propiedad. Maximo 200 caracteres.
codestringNo"DEV-12345"Codigo interno. Si no lo pasas, Mapaprop genera uno tipo IMP-{timestamp} automatico.
descriptionstringSi"Hermoso depto..."Descripcion larga (texto plano).
descriptionFormattedstringNo"Hermoso depto..."Misma descripcion pero con saltos de linea formateados. Si no la pasas, copia description.
urlWebExternalstringNo"https://otrositio.com"URL de origen, por si queres conservar el link.

Tipo de propiedad y operacion

CampoTipoObligatorioValores comunes
typeintSi1=Departamento, 2=Casa, 3=Quinta, 4=Terreno, 10=PH, 23=Desarrollo
operationintSi1=Venta, 2=Alquiler, 3=Alquiler temporal
statusintNo1=A estrenar, 2=Excelente, 8=Regular, etc. Default: el sistema lo infiere.

Lista completa de tipos en docs/mapaprop-mysql/mapaprop-database-mysql-report.md.

Ubicacion

Mapaprop usa una jerarquia de zonas con 4 niveles. Tenes que pasar al menos zone0zone1zone2. Si conoces el barrio (zone3) tambien, mejor.

CampoTipoObligatorioSignificadoEjemplo (Argentina)
zone0intSiPais1 (Argentina)
zone1intSiProvincia1 (Capital), 2 (Buenos Aires)
zone2intSiPartido / Ciudad / Comuna23 (Palermo), 138 (La Matanza)
zone3intNoBarrio / Localidad1340 (Abasto)
addressstrSiCalle y altura"Av. Santa Fe 3500"
betweenStreetsstrNoEntre calles"Entre Coronel Diaz y Pueyrredon"
zipcodestrNoCodigo postal"1425"
mapLatitudestrNoLatitud (string con decimal)"-34.5955856"
mapLongitudestrNoLongitud"-58.382166"

Importante: si pasas el address y los zone*, el Editor te va a mostrar la ubicacion en el mapa para que confirmes. Si no estas seguro de los IDs de zona, podes pasar solo zone3Description (texto del barrio) y el Editor te ayuda a mapearlo.

{
    "address": "Av. Santa Fe 3500",
    "zone3Description": "Palermo",
    "zone2Description": "Capital Federal"
}

Precio

CampoTipoObligatorioEjemploDescripcion
pricenumberSi95000Precio principal. Solo el numero, sin signos ni puntos.
currencystringSi"USD"Moneda. Valores: "USD""ARS""EUR", etc.
expensesPricenumberNo150000Expensas mensuales (para alquileres y propiedades en PH).
expensesCurrencystringNo"ARS"Moneda de las expensas (puede ser distinta del precio).
taxPricenumberNo5000Impuestos / ABL.
taxCurrencystringNo"ARS"Moneda de los impuestos.
paymentPeriodintNo21=Diario, 2=Mensual, 3=Anual. Default 2 (mensual).

Caracteristicas fisicas

CampoTipoDescripcion
landAreaintSuperficie del terreno en m².
buildingAreaintSuperficie cubierta en m².
roomsintCantidad de dormitorios (no es lo mismo que ambientes).
ambiencesintTotal de ambientes (incluye living, cocina, dorms).
bathroomsintBaños completos.
toilettesintToilettes (medio baños).
dependenciesintDependencias de servicio.
floorsintPiso en el que esta el departamento (si aplica).
totalFloorsintCantidad total de pisos del edificio.
apartmentsPerFloorintDepartamentos por piso.
garageintCantidad de cocheras.
garageTypeint1=Cubierta, 2=Semicubierta, 3=Descubierta.
yearsOldintAntiguedad en años. 0 = a estrenar.
orientationstr"1"=Norte, "2"=Sur, ... "8"=Suroeste.

Cuidadorooms ≠ ambiences. Un depto de 3 ambientes con 2 dormitorios tendria ambiences: 3 y rooms: 2.

Amenidades (booleanos)

Todos opcionales. Pasalos como true si la propiedad lo tiene, omitelos si no (no hace falta poner false).

{
    "hasSwimmingPool": true,
    "hasPatio": true,
    "hasLaundry": true,
    "hasStorage": true,
    "hasSecurity": true,
    "hasPrivateElevator": true,
    "terrace": true,
    "frontGarden": true,
    "grill": true,
    "janitor": true,
    "suite": true,
    "playroom": true,
    "furnished": true,
    "accessible": true,
    "laundryMachine": true,
    "wifi": true,
    "alarm": true,
    "securityBox": true,
    "partySaloon": true,
    "jacuzzi": true,
    "barbecueArea": true,
    "electricGenerator": true,
    "gatedCommunity": true,
    "countryClub": true,
    "park": true,
    "mortgageReady": true,
    "professionalAvailable": true,
    "petsReady": true,
    "telephoneLine": true,
    "cableIncluded": true
}

Imagenes

{
    "mainImage": "https://misitio.com/foto-principal.jpg",
    "images": [
        { "url": "https://misitio.com/foto1.jpg", "description": "Living" },
        { "url": "https://misitio.com/foto2.jpg", "description": "Cocina" },
        { "url": "https://misitio.com/foto3.jpg", "description": "Dormitorio" }
    ]
}
  • Las URLs tienen que ser publicas y accesibles desde Internet (Mapaprop las descarga al servidor).
  • Si solo tenes una foto principal, pasa mainImage y dejá images vacio o no lo pongas — el sistema arma el array a partir de mainImage.
  • Maximo recomendado: 20 fotos por propiedad.

Estado del negocio

{
    "reserved": false,
    "sold": false,
    "rented": false,
    "suspended": false,
    "published": true,
    "publishedOnlyWebsite": false
}
  • published: false deja la propiedad como borrador (visible solo en tu panel, no se publica en redes ni website).
  • publishedOnlyWebsite: true la publica solo en tu sitio sin enviarla a portales (Zonaprop, MercadoLibre, etc).

Atributos avanzados (no obligatorios)

El array attributes permite pasar amenidades con detalle (categoria, label en español, codigo legacy). Si no lo pasas, Mapaprop infiere los atributos desde los booleanos de la seccion anterior.

{
    "attributes": [
        {
            "locale": "es_AR",
            "country": "ar",
            "id": "swimming-pool",
            "label": "Piscina",
            "group": "propertyAttribute",
            "group_sub": "label",
            "group_subtype": "ammenities",
            "type": "bool",
            "key_legacy": "hasSwimmingPool",
            "selected": true,
            "status": true
        }
    ]
}

Solo recomendamos usar attributes si estas migrando desde un sistema que ya los exporta en este formato. Para uso normal, los booleanos alcanzan.


Ejemplo completo realista

Este es un JSON valido y completo, listo para pegar en el formulario:

{
    "code": "JSON-001",
    "title": "Departamento 2 ambientes en Palermo con balcon",
    "description": "Departamento luminoso, en piso alto, con balcon a la calle. Cocina integrada al living. Dormitorio con placard. Baño completo con bañera. Edificio con encargado y portero electrico. Cerca de subte y colectivos. Apto credito.",
    "operation": 1,
    "type": 1,
    "address": "Av. Santa Fe 3500",
    "betweenStreets": "Entre Coronel Diaz y Pueyrredon",
    "zone0": 1,
    "zone1": 1,
    "zone2": 23,
    "zone3": 22097,
    "zipcode": "1425",
    "mapLatitude": "-34.5955856",
    "mapLongitude": "-58.382166",
    "price": 95000,
    "currency": "USD",
    "expensesPrice": 80000,
    "expensesCurrency": "ARS",
    "rooms": 1,
    "ambiences": 2,
    "bathrooms": 1,
    "toilettes": 0,
    "buildingArea": 45,
    "landArea": 45,
    "floors": 7,
    "totalFloors": 12,
    "apartmentsPerFloor": 4,
    "yearsOld": 8,
    "orientation": "1",
    "airConditioner": 2,
    "heatingType": 4,
    "waterHeaterType": 2,
    "balconyType": 1,
    "hasLaundry": true,
    "laundryMachine": true,
    "hasSecurity": true,
    "janitor": true,
    "mortgageReady": true,
    "terrace": true,
    "mainImage": "https://misitio.com/depto-foto-1.jpg",
    "images": [
        { "url": "https://misitio.com/depto-foto-1.jpg", "description": "Living" },
        { "url": "https://misitio.com/depto-foto-2.jpg", "description": "Cocina" },
        { "url": "https://misitio.com/depto-foto-3.jpg", "description": "Dormitorio" },
        { "url": "https://misitio.com/depto-foto-4.jpg", "description": "Balcon" }
    ],
    "published": true,
    "urlWebExternal": "https://misitio.com/propiedades/depto-palermo"
}

Errores comunes

SintomaCausa probableComo arreglarlo
"El JSON no tiene un formato valido"Coma de mas, comillas mal cerradas, o usaste comillas simples ' en vez de ".Pegalo en https://jsonlint.com/ para encontrar el error de sintaxis.
"Faltan campos requeridos"Te falto titledescriptionoperationtypepricecurrency o las zonas.Mira la seccion "Lo minimo que necesitas" arriba.
Las imagenes no se carganLas URLs no son publicas (requieren login) o devuelven 404.Probalas pegandolas en el navegador de incognito. Si no abren, no las puede descargar el servidor tampoco.
Importa pero las zonas quedan vaciasPasaste zone3Description en texto pero los IDs zone3 no estan resueltos.Llena los IDs correctos, o usa el selector de zonas en el Editor despues de pegar el JSON.
El precio aparece como 0Pasaste el precio como string ("95000") o con puntos/comas ("95.000").Pasalo como numero sin separadores: 95000.
rooms y ambiences quedan igualesConfusion entre dormitorios y ambientes.rooms=dormitorios, ambiences=total ambientes. Un 3 ambientes con 2 dorms es rooms: 2, ambiences: 3.
El sistema dice CODE_DUPLICATEDPasaste un code que ya existe en tu cuenta.Cambialo o omitelo del JSON (Mapaprop genera uno automatico tipo IMP-{timestamp}).

Validacion antes de pegar

  1. Valida el JSON en https://jsonlint.com/ o https://jsonformatter.org/. Si el sitio te marca un error de sintaxis, no va a funcionar tampoco en Mapaprop.
  2. Verifica que tenga todos los campos obligatoriostitledescriptionoperationtypepricecurrencyaddresszone0zone1zone2.
  3. Probalo con el ejemplo minimo primero. Si funciona, vas agregando campos de a poco.

Diferencias entre los 3 modos

AspectoURLHTMLJSON
Origen del datoWeb scraping en vivo + IAHTML pegado por el usuarioJSON pegado por el usuario
ConfiabilidadAlta para portales conocidosAlta — bypassea bloqueos100% — sin transformaciones
Tiempo30-90s30-60sInmediato
Requiere conocer el formatoNoNoSi
Recomendado paraUso comunSitios con login wallPower users / integraciones

Soporte y referencias

  • Doc tecnica del objeto Property.claude/rules/java-backend/property-object-reference.md
  • Schema MySQLdocs/mapaprop-mysql/mapaprop-database-mysql-report.md
  • Reglas generales de importproperty-import-url-rules.md
  • Arquitecturaproperty-import-url-architecture.md
  • Ejemplo JSON fullmapaprop-apps/mapaprop-v2/pages/properties/property-post-v3.json

Si encontras un caso que no cubre esta documentacion, copia el reporte del modal de error y mandalo en un ticket de soporte.