Saltar al contenido principal
PlaceAnalyzer - Logo completo
PlaceAnalyzer - Logo completoAPI ReferenceGuías

Generar Reportes de Mercado

Los reportes complementan tus avalúos con

datos contextuales sobre la zona. Imagina poder mostrar a tus clientes no solo el valor de la propiedad, sino también el análisis demográfico, comercial y regulatorio de la zona.

La Anatomía de un Reporte

Un reporte se compone de secciones independientes. Cada sección tiene su propio endpoint y proporciona datos específicos:

1. Datos de Población

Obtén información demográfica y socioeconómica de la zona.

Para obtener datos de población, consulta la documentación en la Referencia de API: Datos estadísticos y gráficos.

Ejemplo de uso:

curl -X GET "https://reports.placeanalyzer.com/population?lat=-34.6037&lng=-58.3816" \
-H "X-API-KEY: tu_api_key_aqui"

Respuesta:

{
  "location": {
    "lat": -34.6037,
    "lng": -58.3816,
    "zoneName": "Palermo"
  },
  "population": {
    "total": 256788,
    "density": 12500,
    "ageDistribution": {
      "0-14": 15.2,
      "15-29": 22.1,
      "30-44": 25.8,
      "45-59": 20.3,
      "60+": 16.6
    },
    "socioeconomicLevel": {
      "A": 12.5,
      "B": 28.7,
      "C": 45.2,
      "D": 13.6
    }
  }
}

¿Cómo usar estos datos?

  • 📊 Gráficos de edad: Crear histogramas de distribución etaria
  • 💰 Nivel socioeconómico: Mostrar composición de la zona
  • 🏠 Densidad poblacional: Contextualizar el entorno

2. Análisis Comercial

Descubre qué comercios y servicios hay cerca de la propiedad.

Para obtener análisis comercial para gráficos, consulta la documentación en la Referencia de API: Datos estadísticos y gráficos.

Ejemplo de uso:

curl -X GET "https://reports.placeanalyzer.com/commerce-graphic?lat=-34.6037&lng=-58.3816" \
-H "X-API-KEY: tu_api_key_aqui"

Respuesta:

{
  "location": {
    "lat": -34.6037,
    "lng": -58.3816,
    "zoneName": "Palermo"
  },
  "commerceAnalysis": {
    "totalCommerces": 1250,
    "byCategory": {
      "RESTAURANTS": 25.2,
      "SHOPS": 18.8,
      "SERVICES": 15.4,
      "HEALTH": 12.1,
      "EDUCATION": 8.9,
      "ENTERTAINMENT": 7.3,
      "TRANSPORT": 6.2,
      "FINANCIAL": 3.8,
      "OTHER": 2.3
    },
    "topCommerces": [
      {
        "name": "Starbucks Palermo",
        "category": "RESTAURANTS",
        "rating": 4.2,
        "distance": 0.3
      },
      {
        "name": "Banco Galicia",
        "category": "FINANCIAL",
        "rating": 3.8,
        "distance": 0.5
      }
    ]
  }
}

Gráfico de Torta con estos datos:

// Datos para gráfico de torta
const commerceData = {
  labels: ['Restaurantes', 'Tiendas', 'Servicios', 'Salud', 'Educación'],
  datasets: [{
    data: [25.2, 18.8, 15.4, 12.1, 8.9],
    backgroundColor: ['#FF6384', '#36A2EB', '#FFCE56', '#4BC0C0', '#9966FF']
  }]
};

3. Plan Regulador

Información urbanística y normativa de la zona.

Para obtener información del plan regulador, consulta la documentación en la Referencia de API: Viewer.

Ejemplo de uso:

curl -X GET "https://reports.placeanalyzer.com/regulatory-plan?lat=-34.6037&lng=-58.3816" \
-H "X-API-KEY: tu_api_key_aqui"

Respuesta:

{
  "location": {
    "lat": -34.6037,
    "lng": -58.3816,
    "zoneName": "Palermo"
  },
  "regulatoryInfo": {
    "zoning": "R2B1",
    "zoningDescription": "Residencial con comercio en planta baja",
    "allowedUses": [
      "RESIDENTIAL",
      "COMMERCIAL_GROUND_FLOOR",
      "OFFICES",
      "SERVICES"
    ],
    "buildingRestrictions": {
      "maxHeight": 25,
      "maxFAR": 3.5,
      "minFrontSetback": 3,
      "maxLotCoverage": 0.7
    },
    "specialDistricts": [
      "HISTORIC_PRESERVATION"
    ]
  }
}

