Analítica

Cada endpoint de analítica de perfiles con ejemplos cURL, Python y Node: métricas diarias de Google y Facebook y vistas semanales de Bing por ubicación.

La analítica de perfiles indica con qué frecuencia se vio una ubicación y se realizaron acciones relacionadas con ella en cada plataforma de publicación: impresiones, visualizaciones de página, solicitudes de indicaciones, llamadas y clics en el sitio web. Hay tres endpoints, uno por plataforma de publicación, y los tres son de lectura, por lo que basta con una clave Read (lectura). Cada métrica es una serie temporal de puntos { startTime, value }; la API no devuelve totales escalares, por lo que las sumas que muestres debes calcularlas tú.

Endpoints de un vistazo

MétodoRutaQué haceReferencia
GET/locations/{locationId}/google-analyticsNueve series diarias de Google Business Profile.Analítica de Google
GET/locations/{locationId}/facebook-analyticsCinco series diarias de páginas de Facebook.Analítica de Facebook
GET/locations/{locationId}/bing-analyticsUna serie semanal de Bing Places.Analítica de Bing

Los tres comparten los mismos parámetros. fromDate y toDate son de tipo YYYY-MM-DD, ambos opcionales; si los omites, se usa el período reciente predeterminado de la plataforma de publicación. La ruta acepta el id de Relay en base64 o el número sin codificar. Si el valor no corresponde a ninguno de estos formatos, el endpoint devuelve 200 con el objeto de estadísticas establecido en null y un array errors, lo que parece indicar un perfil desconectado, así que comprueba primero errors.

Consulta las métricas de Google para un intervalo de fechas

GET /locations/{locationId}/google-analytics devuelve data.googleInsights con una serie diaria por métrica. total representa las impresiones del perfil, search más maps; no incluye las métricas de acciones. Úsalo para elaborar un informe de visibilidad que compare el antes y el después de un cambio en los datos.

NombreEnObligatorioNotas
locationIdpathSíId de Relay en base64 o databaseId numérico.
fromDatequeryNoInicio del intervalo, YYYY-MM-DD. De forma predeterminada, se usa un período reciente.
toDatequeryNoFin del intervalo, YYYY-MM-DD.
Google
curl "https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/google-analytics?fromDate=2026-08-01&toDate=2026-08-31" \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "googleInsights": {      "total": [        { "startTime": "2026-08-01T00:00:00+00:00", "value": 412 },        { "startTime": "2026-08-02T00:00:00+00:00", "value": 388 }      ],      "search": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 300 }],      "maps": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 112 }],      "directionsAction": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 24 }],      "phoneAction": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 8 }],      "websiteAction": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 41 }],      "businessBookings": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 0 }],      "businessFoodOrders": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 0 }],      "businessFoodMenuClicks": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 0 }]    }  }}

El valor de startTime de cada punto es el día en el que se agrupa el recuento. En el ejemplo, total del primer día es 412, que corresponde a 300 de search más 112 de maps.

SerieSignificado
totalImpresiones del perfil, search más maps.
searchImpresiones en los resultados de Google Search, con ordenadores y móviles combinados.
mapsImpresiones en los resultados de Google Maps, con ordenadores y móviles combinados.
directionsActionSolicitudes de indicaciones para llegar a la ubicación.
phoneActionClics en el botón de llamada.
websiteActionClics para acceder al sitio web.
businessBookingsReservas iniciadas desde el perfil.
businessFoodOrdersPedidos de comida realizados desde el perfil.
businessFoodMenuClicksClics en el enlace al menú de comida.

Una métrica tiene el valor null, no un array vacío, cuando la ubicación no tiene datos de Google para el período o su perfil de Google no está conectado. Trata null y [] de la misma manera al agregar los datos.

Consulta las métricas de Facebook para un intervalo de fechas

GET /locations/{locationId}/facebook-analytics tiene la misma estructura dentro de data.facebookInsights, con cinco series diarias. Requiere que la página de Facebook de la ubicación esté conectada. ctaAction te permite medir la actividad de un botón «Reservar ahora» o «Llamar ahora» durante el período de una campaña.

NombreEnObligatorioNotas
locationIdpathSíId de Relay en base64 o databaseId numérico.
fromDatequeryNoInicio del intervalo, YYYY-MM-DD. De forma predeterminada, se usa un período reciente.
toDatequeryNoFin del intervalo, YYYY-MM-DD.
Facebook
curl "https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/facebook-analytics?fromDate=2026-08-01&toDate=2026-08-31" \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "facebookInsights": {      "views": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 120 }],      "ctaAction": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 5 }],      "directionsAction": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 3 }],      "phoneAction": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 2 }],      "websiteAction": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 9 }]    }  }}
SerieSignificado
viewsVisualizaciones totales de la página.
ctaActionClics en el botón de llamada a la acción de la página.
directionsActionSolicitudes de indicaciones a través de la página.
phoneActionLlamadas iniciadas desde la página.
websiteActionClics para acceder al sitio web desde la página.

No hay ninguna métrica de Me gusta de la página. Todas las series se devuelven con el valor null cuando la página no tiene datos para el intervalo o no está conectada, así que comprueba si el valor es null antes de iterar.

Consulta las visualizaciones de Bing para un intervalo de fechas

GET /locations/{locationId}/bing-analytics devuelve una única serie, data.bingInsights.views, agrupada por semana en lugar de por día. Cada punto es el número de visualizaciones de una semana que comienza en startTime. Los datos se actualizan cada lunes con los de la semana anterior, por lo que la semana completa más reciente es la última que verás. Consulta un intervalo de varios meses para obtener una línea de tendencia; no es adecuado para la atribución diaria.

NombreEnObligatorioNotas
locationIdpathSíID de Relay en Base64 o databaseId numérico.
fromDatequeryNoInicio del intervalo, YYYY-MM-DD. De forma predeterminada, se usa un intervalo reciente.
toDatequeryNoFin del intervalo, YYYY-MM-DD.
Bing
curl "https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/bing-analytics?fromDate=2026-06-01&toDate=2026-08-31" \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "bingInsights": {      "views": [        { "startTime": "2026-06-01T00:00:00+00:00", "value": 73 },        { "startTime": "2026-06-08T00:00:00+00:00", "value": 58 }      ]    }  }}
SerieSignificado
viewsVisualizaciones del perfil de Bing Places, un punto por semana.

A diferencia de Google y Facebook, Bing indica la ausencia de datos mediante un array views vacío con 200, no mediante null. Trata ambos casos como "nada que mostrar" y comprueba length == 0 si quieres una etiqueta de "sin datos", ya que la suma de un array vacío es 0.

Errores que verás

Las páginas de referencia no indican códigos de error específicos de los recursos de analítica. Estos son los casos que encontrarás:

CódigoSignificadoSolución
401 con SY90001La clave de API falta o no es válida.Envía Authorization: API $LISTINGSAPI_KEY.
200 con googleInsights, facebookInsights o bingInsights establecido en null y un array errorslocationId no es un número ni un ID de Relay que se pueda decodificar.Pasa el ID en base64 que haya devuelto un endpoint de lectura. No le apliques codificación URL.
200 con una métrica null (Google, Facebook) o un array views vacío (Bing), y sin errorsNo hay datos para el intervalo o la plataforma de publicación no está conectada.Muestra "no disponible", no cero. Conecta la cuenta.
429Límite de solicitudes.Espera el tiempo indicado por Retry-After. Consulta Límites de solicitudes.

La lista completa está en Códigos de error.

Próximos pasos