Referencia de eventos

Los 26 eventos de webhook de Listings API, agrupados por recurso, con los campos exactos y un ejemplo de carga útil de cada uno.

26 eventos, agrupados por el recurso REST al que corresponden. Todos los eventos de esta página se envían a tu única URL de webhooks. No hay suscripciones por evento, así que selecciona la lógica que se ejecuta según event e ignora lo que no necesites.

Todos usan la carga útil estándar excepto listing.submission, que se describe más abajo. Los campos opcionales dentro de data se omiten cuando están vacíos, en lugar de enviarse como null.

Índice

EventoRecursoSe emite cuando
listing.submissionFichasSe resuelve el envío de una cita a un sitio de directorio
profile.createdUbicacionesSe crea una ubicación
profile.updatedUbicacionesSe edita una ubicación
profile.deletedUbicacionesSe archiva una ubicación
connection.location_connectedCuentas conectadasSe vincula una ficha de Google o Facebook
connection.location_disconnectedCuentas conectadasSe desvincula una ficha
connection.reauth_requiredCuentas conectadasSe han invalidado las credenciales
connection.listing_inaccessibleCuentas conectadasSe ha perdido el acceso a una ficha
connection.google_verification_verifiedCuentas conectadasLa verificación de Google se ha completado correctamente
connection.google_verification_failedCuentas conectadasLa verificación de Google ha fallado
interaction.reviewReseñasLlega una reseña o se modifica
interaction.responseReseñasSe publica una respuesta o se modifica
local_post.createdPublicacionesSe crea una publicación
local_post.publishedPublicacionesUna publicación pasa a estar visible en Google
local_post.rejectedPublicacionesGoogle ha rechazado una publicación
local_post.deletedPublicacionesSe elimina una publicación
social_post.createdSocialSe crea una publicación en redes sociales
social_post.publishedSocialUna publicación en redes sociales pasa a estar visible en todos los canales seleccionados
social_post.failedSocialLa publicación ha fallado en al menos un canal
social_post.rejectedSocialUn flujo de aprobación ha rechazado la publicación
social_post.deletedSocialSe archiva una publicación en redes sociales
social_connection.connectedSocialSe conecta o se vuelve a conectar un canal de marca
social_connection.disconnectedSocialSe elimina deliberadamente un canal de marca
social_connection.archivedSocialSe pierde involuntariamente un canal de marca
review_analytics.daily_snapshotAnalíticaSe ejecuta la agregación diaria de reseñas
review_analytics.weekly_snapshotAnalíticaSe ejecuta la agregación semanal de reseñas

Fichas

Se complementa con los endpoints de Fichas, en particular GET /locations/{locationId}/listings/premium, que devuelve los valores de syncStatus y listingUrl de cada cita que anuncia este evento.

listing.submission

Desencadenante: el envío de una cita para una ubicación a un sitio de directorio alcanza un estado final.

Nivel superior:

CampoTipoDescripción
eventstringSiempre listing.submission.
dataobjectConsulta más abajo.
statusstringsuccess, incomplete o canceled.
live_linkstringLa URL de la ficha publicada. Solo en success y solo cuando se conoce una.
error_messagestringEl motivo por el que no se pudo completar el envío. Solo en incomplete.

Dentro de data:

CampoTipoDescripción
business_idintegerEl id numérico de la ubicación.
v4_business_idstringLocation:<id> codificado en base64, el formato de ID global.
location_idstringEl mismo ID global en base64, no una cadena numérica.
site.idintegerEl id del sitio de directorio.
site.namestringEl nombre del sitio de directorio, e.g. Yelp.
site.urlstringLa URL de la página de inicio del sitio de directorio.
JSON
{  "event": "listing.submission",  "data": {    "business_id": 279381,    "v4_business_id": "TG9jYXRpb246Mjc5Mzgx",    "location_id": "TG9jYXRpb246Mjc5Mzgx",    "site": {      "id": 42,      "name": "Yelp",      "url": "https://www.yelp.com"    }  },  "status": "success",  "live_link": "https://www.yelp.com/biz/acme-dental-downtown"}

Ubicaciones

