Connect

Create Google Business Profile location

Changed on

Creates a Google Business Profile listing under the Google account of this Zernio account and attaches it to this account, so verification, details, posts and reviews work on it right away.

Only for an account with no location yet (connected with allowNoLocation). If the account already has a location, the request is rejected with 409 and nothing is created.

Search first with POST /v1/accounts/{accountId}/gmb-locations/search to avoid duplicating an existing listing, and pick primaryCategory from GET /v1/accounts/{accountId}/gmb-categories.

Required by Google: title, languageCode (immutable once set) and primaryCategory. At least one of storefrontAddress or serviceArea is required. When storefrontAddress is absent, at least one of phone or websiteUri is required. Both rules are checked before Google is called and a violation returns 400 naming the field.

Set validateOnly to check the request with Google without creating anything: the response carries the would-be location and nothing is attached.

A new listing is not on Google Maps until it is verified. voiceOfMerchantState.hasVoiceOfMerchant is false after creation; start verification with the gmb-verifications endpoints. voiceOfMerchantState is null if Google could not return it, and the listing was still created.

If Google creates the listing but it cannot be attached, the error message names the created locations/<id>; attach it with PUT /v1/accounts/{accountId}/gmb-locations.

post/v1/accounts/{accountId}/gmb-locations

Request

Path parameters

accountIdstring required

Headers

Idempotency-Keystring

Optional client-generated unique key (e.g. a UUID) that makes retries safe.

  • Same key + same body: replays the original response.
  • Same key + different body: 422.
  • Key still processing: 409.

A request cut off mid-handler (e.g. by a function timeout) can leave its key in progress, answering 409 until the key expires after 24 hours.

On the Ads create, boost and duplicate endpoints, a same-body retry runs again once the cut-off request started more than 15 minutes ago.

Request body

titlestring required

Business name as shown on Google.

languageCodestring required

BCP-47 language of the listing (e.g. "es"). Immutable after creation.

primaryCategorystring required

Category name from GET gmb-categories (e.g. "categories/gcid:cafe"). A bare "gcid:cafe" is also accepted.

additionalCategoriesstring[]

Further category names, same format as primaryCategory.

phonestring

Primary phone number. Required when storefrontAddress is absent and websiteUri is not set.

websiteUristring

Website URL. Required when storefrontAddress is absent and phone is not set.

descriptionstring

Business description (Google profile.description).

regularHoursobject

Google regularHours object (periods with openDay, openTime, closeDay, closeTime).

validateOnlyboolean

Validate with Google without creating the listing or attaching anything.

Response

Listing created and attached (or validated, when validateOnly is true)

successboolean
accountIdstring
validateOnlyboolean

Present and true when validateOnly was requested.

locationobject

The location as Google returns it. id is present on a real create.

voiceOfMerchantStateobject nullable

Verification state of the new listing; null if Google could not return it.

Changes