This article presents possible use cases and corresponding sample flows that you can support. It provides a useful starting point as you plan your implementation.
Prerequisite: every flow assumes the site already has a Google connection, established through
the Google Business Profile Connection API. Without one, the first connection-dependent call fails
with FAILED_PRECONDITION and CONNECTION_NOT_FOUND.
The site owner has just connected their Google account and you want their locations available in Wix.
accountId. This returns only what the site
hasn't imported yet, so re-running the flow won't offer duplicates.id and accountId on each.results[].itemMetadata.error. The call reports per-item failures instead of aborting, so a
200 does not mean every location imported.Repeat steps 2 to 5 per account if the owner wants locations from more than one.
Which method to use depends on whether you need Google's business data.
id, googleLocationId, or accountId.With Query Google Locations, check each row for a googleError. A single location failing at Google
does not fail the request and does not break paging. The page comes back with that row's error
attached, so render it as a per-location problem rather than an empty dashboard.
Service-area businesses (trades, mobile services, anything without a storefront) need an address on
file before Google will offer verification methods, because Google uses it as the verification
context.
location.id set to the location you're verifying, the address in
location.serviceAreaPostalAddress, and fieldMask = "service_area_postal_address". The ID is what
identifies the row to patch; without it there is nothing to update. This is a Wix-side write; it
does not touch the Business Profile.locationId. Skipping step 2, or saving an address
Google cannot resolve, makes Google reject this, surfaced as INVALID_VERIFICATION_ADDRESS.
Prompt the owner to correct the address and retry.pendingVerificationId. Persist it: a postcard takes days to arrive,
so it has to survive the session, and step 6 is impossible without it.locationId, pendingVerificationId and pin (all three are
required), then handle each typed outcome:
VERIFICATION_PIN_INVALID: prompt the owner to check and re-enter the PIN for the same pending
verification. Do not request a new PIN automatically for a typing mistake.VERIFICATION_PIN_EXPIRED: the PIN is no longer usable; restart from step 5 to request a new
one.VERIFICATION_EXPIRED: Google no longer recognizes the pending verification; restart from
step 5 to create a new one.Treat that address as personal data throughout: for a service-area business it's usually the owner's home. Collect it for this flow, don't log it, and don't keep your own copy.
For a storefront business, skip steps 1 and 2 and start at Get Verification Options.
A location existing in Wix does not mean it appears on Google. Verification can be pending, the profile can be suspended, or someone else can be claiming ownership.
Surface this on a dashboard rather than only on failure. It's the difference between "your location is set up" and "your location is set up but nobody on Google can see it".
Reviews come straight from Google and contain reviewer names and free text. Handle them as personal data.
There are two ways to change a location's photos, and which one you want depends on how many changes you're making.
These write to the Business Profile immediately and return the outcome. There's
no draft state. They don't pace themselves, so use them for single changes: a
burst returns 429.
Google accepts only about 10 edits per minute per Business Profile, so a site owner saving a full gallery can't be served by immediate writes. Queue the changes instead and let them apply in the background.
Call Bulk Create Media Uploads with everything to add or remove. It returns in well under a second without calling Google. One call has to be either all additions or all removals, so send two if you need both.
Poll List Media Uploads to follow progress. Read the response as a whole:
| What comes back | What it means |
|---|---|
Anything PENDING or UPLOADING | Still working. Don't report results yet. |
Only FAILED items | Finished, and those items didn't make it. |
| Nothing | Nothing is outstanding for this location. |
Show the failures, if any. Call Dismiss Media Upload Failures when the site owner acknowledges them.
There's no completion callback, so polling is the only way to know. Expect a large set to take a while: the queue applies a few changes a minute per location, so 52 photos take on the order of ten minutes to appear in full.
A change that succeeds is removed from the queue, and so is a failure that's been cleared. The two look identical afterwards, so an empty response tells you the queue is empty and nothing more. Confirm against List Media rather than inferring success.
This matters most when more than one app manages the same location. Queuing clears every failure for that location, whoever queued it, so one app submitting a change discards failures the other hasn't read yet. Read failures before queuing again, and don't treat an empty queue as proof your own submission worked.
While the queue is still working, Google's list lags behind what the site owner
asked for in both directions. Count only changes still on their way, because a
FAILED addition never reached Google:
The same budget of roughly 10 edits per minute covers every write to the
profile, not just photos. Update Google Location and Update Location
Attributes draw on it too, so interleaving those with photo changes brings the
429 closer. Pace the profile as a whole rather than each method separately, and
treat a 429 as worth retrying after a delay rather than as a rejection.
Both hit Google live and are subject to Google's rate limits and data-freshness rules. Cache results on your side for dashboards rather than calling per page view.
Decide first whether you are removing it from Wix or deleting the customer's Google listing. These are different operations and one is not reversible.
Both require GBP_ADMIN.
Bulk Delete Locations can partially succeed. An OK response does not mean every row was deleted;
inspect every results[].itemMetadata entry and handle its error before treating the batch as
complete.
If Delete Google Location returns LOCATION_DB_PERSIST_FAILED, Google deleted the listing but Wix
didn't record it, leaving a row pointing at nothing. The error payload carries the location ID; call
Delete Location with it to reconcile.
Last updated: 1 September 2026