未登録の拠点に Google Business Profileを作成

接続済みの Google アカウント配下で、拠点の新しい Google Business Profileを作成するリクエストを送信し、拠点、その掲載情報、Webhook を通じて確認手続きの進行状況を追跡します。

照合とリンクは、Google の掲載情報がすでに存在する場合にのみ機能します。新しい店舗には掲載情報がないため、接続済みの Google アカウント配下に作成するよう API にリクエストします。作成は非同期で行われ、Google が独自のスケジュールでプロフィールの確認手続きを進めるため、このガイドでは主に結果の確認方法を説明します。

1. 拠点に Google の掲載情報がないことを確認する

拠点のプレミアム掲載情報を取得し、site.name が Google Maps の行を探します。Google に掲載されていない拠点では、REQUIRING_ACTION と表示され、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}

行がすでに SYNCED である場合、または connectedAccountId が設定されている場合、その拠点には Google の掲載情報が存在するため、このガイドは適用されません。代わりに、その掲載情報をリンクまたは更新してください。

2. フォルダーを選択する(任意)

Google は、アカウント配下の掲載情報を、アカウント グループとも呼ばれるフォルダーに整理します。所有者が新しいプロフィールを特定のグループ内に作成したい場合は、接続済みアカウントのフォルダーを一覧表示し、そのうちの 1 つを folderId として渡します。アカウントのルートに作成する場合は、この手順をスキップしてください。

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 }    ]  }}

folderId は変更せずに使用してください。これは数値ではなく、accounts/{id} 文字列です。Google が locationCount を返さない場合、その値は null になることがあります。このエンドポイントは GoogleAccount 接続でのみ有効です。

3. 掲載情報を作成する

拠点の base64 形式の id とアカウントを送信し、フォルダーを選択した場合はそれも含めます。レスポンスが示すのは、リクエストが受け付けられたということだけです。

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 は作成が開始されたことを意味し、プロフィールが公開されたことを意味するものではありません。Google はすべての新しいプロフィールを公開前に審査するため、数日かかることがあります。success が false の場合、errors にその理由が示されます。理由としては、拠点に必須フィールドが不足している、すでに Google の掲載情報が存在する、拠点がアーカイブされている、または接続済みアカウントが有効でなくなっていることが挙げられます。

4. 拠点の確認ステータスを確認する

拠点を取得するたびに、status と message を含む googleVerificationStatus が返されます。拠点を再取得して、Google の処理がどの段階にあるかを確認します。

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 }}
status意味最終状態
NOT_CONNECTEDGoogle の掲載情報はまだ関連付けられていません。手順 3 が反映される前は、この状態になります。いいえ
NOT_VERIFIED掲載情報は存在しますが、確認手続きはまだ開始されていません。いいえ
PENDING_VERIFICATIONGoogle がプロフィールの確認手続きを進めています。いいえ
UNDER_REVIEWGoogle がプロフィールを審査しています。いいえ
VERIFIEDプロフィールは公開されています。はい
SUSPENDEDGoogle がプロフィールを停止しました。はい
DUPLICATEGoogle が既存のプロフィールと重複していると判断しました。はい
ERROR_WHILE_FETCHINGGoogle からステータスを取得できませんでした。後で再試行してください。はい

日単位で進む処理のため、取得は 1 日に 1 回で十分です。多くの拠点を一度に確認する場合は、429 の Retry-After に従ってください。

5. 掲載情報内の Google の行を確認する

手順 1 のプレミアム掲載情報の行では、掲載情報側から同じ進行状況を追跡できます。手順 1 の呼び出しを再実行し、syncStatus、verified、listingUrl を確認します。

syncStatus意味
REQUIRING_ACTIONまだ何も作成されていないか、アカウントへの対応が必要です。displayStatus を参照してください。
IN_PROGRESSGoogle に送信済みで、応答を待っています。
PENDING_APPROVALGoogle の承認を待っています。
SYNCED公開されています。listingUrl に値が設定され、connectedAccountId で対象のアカウントがわかります。
FAILEDGoogle が申請を拒否しました。syncIssue にその理由が示されています。

6. 確認用の Webhook を受信する

ダッシュボードで Webhook URL が設定されている場合、最終状態は 2 つのイベントで通知されるため、ポーリングは不要です。どちらにも location_id と、常に data.connected_account_id: null が含まれます。

イベント発火条件data のフィールド
connection.google_verification_verifiedプロフィールが VERIFIED に到達したときです。platform: "google"
connection.google_verification_failedプロフィールが SUSPENDED、DUPLICATE(failure_type: "rejected")、または 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." }}

再試行する価値があるのは transient の失敗だけです。処理中の状態ではイベントが一切発行されないため、通知がないことは判断材料になりません。確認が進行中の場合は、手順 4 と同様に googleVerificationStatus を読み取ってください。

次の手順