Referência de eventos
Todos os 26 eventos de webhook da Listings API, agrupados por recurso, com os campos exatos e um exemplo de payload para cada um.
26 eventos, agrupados pelo recurso REST ao qual se referem. Todos os eventos desta página são entregues à sua única URL de webhooks. Não há assinatura por evento, portanto direcione o processamento com base em event e ignore o que você não precisa.
Todos usam o payload padrão, exceto listing.submission, que é descrito abaixo. Os campos opcionais dentro de data são omitidos quando estão vazios, em vez de serem enviados como null.
Índice
Listagens
Complementa os endpoints de Listagens, em particular GET /locations/{locationId}/listings/premium, que retorna syncStatus e listingUrl por citação, informados por este evento.
listing.submission
Disparo: o envio de uma citação de um local a um site de diretório atinge um estado final.
Nível superior:
Dentro de data:
{ "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"}Locais
Ciclo de vida do local, com correspondência 1:1 com createLocation, updateLocation e archiveLocations. Escopo por local: location_id é sempre uma string numérica.
profile.created
Disparo: um novo local é criado.
{ "event": "profile.created", "timestamp": "2026-08-25T10:04:00Z", "account_id": 11073, "location_id": "901234", "data": { "source": "api" }}profile.updated
Disparo: os detalhes de um local existente são editados.
Entrega limitada por debounce a uma por local a cada 60 segundos, no início da janela. As edições dentro da janela são suprimidas, não adiadas. Elas nunca são entregues. Trate changed_fields como uma indicação da edição que iniciou a janela, não como um conjunto completo de diferenças.
O evento chega no início da janela, portanto consultar o local quando ele chega mostra apenas a primeira edição. Programe uma segunda consulta após o encerramento da janela, pelo menos 60 segundos depois, e também faça a reconciliação dos locais periodicamente, pois este evento tem apenas uma tentativa de entrega, sem novas tentativas. Veja recuperação após a perda de um evento.
{ "event": "profile.updated", "timestamp": "2026-08-25T10:06:12Z", "account_id": 11073, "location_id": "901234", "data": { "source": "user", "changed_fields": ["name", "phone"] }}profile.deleted
Disparo: um local é arquivado. Trata-se de uma exclusão lógica. Não há exclusão permanente, e o arquivamento pode ser cancelado com cancelArchiveLocations, o que não gera um evento.
{ "event": "profile.deleted", "timestamp": "2026-08-25T10:20:44Z", "account_id": 11073, "location_id": "901234", "data": { "source": "user" }}Contas conectadas
Ciclo de vida e integridade das conexões com Google e Facebook, junto aos endpoints de Contas conectadas. Escopo por local. platform é sempre google ou facebook; outros provedores não emitem esses eventos.
connected_account_id está sempre presente como chave, mas seu valor é null nos dois eventos de verificação do Google.
connection.location_connected
Gatilho: uma listagem do Google ou do Facebook é vinculada a um local.
{ "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
Gatilho: uma listagem do Google ou do Facebook é desvinculada de um local.
{ "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
Gatilho: as credenciais da conta conectada foram invalidadas. Nada será sincronizado por essa conexão até que alguém a autorize novamente.
{ "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
Gatilho: a conta conectada não consegue mais acessar a listagem do local. É diferente de reauth_required: as credenciais ainda podem ser plenamente válidas, mas o acesso àquela listagem específica foi removido.
{ "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
Gatilho: o Google Business Profile de um local é aprovado na verificação.
{ "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
Gatilho: uma verificação do Google Business Profile termina com falha. Nenhuma chamada REST inicia uma verificação; o próprio status pode ser consultado, conforme descrito acima.
Apenas estados finais emitem um evento: VERIFIED dispara o evento _verified, e SUSPENDED ou DUPLICATE (failure_type rejected) e ERROR_WHILE_FETCHING (transient) disparam este evento. Os estados em andamento (PENDING_VERIFICATION, UNDER_REVIEW, NOT_VERIFIED, NOT_CONNECTED) não produzem nenhum evento, portanto a ausência de um evento não é um sinal. Consulte periodicamente googleVerificationStatus por meio de uma consulta ao local enquanto uma verificação estiver em andamento.
{ "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." }}Avaliações
Avaliações e respostas, junto aos endpoints de Avaliações, incluindo responder, editar resposta e arquivar resposta.
As avaliações na categoria Social são excluídas pela filtragem e nunca são entregues.
interaction.review
Gatilho: uma avaliação é recebida pelo sistema ou alterada.
{ "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
Gatilho: uma resposta a uma avaliação é publicada, editada ou arquivada. A estrutura é a mesma de interaction.review, com duas diferenças: type é Response, e parent_id aponta para a avaliação que está sendo respondida.
Todos os outros campos listados em interaction.review estão presentes com o mesmo significado.
{ "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" } }}Publicações
Publicações locais do Google Business Profile, junto aos endpoints de Publicações. Com escopo por local, location_id é uma string numérica.
Os quatro eventos compartilham a mesma estrutura de data; os campos opcionais variam. Todos os campos opcionais são omitidos quando vazios.
local_post.created
Gatilho: um item de publicação é criado e colocado na fila para envio ao Google. Ele ainda não está no ar.
{ "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
Gatilho: o Google aceitou a publicação e ela está no ar.
{ "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
Gatilho: o Google rejeitou a publicação ou houve uma falha no envio.
{ "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
Gatilho: o item de publicação é excluído.
{ "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
Publicação em redes sociais no nível da marca e ciclo de vida das conexões, junto aos endpoints de Social. Nove eventos: cinco para publicações, quatro para conexões.
account_id e timestamp estão presentes normalmente. Os IDs dentro de data são os mesmos UUIDs simples usados pela API REST, enviados como strings.
social_post.created
Gatilho: uma publicação de rede social é criada. Somente na criação — editar uma publicação existente não emite o evento novamente.
{ "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
Gatilho: a publicação entrou no ar com sucesso completo. Este evento é emitido somente em caso de sucesso completo: pelo menos um canal publicou e nenhum canal apresentou erro. Uma publicação parcial não o emite — nesse caso, é emitido social_post.failed.
{ "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
Gatilho: houve uma falha na publicação. Esta é uma falha de entrega, distinta de uma rejeição editorial. O evento é disparado na última tentativa, portanto não é emitido enquanto ainda houver tentativas disponíveis para a publicação.
items contém somente os canais que apresentaram erro, portanto uma publicação que foi publicada em duas plataformas e falhou em uma terceira chega aqui com um item.
{ "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
Gatilho: um fluxo de aprovação rejeitou a publicação. A rejeição é editorial, não uma falha de entrega: a publicação nunca chegou a uma plataforma.
{ "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
Gatilho: a publicação foi arquivada, seja por meio de POST /social/posts/cancel ou pela rotina agendada de arquivamento. O evento só é disparado quando há uma transição real, portanto arquivar novamente uma publicação já arquivada não emite nada.
{ "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
Gatilho: um canal da marca tornou-se ativo, seja na primeira conexão ou na reconexão de um canal que havia sido arquivado. is_reconnect diferencia os dois casos.
{ "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
Gatilho: o canal foi removido deliberadamente por uma chamada a disconnect. O evento só é emitido quando o canal foi de fato arquivado, portanto uma desconexão que falhou não produz um evento falso.
{ "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
Gatilho: o canal foi perdido involuntariamente — a plataforma invalidou o token ou uma execução da reconciliação constatou que o canal não estava mais acessível. Ninguém solicitou isso, o que diferencia esse evento de disconnected.
{ "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álise de avaliações
Resumos programados de avaliações, um evento por local por período.
Ambos os eventos compartilham a mesma estrutura de data:
Um local sem atividade no período não emite nada, mas o mesmo ocorre com um local cujo snapshot nunca chegou. A ausência de um snapshot é ambígua, e, para esta família, a interpretação de que não houve problema é a menos provável. Ela pode significar: nenhuma atividade; uma entrega que falhou ou excedeu o tempo limite (há uma tentativa e nenhuma nova tentativa); entrega impedida porque a conta não tem direito ao recurso de webhooks, não tem URL configurada, não foi verificada ou está bloqueada; ou, o mais provável neste caso, o limite por minuto descartando parte da rajada como rate_limited.
Nunca registre zero com base na ausência de um snapshot. Confira os dados em GET /locations/{locationId}/review-analytics-overview para o mesmo período e, se essa leitura também falhar, informe o período como indisponível, em vez de zero.
review_analytics.daily_snapshot
Acionamento: a tarefa de resumo diário, uma vez por local por dia.
{ "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
Acionamento: a tarefa de resumo semanal, uma vez por local por semana. period é o primeiro dia da semana que está sendo resumida.
{ "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 você pode receber, mas dos quais sua implementação não deve depender
A plataforma emite outras famílias: campanhas de avaliações, classificações, impulsionamentos de publicações em redes sociais, alterações de status de contas de anúncios em redes sociais, ideias de publicações geradas por IA e propriedade do Google Business Profile. Elas não têm um endpoint REST publicado na Listings API, não estão documentadas aqui e suas estruturas não estão cobertas por nenhuma garantia de compatibilidade. Como há uma única URL e nenhuma assinatura por evento, seu manipulador deve ignorar qualquer event que não reconheça e ainda assim retornar 200.