Créer le premier Google Business Profile d’un établissement

Soumettez un nouveau Google Business Profile via un compte Google connecté, puis suivez la vérification via l’établissement, ses fiches et les webhooks.

La mise en correspondance et l’association ne fonctionnent que lorsqu’une fiche Google existe déjà. Un nouveau point de vente n’en possède pas, vous demandez donc à l’API d’en créer une sous un compte Google connecté. La création est asynchrone et Google vérifie le profil selon son propre calendrier ; ce guide porte donc principalement sur le suivi du résultat.

1. Confirmer que l’établissement n’a pas de fiche Google

Consultez les fiches premium de l’établissement et recherchez la ligne dont le site.name est Google Maps. Un établissement sans présence sur Google affiche REQUIRING_ACTION avec un connectedAccountId à null.

Google row
curl https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/listings/premium \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "site": { "name": "Google Maps", "url": "maps.google.com" },  "syncStatus": "REQUIRING_ACTION",  "displayStatus": "Connect your account to sync the listing",  "listingUrl": null,  "connectedAccountId": null,  "verified": false}

Si la ligne est déjà SYNCED, ou si connectedAccountId est renseigné, l’établissement possède une fiche Google et ce guide ne s’applique pas. Associez-la ou mettez-la à jour à la place.

2. Choisir un dossier (facultatif)

Google organise les fiches d’un compte en dossiers, également appelés groupes de comptes. Listez les dossiers du compte connecté et transmettez-en un dans folderId si le propriétaire souhaite placer le nouveau profil dans un groupe précis. Ignorez cette étape pour le créer à la racine du compte.

Folders
curl https://listingsapi.com/api/v4/connected-accounts/4f712c17-4f95-42dd-90f4-97171a2e67b5/folders \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "getFoldersUnderGoogleAccount": [      { "folderId": "accounts/104890024806530350198", "folderName": "Bright Smile Dental", "locationCount": null }    ]  }}

Utilisez folderId tel quel ; il s’agit de la chaîne accounts/{id}, pas d’un nombre. locationCount peut être null lorsque Google ne le communique pas. Le point de terminaison n’est valide que pour les connexions GoogleAccount.

3. Créer la fiche

Envoyez le id de l’établissement encodé en base64 et le compte, ainsi que le dossier si vous en avez choisi un. La réponse indique uniquement que la demande a été acceptée.

Create listing
curl -X POST https://listingsapi.com/api/v4/locations/create/gmb-listing \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "input": {    "locationId": "TG9jYXRpb246MTgwMDI4OQ==",    "connectedAccountId": "4f712c17-4f95-42dd-90f4-97171a2e67b5",    "folderId": "accounts/104890024806530350198"  }}'
JSON
{  "data": {    "createGmbListingForLocation": { "clientMutationId": null, "success": true, "errors": null }  }}

success: true signifie que la création a été lancée, pas qu’un profil est en ligne. Google examine chaque nouveau profil avant de le publier, ce qui peut prendre plusieurs jours. Lorsque success est false, errors en indique la raison : des champs obligatoires manquent pour l’établissement, celui-ci possède déjà une fiche Google, il est archivé ou le compte connecté n’est plus actif.

4. Suivre le statut de vérification de l’établissement

Chaque lecture d’un établissement renvoie googleVerificationStatus avec un status et un message. Consultez à nouveau l’établissement pour voir où en est Google dans le processus.

Verification status
curl -G https://listingsapi.com/api/v4/locations-by-ids \--data-urlencode 'ids=["TG9jYXRpb246MTgwMDI4OQ=="]' \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "id": "TG9jYXRpb246MTgwMDI4OQ==",  "databaseId": 1800289,  "googleVerificationStatus": { "status": "PENDING_VERIFICATION", "message": null }}
statusSignificationFinal
NOT_CONNECTEDAucune fiche Google n’est encore associée. Cet état est attendu avant que l’étape 3 ne prenne effet.Non
NOT_VERIFIEDLa fiche existe, la vérification n’a pas commencé.Non
PENDING_VERIFICATIONGoogle vérifie le profil.Non
UNDER_REVIEWGoogle examine le profil.Non
VERIFIEDLe profil est en ligne.Oui
SUSPENDEDGoogle a suspendu le profil.Oui
DUPLICATEGoogle a estimé qu’il s’agissait d’un doublon d’un profil existant.Oui
ERROR_WHILE_FETCHINGLe statut n’a pas pu être récupéré auprès de Google. Réessayez plus tard.Oui

Une lecture quotidienne suffit pour un processus qui se mesure en jours. Respectez Retry-After lors d’une réponse 429 si vous vérifiez de nombreux établissements à la fois.

5. Suivre la ligne Google dans les fiches

La ligne des fiches premium de l’étape 1 suit la même progression du côté de la fiche. Exécutez à nouveau l’appel de l’étape 1 et consultez syncStatus, verified et listingUrl.

syncStatusSignification
REQUIRING_ACTIONRien n’a encore été créé, ou le compte nécessite une intervention. Consultez displayStatus.
IN_PROGRESSSoumise à Google, en attente d’une réponse.
PENDING_APPROVALEn attente de l’approbation de Google.
SYNCEDEn ligne. listingUrl est renseigné et connectedAccountId indique le nom du compte.
FAILEDGoogle a rejeté la soumission. syncIssue en indique la raison.

6. Écoutez les webhooks de vérification

Si une URL de webhook est définie dans le tableau de bord, deux événements couvrent les états finaux, ce qui vous évite d'effectuer des interrogations périodiques. Tous deux contiennent location_id et ont toujours data.connected_account_id: null.

ÉvénementSe déclenche lorsqueChamps de data
connection.google_verification_verifiedLe profil atteint l'état VERIFIED.platform: "google"
connection.google_verification_failedLe profil atteint l'état SUSPENDED ou DUPLICATE (failure_type: "rejected") ou ERROR_WHILE_FETCHING (failure_type: "transient").platform, failure_type, reason
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." }}

Seuls les échecs transient justifient une nouvelle tentative. Les états en cours n'émettent aucun événement ; le silence ne constitue donc pas un signal : tant qu'une vérification est en cours, consultez googleVerificationStatus comme à l'étape 4.

Étapes suivantes