4. Análisis por Categorías Comerciales

Detalla el comercio por rubros específicos.

Para obtener comercios filtrados por categoría, consulta la documentación en la Referencia de API: Comercios.

Ejemplo - Solo restaurantes:

curl -X GET "https://reports.placeanalyzer.com/commerces-by-category?lat=-34.6037&lng=-58.3816&category=RESTAURANTS" \
-H "X-API-KEY: tu_api_key_aqui"

5. Análisis por Sectores

Comercio organizado por zonas geográficas.

Para obtener análisis comercial por sectores geográficos, consulta la documentación en la Referencia de API: Comercios.

Ejemplo Completo: Reporte Integral

Aquí tienes un ejemplo que combina múltiples endpoints para crear un reporte completo:

async function generateCompleteReport(lat, lng, apiKey) {
  console.log('📊 Generando reporte completo...');

  try {
    // Ejecutar todas las consultas en paralelo
    const [population, commerce, regulatory] = await Promise.all([
      fetch(`{REPORT_API_URL}/population?lat=${lat}&lng=${lng}`, {
        headers: { 'X-API-KEY': apiKey }
      }),
      fetch(`{REPORT_API_URL}/commerce-graphic?lat=${lat}&lng=${lng}`, {
        headers: { 'X-API-KEY': apiKey }
      }),
      fetch(`{REPORT_API_URL}/regulatory-plan?lat=${lat}&lng=${lng}`, {
        headers: { 'X-API-KEY': apiKey }
      })
    ]);

    const [populationData, commerceData, regulatoryData] = await Promise.all([
      population.json(),
      commerce.json(),
      regulatory.json()
    ]);

    // Combinar todos los datos
    const report = {
      location: populationData.location,
      sections: {
        population: populationData.population,
        commerce: commerceData.commerceAnalysis,
        regulatory: regulatoryData.regulatoryInfo
      }
    };

    console.log('✅ Reporte generado exitosamente');
    return report;

  } catch (error) {
    console.error('❌ Error generando reporte:', error);
    throw error;
  }
}

// Uso del ejemplo
generateCompleteReport(-34.6037, -58.3816, 'tu_api_key_aqui')
  .then(report => {
    console.log('Zona:', report.location.zoneName);
    console.log('Población total:', report.sections.population.total);
    console.log('Total comercios:', report.sections.commerce.totalCommerces);
    console.log('Zonificación:', report.sections.regulatory.zoning);
  });

Mejores Prácticas para Reportes

1. Cache Inteligente

// Cachear reportes por 24 horas
const CACHE_TTL = 24 * 60 * 60 * 1000; // 24 horas en ms

class ReportCache {
  constructor() {
    this.cache = new Map();
  }

  async getReport(lat, lng) {
    const key = `${lat},${lng}`;
    const cached = this.cache.get(key);

    if (cached && Date.now() - cached.timestamp < CACHE_TTL) {
      return cached.data;
    }

    const report = await generateCompleteReport(lat, lng, API_KEY);
    this.cache.set(key, { data: report, timestamp: Date.now() });

    return report;
  }
}

2. Manejo de Errores por Sección

async function generateReportWithFallbacks(lat, lng, apiKey) {
  const sections = {};

  // Intentar obtener cada sección independientemente
  try {
    const populationResponse = await fetch(`.../population?lat=${lat}&lng=${lng}`, {
      headers: { 'X-API-KEY': apiKey }
    });
    sections.population = await populationResponse.json();
  } catch (error) {
    sections.population = { error: 'No disponible' };
  }

  // Repetir para otras secciones...
  return sections;
}

3. Reportes Programados

Para propiedades que consultas frecuentemente:

// Generar reporte y guardar en base de datos
async function scheduleReport(propertyId, lat, lng) {
  const report = await generateCompleteReport(lat, lng, API_KEY);

  await saveToDatabase(propertyId, {
    report: report,
    generatedAt: new Date(),
    expiresAt: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000) // 7 días
  });

  return report;
}

Conclusión

Los reportes transforman una simple tasación en un análisis integral que incluye:

  • 👥 Contexto demográfico de la zona
  • 🏪 Análisis comercial completo
  • 📋 Información regulatoria para desarrollo
  • 🏠 Comparación con propiedades cercanas

Próximos pasos:

¿Necesitas ayuda con algún endpoint específico? Consulta la referencia completa de API.