Ciclo de vida de la ubicación, con una correspondencia 1:1 con createLocation, updateLocation y archiveLocations. El ámbito es una ubicación: location_id siempre es una cadena numérica.

profile.created

Desencadenante: se crea una ubicación.

Campo de dataTipoDescripción
sourcestringQuién la creó: user, api o bulk_edit.
JSON
{  "event": "profile.created",  "timestamp": "2026-08-25T10:04:00Z",  "account_id": 11073,  "location_id": "901234",  "data": { "source": "api" }}

profile.updated

Desencadenante: se editan los datos de una ubicación existente.

Se limita a una entrega por ubicación cada 60 segundos, al inicio del intervalo. Las modificaciones dentro del intervalo se agrupan, no se retrasan. Nunca se entregan. Considera changed_fields una indicación sobre la modificación que inició el intervalo, no un conjunto completo de diferencias.

El evento llega al inicio del intervalo, por lo que, si vuelves a consultar la ubicación cuando llega, solo verás esa primera modificación. Programa una segunda consulta una vez que haya terminado el intervalo, al menos 60 segundos después, y reconcilia también las ubicaciones periódicamente, ya que este evento tiene un único intento de entrega y no se reintenta. Consulta cómo recuperarte de un evento perdido.

Campo de dataTipoDescripción
sourcestringuser, api o bulk_edit.
changed_fieldsarray de stringNombres de los campos de la ubicación que cambiaron, e.g. name, phone, address1. Se omite cuando está vacío.
JSON
{  "event": "profile.updated",  "timestamp": "2026-08-25T10:06:12Z",  "account_id": 11073,  "location_id": "901234",  "data": {    "source": "user",    "changed_fields": ["name", "phone"]  }}

profile.deleted

Desencadenante: se archiva una ubicación. Se trata de una eliminación lógica. No hay eliminación definitiva, y se puede cancelar el archivado con cancelArchiveLocations, que no emite ningún evento.

Campo de dataTipoDescripción
sourcestringuser, api o bulk_edit.
JSON
{  "event": "profile.deleted",  "timestamp": "2026-08-25T10:20:44Z",  "account_id": 11073,  "location_id": "901234",  "data": { "source": "user" }}

Cuentas conectadas

Ciclo de vida y estado de las conexiones de Google y Facebook, junto con los endpoints de Cuentas conectadas. Ámbito por ubicación. platform siempre es google o facebook; los demás proveedores no emiten estos eventos.

connected_account_id siempre está presente como clave, pero su valor es null en los dos eventos de verificación de Google.

connection.location_connected

Desencadenante: se vincula una ficha de Google o Facebook a una ubicación.

