Ereignisreferenz
Alle 26 Webhook-Ereignisse der Listings API, nach Ressource gruppiert, jeweils mit den genauen Feldern und einer Beispiel-Payload.
26 Ereignisse, gruppiert nach der REST-Ressource, auf die sie sich beziehen. Jedes Ereignis auf dieser Seite wird an Ihre einzige Webhook-URL zugestellt. Es gibt keine Abonnements für einzelne Ereignisse. Verzweigen Sie daher anhand von event und ignorieren Sie, was Sie nicht benötigen.
Alle verwenden die Standard-Payload mit Ausnahme von listing.submission, das weiter unten gesondert beschrieben wird. Optionale Felder innerhalb von data werden bei leerem Inhalt weggelassen, statt als null gesendet zu werden.
Übersicht
Einträge
Gehört zu den Endpunkten für Einträge, insbesondere zu GET /locations/{locationId}/listings/premium, der für jeden Eintrag die Werte syncStatus und listingUrl zurückgibt, die dieses Ereignis meldet.
listing.submission
Auslöser: Die Übermittlung eines Eintrags für einen Standort an eine Verzeichniswebsite erreicht einen Endzustand.
Oberste Ebene:
Innerhalb von 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"}Standorte
Standortlebenszyklus, mit einer 1:1-Zuordnung zu createLocation, updateLocation und archiveLocations. Auf einen Standort beschränkt: location_id ist immer eine Zeichenfolge aus Ziffern.
profile.created
Auslöser: Ein neuer Standort wird erstellt.
{ "event": "profile.created", "timestamp": "2026-08-25T10:04:00Z", "account_id": 11073, "location_id": "901234", "data": { "source": "api" }}profile.updated
Auslöser: Die Angaben zu einem bestehenden Standort werden bearbeitet.
Auf eine Zustellung pro Standort innerhalb von 60 Sekunden begrenzt, jeweils beim ersten Auftreten. Weitere Änderungen innerhalb dieses Zeitfensters werden zusammengefasst und nicht verzögert zugestellt. Sie werden nie zugestellt. Betrachten Sie changed_fields als Hinweis auf die Änderung, die das Zeitfenster ausgelöst hat, und nicht als vollständige Änderungsübersicht.
Das Ereignis trifft zu Beginn des Zeitfensters ein. Wenn Sie den Standort bei Eingang erneut abrufen, sehen Sie daher nur diese erste Änderung. Planen Sie einen zweiten Abruf nach Ablauf des Zeitfensters, also mindestens 60 Sekunden später, und gleichen Sie Standorte zusätzlich in regelmäßigen Zeitabständen ab, da für dieses Ereignis nur ein Zustellversuch ohne Wiederholung erfolgt. Siehe Nachholen eines verpassten Ereignisses.
{ "event": "profile.updated", "timestamp": "2026-08-25T10:06:12Z", "account_id": 11073, "location_id": "901234", "data": { "source": "user", "changed_fields": ["name", "phone"] }}profile.deleted
Auslöser: Ein Standort wird archiviert. Dies ist eine logische Löschung. Eine endgültige Löschung ist nicht möglich, und die Archivierung kann mit cancelArchiveLocations rückgängig gemacht werden, wobei kein Ereignis ausgelöst wird.
{ "event": "profile.deleted", "timestamp": "2026-08-25T10:20:44Z", "account_id": 11073, "location_id": "901234", "data": { "source": "user" }}Verbundene Konten
Lebenszyklus und Zustand der Verbindungen zu Google und Facebook, ergänzend zu den Endpunkten für verbundene Konten. Auf einzelne Standorte beschränkt. platform ist immer google oder facebook; andere Anbieter senden diese Ereignisse nicht.
connected_account_id ist als Schlüssel immer vorhanden, hat bei den beiden Google-Verifizierungsereignissen jedoch den Wert null.
connection.location_connected
Auslöser: Ein Google- oder Facebook-Eintrag wird mit einem Standort verknüpft.
{ "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
Auslöser: Die Verknüpfung eines Google- oder Facebook-Eintrags mit einem Standort wird aufgehoben.
{ "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
Auslöser: Die Zugangsdaten des verbundenen Kontos wurden ungültig gemacht. Über diese Verbindung wird nichts synchronisiert, bis jemand sie erneut autorisiert.
{ "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
Auslöser: Das verbundene Konto kann nicht mehr auf den Eintrag des Standorts zugreifen. Im Unterschied zu reauth_required können die Zugangsdaten weiterhin uneingeschränkt gültig sein, aber der Zugriff auf diesen bestimmten Eintrag wurde entzogen.
{ "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
Auslöser: Das Google Business Profile eines Standorts wird erfolgreich verifiziert.
{ "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
Auslöser: Die Verifizierung eines Google Business Profile endet mit einem endgültigen Fehler. Kein REST-Aufruf startet eine solche Verifizierung; der Status selbst kann wie oben beschrieben ausgelesen werden.
Nur Endzustände lösen ein Ereignis aus: VERIFIED löst das Ereignis _verified aus, und SUSPENDED oder DUPLICATE (failure_type rejected) sowie ERROR_WHILE_FETCHING (transient) lösen dieses Ereignis aus. Die Zwischenzustände (PENDING_VERIFICATION, UNDER_REVIEW, NOT_VERIFIED, NOT_CONNECTED) lösen keinerlei Ereignis aus, daher lässt das Ausbleiben eines Ereignisses keinen Rückschluss zu. Fragen Sie googleVerificationStatus während einer laufenden Verifizierung regelmäßig über einen Standortabruf ab.
{ "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." }}Bewertungen
Bewertungen und Antworten, ergänzend zu den Endpunkten für Bewertungen, einschließlich Antworten, Antwort bearbeiten und Antwort archivieren.
Bewertungen der Kategorie Social werden herausgefiltert und niemals zugestellt.
interaction.review
Auslöser: Eine Bewertung wird eingelesen oder geändert.
{ "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
Auslöser: Eine Antwort auf eine Bewertung wird veröffentlicht, bearbeitet oder archiviert. Dieselbe Struktur wie interaction.review, mit zwei Unterschieden: type hat den Wert Response, und parent_id verweist auf die Bewertung, auf die geantwortet wird.
Alle anderen unter interaction.review aufgeführten Felder sind mit derselben Bedeutung vorhanden.
{ "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" } }}Beiträge
Lokale Beiträge in Google Business Profile, ergänzend zu den Posts-Endpunkten. Auf einen Standort beschränkt, location_id ist eine numerische Zeichenfolge.
Die vier Ereignisse verwenden dieselbe data-Struktur; die optionalen Felder unterscheiden sich. Alle optionalen Felder werden weggelassen, wenn sie leer sind.
local_post.created
Auslöser: Ein Beitragselement wird erstellt und für die Übermittlung an Google in die Warteschlange gestellt. Es ist noch nicht veröffentlicht.
{ "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
Auslöser: Google hat den Beitrag akzeptiert und er ist veröffentlicht.
{ "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
Auslöser: Google hat den Beitrag abgelehnt oder die Übermittlung ist fehlgeschlagen.
{ "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
Auslöser: Das Beitragselement wird gelöscht.
{ "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
Veröffentlichungen in sozialen Medien auf Markenebene und Lebenszyklus von Verbindungen, ergänzend zu den Social-Endpunkten. Neun Ereignisse: fünf für Beiträge, vier für Verbindungen.
account_id und timestamp sind wie gewohnt vorhanden. Die IDs innerhalb von data sind dieselben einfachen UUIDs, die auch die REST API verwendet, und werden als Zeichenfolgen gesendet.
social_post.created
Auslöser: Ein Beitrag für soziale Medien wird erstellt. Nur beim Erstellen — eine Bearbeitung eines bestehenden Beitrags löst das Ereignis nicht erneut aus.
{ "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
Auslöser: Der Beitrag wurde vollständig veröffentlicht. Dieses Ereignis wird nur bei vollständigem Erfolg ausgelöst: Mindestens ein Kanal hat den Beitrag veröffentlicht und bei keinem Kanal ist ein Fehler aufgetreten. Eine teilweise Veröffentlichung löst es nicht aus — in diesem Fall wird stattdessen social_post.failed ausgelöst.
{ "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
Auslöser: Die Veröffentlichung ist fehlgeschlagen. Dies ist ein Fehler bei der Übermittlung, keine redaktionelle Ablehnung. Das Ereignis wird beim letzten Wiederholungsversuch ausgelöst, also nicht, solange für den Beitrag noch Versuche übrig sind.
items enthält nur die Kanäle, bei denen ein Fehler aufgetreten ist, sodass ein Beitrag, der auf zwei Plattformen veröffentlicht wurde und auf einer dritten fehlgeschlagen ist, hier mit einem Element ankommt.
{ "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
Auslöser: Ein Freigabeprozess hat den Beitrag abgelehnt. Es handelt sich um eine redaktionelle Ablehnung, nicht um einen Übermittlungsfehler: Der Beitrag hat keine Plattform erreicht.
{ "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
Auslöser: Der Beitrag wurde archiviert, entweder über POST /social/posts/cancel oder durch den geplanten Archivierungslauf. Das Ereignis wird nur bei einem tatsächlichen Statuswechsel ausgelöst, sodass das erneute Archivieren eines bereits archivierten Beitrags kein Ereignis auslöst.
{ "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
Auslöser: Ein Markenkanal wurde aktiv, entweder durch eine erstmalige Verbindung oder durch die erneute Verbindung eines zuvor archivierten Kanals. is_reconnect unterscheidet die beiden Fälle.
{ "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
Auslöser: Der Kanal wurde bewusst durch einen disconnect-Aufruf entfernt. Das Ereignis wird nur ausgelöst, wenn der Kanal tatsächlich archiviert wurde, sodass ein fehlgeschlagener disconnect-Aufruf kein falsches Ereignis erzeugt.
{ "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
Auslöser: Die Verbindung zum Kanal ging unbeabsichtigt verloren — die Plattform hat das Token ungültig gemacht oder ein Abgleich hat ergeben, dass der Kanal nicht mehr erreichbar ist. Niemand hat dies veranlasst, was dieses Ereignis von disconnected unterscheidet.
{ "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." }}Bewertungsanalysen
Zeitgesteuerte Zusammenfassungen von Bewertungen, ein Ereignis pro Standort und Zeitraum.
Beide Ereignisse verwenden dieselbe data-Struktur:
Für einen Standort ohne Aktivität im Zeitraum wird nichts gesendet, aber auch für einen Standort, dessen Momentaufnahme nie angekommen ist, erhalten Sie nichts. Eine fehlende Momentaufnahme ist mehrdeutig, und bei dieser Ereignisgruppe ist die unproblematische Erklärung am wenigsten wahrscheinlich. Mögliche Ursachen sind: keine Aktivität; eine fehlgeschlagene oder wegen Zeitüberschreitung abgebrochene Zustellung (es gibt einen Versuch und keine Wiederholung); eine unterbundene Zustellung, weil das Konto keine Berechtigung für Webhooks hat, keine URL konfiguriert ist oder das Konto nicht verifiziert oder gesperrt ist; oder, hier am wahrscheinlichsten, das Limit pro Minute, durch das ein Teil des Anfrageschubs als rate_limited verworfen wird.
Erfassen Sie niemals eine Null allein aufgrund einer fehlenden Momentaufnahme. Gleichen Sie die Daten mit GET /locations/{locationId}/review-analytics-overview für denselben Zeitraum ab, und wenn auch dieser Lesezugriff fehlschlägt, weisen Sie den Zeitraum als nicht verfügbar statt mit dem Wert Null aus.
review_analytics.daily_snapshot
Auslöser: der tägliche Zusammenfassungsjob, einmal pro Standort und Tag.
{ "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
Auslöser: der wöchentliche Zusammenfassungsjob, einmal pro Standort und Woche. period ist der erste Tag der zusammengefassten Woche.
{ "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 }}Ereignisse, die Sie möglicherweise erhalten, auf die Sie sich aber nicht stützen sollten
Die Plattform sendet weitere Ereignisgruppen: Bewertungskampagnen, Rankings, Hervorhebungen von Social-Media-Beiträgen, Statusänderungen von Social-Media-Werbekonten, KI-Beitragsideen und Inhaberschaft von Google Business Profile. Für diese gibt es keinen veröffentlichten REST-Endpunkt in der Listings API, sie sind hier nicht dokumentiert, und für ihre Strukturen gilt keine Kompatibilitätsgarantie. Da es nur eine URL und keine ereignisspezifischen Abonnements gibt, sollte Ihr Handler jeden unbekannten event-Wert ignorieren und dennoch 200 zurückgeben.