Campo de dataTipoDescripción
platformstringgoogle o facebook.
connected_account_idstringLa cuenta conectada que se ha vinculado.
JSON
{  "event": "connection.location_connected",  "timestamp": "2026-08-25T14:32:10Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "platform": "google",    "connected_account_id": "ba03bc4b-9f8c-4d3b-8e93-9628034c63cc"  }}

connection.location_disconnected

Desencadenante: se desvincula una ficha de Google o Facebook de una ubicación.

Campo de dataTipoDescripción
platformstringgoogle o facebook.
connected_account_idstringLa cuenta conectada que se ha desvinculado.
JSON
{  "event": "connection.location_disconnected",  "timestamp": "2026-08-25T14:35:02Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "platform": "google",    "connected_account_id": "ba03bc4b-9f8c-4d3b-8e93-9628034c63cc"  }}

connection.reauth_required

Desencadenante: se han invalidado las credenciales de la cuenta conectada. No se sincronizará nada a través de esta conexión hasta que alguien vuelva a autorizarla.

Campo de dataTipoDescripción
platformstringgoogle o facebook.
connected_account_idstringLa cuenta conectada que necesita volver a autorizarse.
reasonstringDescripción legible para personas. Se omite cuando la fuente no proporciona ninguna.
JSON
{  "event": "connection.reauth_required",  "timestamp": "2026-08-25T14:40:18Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "platform": "google",    "connected_account_id": "ba03bc4b-9f8c-4d3b-8e93-9628034c63cc",    "reason": "Google credentials are invalid. Please reconnect."  }}

connection.listing_inaccessible

Desencadenante: la cuenta conectada ya no puede acceder a la ficha de la ubicación. Es distinto de reauth_required: las credenciales pueden seguir siendo plenamente válidas, pero se ha retirado el acceso a esa ficha en particular.

Campo de dataTipoDescripción
platformstringgoogle o facebook.
connected_account_idstringLa cuenta conectada que ha perdido el acceso.
reasonstringDescripción legible para personas. Se omite cuando la fuente no proporciona ninguna.
JSON
{  "event": "connection.listing_inaccessible",  "timestamp": "2026-08-25T14:42:55Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "platform": "facebook",    "connected_account_id": "cf12de77-2211-4a09-b7c1-0a6f3b2e91aa",    "reason": "No longer has access to this listing."  }}

connection.google_verification_verified

Desencadenante: el perfil de Google Business Profile de una ubicación supera la verificación.

Campo de dataTipoDescripción
platformstringSiempre google.
connected_account_idnullSiempre null en los eventos de verificación.
JSON
{  "event": "connection.google_verification_verified",  "timestamp": "2026-08-25T14:50:00Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "platform": "google",    "connected_account_id": null  }}

connection.google_verification_failed

Desencadenante: una verificación de Google Business Profile termina en un fallo definitivo. Ninguna llamada REST inicia una verificación; el estado en sí se puede consultar, como se indica arriba.

Solo los estados finales emiten un evento: VERIFIED genera el evento _verified, y SUSPENDED o DUPLICATE (failure_type rejected) y ERROR_WHILE_FETCHING (transient) generan este evento. Los estados en curso (PENDING_VERIFICATION, UNDER_REVIEW, NOT_VERIFIED, NOT_CONNECTED) no producen ningún evento, por lo que la ausencia de un evento no indica nada. Consulta periódicamente googleVerificationStatus al leer una ubicación mientras haya una verificación en curso.

Campo de dataTipoDescripción
platformstringSiempre google.
connected_account_idnullSiempre null en los eventos de verificación.
failure_typestringrejected para un perfil suspendido o duplicado; transient cuando no se ha podido consultar Google. Solo conviene reintentar en el caso de transient.
reasonstringDescripción legible para personas. Se omite cuando la fuente no proporciona ninguna.
JSON
{  "event": "connection.google_verification_failed",  "timestamp": "2026-08-25T14:52:31Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "platform": "google",    "connected_account_id": null,    "failure_type": "rejected",    "reason": "This profile is suspended."  }}

Reseñas

Reseñas y respuestas, junto con los endpoints de Reseñas, incluidos responder, editar respuesta y archivar respuesta.

Las reseñas de la categoría Social se excluyen y nunca se entregan.

interaction.review

Desencadenante: se incorpora una reseña o esta cambia.

Campo de data.interactionTipoDescripción
idstringUUID de la interacción. Identifica la reseña, no este cambio: el mismo identificador vuelve a recibirse cada vez que cambia la reseña. Úsalo como clave de tu fila; nunca lo uses para descartar una entrega posterior. Consulta duplicados y orden.
typestringReview.
contentstringEl cuerpo de la reseña. Puede ser null.
ratingnumberPuntuación en estrellas. Puede ser null para las fuentes que no la incluyen.
titlestringTítulo de la reseña, si la fuente lo incluye.
author_namestringNombre visible del autor de la reseña.
author_avatarstringURL del avatar del autor de la reseña.
datestringFecha en formato ISO-8601 en la que se publicó la reseña en la fuente.
sourcestringSu procedencia, e.g. google.com, facebook.com.
permalinkstringEnlace a la reseña en la fuente.
categorystringCategoría de la interacción. Social se excluye antes de la entrega.
interaction_statusstringEstado de la interacción en el flujo de trabajo.
parent_idstringSiempre null para una reseña.
interaction_request_idstringLa solicitud a la que pertenece esta interacción. Puede ser null.
JSON
{  "event": "interaction.review",  "timestamp": "2026-08-25T09:12:44Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "interaction": {      "id": "6f8a1d20-3e11-4a55-9f7d-2b0c9e5a4471",      "type": "Review",      "content": "Friendly staff and no waiting.",      "rating": 5,      "title": null,      "author_name": "Dana R.",      "author_avatar": "https://lh3.googleusercontent.com/a/example",      "date": "2026-08-25T08:58:02Z",      "source": "google.com",      "permalink": "https://maps.google.com/example-review",      "category": "Review",      "interaction_status": "unread",      "parent_id": null,      "interaction_request_id": "3c1e9b74-88a2-4d0e-9c31-77a1f0be5d92"    }  }}

interaction.response

Desencadenante: se publica, edita o archiva una respuesta a una reseña. Tiene la misma estructura que interaction.review, con dos diferencias: type es Response y parent_id apunta a la reseña a la que se responde.

Campo de data.interactionTipoDescripción
typestringResponse.
parent_idstringUUID de la reseña a la que se responde.
contentstringEl texto de la respuesta.
ratingnumberSiempre null en una respuesta.

Todos los demás campos indicados en interaction.review están presentes con el mismo significado.

JSON
{  "event": "interaction.response",  "timestamp": "2026-08-25T09:30:07Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "interaction": {      "id": "b2d7c095-5f43-4e21-8a10-6d9c3f77e208",      "type": "Response",      "content": "Thanks Dana, see you next time!",      "rating": null,      "author_name": "Acme Dental Downtown",      "date": "2026-08-25T09:29:55Z",      "source": "google.com",      "permalink": "https://maps.google.com/example-review",      "category": "Review",      "interaction_status": "responded",      "parent_id": "6f8a1d20-3e11-4a55-9f7d-2b0c9e5a4471",      "interaction_request_id": "3c1e9b74-88a2-4d0e-9c31-77a1f0be5d92"    }  }}

Publicaciones

Publicaciones locales de Google Business Profile, junto con los endpoints de Publicaciones. El ámbito es la ubicación y location_id es una cadena numérica.

Los cuatro eventos comparten la misma estructura de data; los campos opcionales varían. Todos los campos opcionales se omiten cuando están vacíos.

Campo de dataTipoDescripción
post_idintegerLa publicación a la que pertenece este elemento, con el identificador que devuelven los endpoints de creación.
post_item_idintegerEl elemento correspondiente a cada ubicación. Una publicación para 20 ubicaciones genera 20 elementos, y los eventos se emiten por elemento.
post_typestringSTANDARD, EVENT o OFFER.
post_external_idstringEl nombre de recurso que Google asigna a la publicación. No aparece hasta que Google la acepta.
published_urlstringUna URL que se puede abrir en el navegador. Normalmente está ausente: Google no siempre la devuelve; usa post_external_id para establecer la correspondencia.
rejection_reasonstringSolo en local_post.rejected.

local_post.created

Se activa cuando: se crea un elemento de publicación y se pone en cola para enviarlo a Google. Todavía no está publicado.

JSON
{  "event": "local_post.created",  "timestamp": "2026-08-25T11:02:00Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "post_id": 88421,    "post_item_id": 5512309,    "post_type": "STANDARD"  }}

local_post.published

Se activa cuando: Google ha aceptado la publicación y esta ya está disponible.

JSON
{  "event": "local_post.published",  "timestamp": "2026-08-25T11:06:41Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "post_id": 88421,    "post_item_id": 5512309,    "post_type": "STANDARD",    "post_external_id": "accounts/123/locations/456/localPosts/789"  }}

local_post.rejected

Se activa cuando: Google ha rechazado la publicación o ha fallado el envío.

JSON
{  "event": "local_post.rejected",  "timestamp": "2026-08-25T11:07:15Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "post_id": 88421,    "post_item_id": 5512310,    "post_type": "OFFER",    "rejection_reason": "Rejected"  }}

local_post.deleted

Se activa cuando: se elimina el elemento de publicación.

JSON
{  "event": "local_post.deleted",  "timestamp": "2026-08-25T15:40:09Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "post_id": 88421,    "post_item_id": 5512309,    "post_type": "STANDARD",    "post_external_id": "accounts/123/locations/456/localPosts/789"  }}

Social

Publicación en redes sociales a nivel de marca y ciclo de vida de las conexiones, junto con los endpoints de Social. Nueve eventos: cinco para publicaciones y cuatro para conexiones.

account_id y timestamp están presentes como de costumbre. Los identificadores dentro de data son los mismos UUID sin formato adicional que usa la API REST, enviados como cadenas.

social_post.created

Se activa cuando: se crea una publicación en redes sociales. Solo se emite al crearla; editar una publicación existente no vuelve a emitir el evento.

Campo de dataTipoDescripción
post_idstringEl UUID de la publicación, el mismo socialPostId que devuelve crear.
social_profile_idstringLa marca a la que pertenece la publicación. null si la publicación no tiene ninguna.
statusstringEl estado de la publicación en el momento de su creación.
created_byintegerEl usuario que la creó.
platform_idsarray of integerLos identificadores internos de las plataformas a las que se dirige la publicación.
JSON
{  "event": "social_post.created",  "timestamp": "2026-09-28T14:02:11Z",  "account_id": 62570,  "location_id": null,  "data": {    "post_id": "c47a1e58-2b93-4f10-a6d7-58e0c9b12345",    "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",    "status": "scheduled",    "created_by": 40122,    "platform_ids": [1, 2, 4]  }}

social_post.published

Se activa cuando: la publicación se ha completado correctamente. Este evento se emite solo si el resultado es completamente satisfactorio: al menos un canal ha publicado y ningún canal ha registrado un error. Una publicación parcial no lo emite; en ese caso se emite social_post.failed.

Campo de dataTipoDescripción
post_idstringEl UUID de la publicación.
social_profile_idstringLa marca a la que pertenece la publicación.
statusstringEl estado de la publicación.
published_onstringEl instante en que la publicación pasó a estar disponible, en formato ISO-8601. null si no se registró.
itemsarray of objectUna entrada por canal; los campos se indican a continuación.
items[].platformstringNombre de la plataforma, e.g. instagram.
items[].social_platform_idintegerEl identificador interno de la plataforma.
items[].connected_account_idstringEl UUID de la conexión que publicó el elemento.
items[].published_urlstringLa URL en la que está disponible el elemento publicado.
items[].vendor_post_idstringEl identificador que la propia plataforma asigna al elemento publicado.
items[].statusstringEl estado de ese canal.
JSON
{  "event": "social_post.published",  "timestamp": "2026-10-02T13:30:07Z",  "account_id": 62570,  "location_id": null,  "data": {    "post_id": "c47a1e58-2b93-4f10-a6d7-58e0c9b12345",    "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",    "status": "published",    "published_on": "2026-10-02T13:30:04",    "items": [      {        "platform": "instagram",        "social_platform_id": 2,        "connected_account_id": "b81d5b3c-4a90-4f6a-9c11-71e0dd2fa4a7",        "published_url": "https://www.instagram.com/p/CxYz1234abc/",        "vendor_post_id": "18029384756012345",        "status": "success"      }    ]  }}

social_post.failed

Se activa cuando: falla la publicación. Se trata de un fallo de entrega, distinto de un rechazo editorial. Se emite en el último reintento, por lo que no se emite mientras queden intentos para la publicación.

items contiene solo los canales que registraron errores, por lo que una publicación que se haya publicado en dos plataformas y haya fallado en una tercera llega aquí con un solo elemento.

Campo de dataTipoDescripción
post_idstringEl UUID de la publicación.
social_profile_idstringLa marca a la que pertenece la publicación.
statusstringEl estado de la publicación.
itemsarray of objectUna entrada por canal con errores; los campos se indican a continuación.
items[].platformstringNombre de la plataforma.
items[].social_platform_idintegerEl identificador interno de la plataforma.
items[].statusstringEl estado de ese canal.
items[].reasonstringUn motivo breve, truncado a 300 caracteres. Puede ser null.
items[].vendor_errorstringUn mensaje de longitud limitada y seguro para mostrar al usuario, derivado del error de la plataforma. Nunca se incluye el contenido original que envía la plataforma. Puede ser null.
JSON
{  "event": "social_post.failed",  "timestamp": "2026-10-02T13:34:55Z",  "account_id": 62570,  "location_id": null,  "data": {    "post_id": "c47a1e58-2b93-4f10-a6d7-58e0c9b12345",    "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",    "status": "failed",    "items": [      {        "platform": "linkedin",        "social_platform_id": 4,        "status": "error",        "reason": "Authorization expired",        "vendor_error": "The access token is no longer valid."      }    ]  }}

social_post.rejected

Se activa cuando: un flujo de aprobación ha rechazado la publicación. Es un rechazo editorial, no un fallo de entrega: la publicación nunca llegó a una plataforma.

Campo de dataTipoDescripción
post_idstringEl UUID de la publicación.
social_profile_idstringLa marca a la que pertenece la publicación.
statusstringEl estado de la publicación.
rejection_reasonstringEl comentario de la persona encargada de la revisión. null si no dejó ninguno.
JSON
{  "event": "social_post.rejected",  "timestamp": "2026-09-29T09:11:03Z",  "account_id": 62570,  "location_id": null,  "data": {    "post_id": "e08b2d97-6f14-4c22-b7a5-9d3e1f6c4a70",    "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",    "status": "rejected",    "rejection_reason": "Please use the updated product name."  }}

social_post.deleted

Se activa cuando: se ha archivado la publicación, ya sea mediante POST /social/posts/cancel o mediante el proceso programado de archivado. Solo se emite cuando hay una transición real, por lo que volver a archivar una publicación ya archivada no emite ningún evento.

Campo de dataTipoDescripción
post_idstringEl UUID de la publicación.
social_profile_idstringLa marca a la que pertenece la publicación.
statusstringEl estado de la publicación.
archived_atstringEl instante en que se archivó la publicación, en formato ISO-8601. null si no se registró.
JSON
{  "event": "social_post.deleted",  "timestamp": "2026-09-30T16:20:41Z",  "account_id": 62570,  "location_id": null,  "data": {    "post_id": "e08b2d97-6f14-4c22-b7a5-9d3e1f6c4a70",    "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",    "status": "archived",    "archived_at": "2026-09-30T16:20:39"  }}

social_connection.connected

Se activa cuando: se ha activado un canal de una marca, ya sea mediante una primera conexión o al volver a conectar uno que se había archivado. is_reconnect distingue los dos casos.

Campo de dataTipoDescripción
social_profile_idstringLa marca a la que está asociado el canal.
connected_account_idstringEl UUID de la conexión, el id que devuelve la lista de conexiones.
platformstringNombre de la plataforma, e.g. instagram.
display_namestringEl nombre visible del canal. Puede ser null.
is_reconnectbooleanfalse en una primera conexión, true cuando se vuelve a conectar un canal previamente archivado.
listing_connected_account_idstringEstá presente solo cuando el canal también está vinculado a una cuenta conectada de Listings. Se omite en los demás casos.
JSON
{  "event": "social_connection.connected",  "timestamp": "2026-09-27T11:05:22Z",  "account_id": 62570,  "location_id": null,  "data": {    "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",    "connected_account_id": "b81d5b3c-4a90-4f6a-9c11-71e0dd2fa4a7",    "platform": "instagram",    "display_name": "Jenny Home",    "is_reconnect": false  }}

social_connection.disconnected

Se activa cuando: el canal se ha eliminado deliberadamente mediante una llamada a desconectar. Solo se emite cuando el canal se ha archivado realmente, por lo que una desconexión fallida no genera un evento falso.

Campo de dataTipoDescripción
social_profile_idstringLa marca a la que estaba asociado el canal.
connected_account_idstringEl UUID de la conexión.
platformstringNombre de la plataforma.
display_namestringEl nombre visible del canal. Puede ser null.
JSON
{  "event": "social_connection.disconnected",  "timestamp": "2026-10-04T08:47:10Z",  "account_id": 62570,  "location_id": null,  "data": {    "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",    "connected_account_id": "b81d5b3c-4a90-4f6a-9c11-71e0dd2fa4a7",    "platform": "instagram",    "display_name": "Jenny Home"  }}

social_connection.archived

Se activa cuando: se ha perdido el canal involuntariamente: la plataforma ha invalidado el token o un proceso de conciliación ha detectado que ya no se puede acceder al canal. Nadie ha solicitado esta acción, lo que la distingue de disconnected.

Campo de dataTipoDescripción
social_profile_idstringLa marca a la que estaba asociado el canal.
connected_account_idstringEl UUID de la conexión.
platformstringNombre de la plataforma.
display_namestringEl nombre visible del canal. Puede ser null.
reasonstringEl motivo por el que se perdió. Puede ser null.
JSON
{  "event": "social_connection.archived",  "timestamp": "2026-10-06T02:15:33Z",  "account_id": 62570,  "location_id": null,  "data": {    "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",    "connected_account_id": "2d4e6f80-1c33-4b7a-8e05-9a1b2c3d4e5f",    "platform": "facebook",    "display_name": "Jenny Home & Co.",    "reason": "Access token has been invalidated by the platform."  }}

Análisis de reseñas

Resúmenes programados de reseñas, un evento por ubicación y por período.

Ambos eventos comparten la misma estructura de data:

Campo de dataTipoDescripción
periodstringInicio del período, YYYY-MM-DD.
granularitystringdaily o weekly.
total_reviewsintegerNúmero total histórico de reseñas de la ubicación.
new_reviews_in_periodintegerReseñas recibidas durante este período.
average_ratingnumberValoración media de este período, con 4 decimales. 0.0 cuando no hubo reseñas.
previous_average_ratingnumberValoración media del período anterior. 0.0 cuando no hay datos anteriores.

Una ubicación sin actividad durante el período no emite nada, pero tampoco recibes nada de una ubicación cuya instantánea nunca llegó. La ausencia de una instantánea es ambigua, y en esta familia la interpretación más benigna es la menos probable. Puede significar: ausencia de actividad; una entrega que falló o superó el tiempo de espera (hay un solo intento y ningún reintento); una entrega deshabilitada porque la cuenta no tiene habilitado el acceso a webhooks, no tiene una URL configurada, no está verificada o está bloqueada; o, lo más probable en este caso, que el límite por minuto descarte parte de la ráfaga como rate_limited.

Nunca registres un cero basándote en la ausencia de una instantánea. Contrasta los datos con GET /locations/{locationId}/review-analytics-overview para el mismo período y, si esa consulta también falla, indica que el período está no disponible en lugar de registrar un cero.

review_analytics.daily_snapshot

Desencadenante: la tarea de resumen diario, una vez por ubicación y por día.

JSON
{  "event": "review_analytics.daily_snapshot",  "timestamp": "2026-08-25T02:00:00Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "period": "2026-08-24",    "granularity": "daily",    "total_reviews": 1240,    "new_reviews_in_period": 3,    "average_rating": 4.6667,    "previous_average_rating": 5.0  }}

review_analytics.weekly_snapshot

Desencadenante: la tarea de resumen semanal, una vez por ubicación y por semana. period es el primer día de la semana que se resume.

JSON
{  "event": "review_analytics.weekly_snapshot",  "timestamp": "2026-08-24T02:00:00Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "period": "2026-08-17",    "granularity": "weekly",    "total_reviews": 1237,    "new_reviews_in_period": 18,    "average_rating": 4.6123,    "previous_average_rating": 4.5901  }}

Eventos que puedes recibir pero de los que no debes depender

La plataforma emite otras familias de eventos: campañas de reseñas, posiciones en los resultados de búsqueda, promociones de publicaciones en redes sociales, cambios de estado de cuentas publicitarias en redes sociales, ideas de publicaciones generadas por IA y propiedad de Google Business Profile. No tienen ningún endpoint REST publicado en la Listings API, no se documentan aquí y sus estructuras no están cubiertas por ninguna garantía de compatibilidad. Dado que hay una sola URL y no hay suscripciones por evento, tu manejador debe ignorar cualquier event que no reconozca y aun así devolver 200.