Change a Google Business Profile listing

Embed
Preview of the card
<a href="https://seolyticize.com/docs/ref-update-business-profile"><img src="https://seolyticize.com/docs/_api/public/orgs/71cb2b7a-a719-4003-b3ea-6321dc1db8ab/spaces/3bf2dbf7-3faa-473c-ba3b-30588f5f8de4/pages/8249032f-3be4-4dd4-b2ec-cc977606a979/social-card.svg?v=3e7ae33eec8b" alt="Change a Google Business Profile listing" width="600" height="315"></a>
POSThttps://seolyticize.com/api/v1/tools/update_business_profile

Changes the client's own Google Business Profile listing through its connected Business Profile (the connection review replies are posted with): regularHours (the whole week, 24-hour HH:MM, closeDay past midnight), specialHours (holidays and one-off dates, closed or open–close; needs regular hours on the listing), description (up to 750 characters), phone (primary and up to two additional), website, categories (Google ids such as gcid:dentist; primary and up to nine additional) and simple yes/no attributes by Google id. Only the fields given are changed (locations.patch with an updateMask; attributes through updateAttributes); phone and category lists Google replaces whole keep the half not given from the listing. dryRun: true changes nothing and returns the exact patch and updateMask, the listing's fields before and after, and Google's own check of the change (validateOnly) — show it to the person first. Refused with missing_scope when the connection was not granted permission to manage the listing, and not_connected when the location has none; next says how to connect it. Google may hold a change for review before it shows. Answers 'update our opening hours' and 'change the business description'. Free.

Parameters

Idempotency-Keystringheader
Any unique string, up to 200 characters. A retry with the same key and body is answered from the first answer (Idempotent-Replayed: true) for a day, so it never buys or writes twice; the same key with another body is refused.

Request body

application/json
clientIdstringrequired
locationIdstring
The client's location, from list_local_locations. Default: its one connected location.
changesobjectrequired
Show child parameters
descriptionstring
phoneobject
Primary, and up to two additional; additional defaults to what the listing has.
Show child parameters
primarystringrequired
additionalstring[]
websitestring
categoriesobject
Google category ids such as gcid:dentist; additional defaults to what the listing has.
Show child parameters
primarystringrequired
additionalstring[]
regularHoursobject[]
The whole week: every period the listing is open (a day not listed is closed). close may be 24:00; closeDay for hours past midnight.
Show child parameters
daystringrequired
MONDAY | TUESDAY | WEDNESDAY | THURSDAY | FRIDAY | SATURDAY | SUNDAY
openstringrequired
closestringrequired
closeDaystring
MONDAY | TUESDAY | WEDNESDAY | THURSDAY | FRIDAY | SATURDAY | SUNDAY
specialHoursobject[]
Holidays and one-off hours: each date closed, or open between open and close. Replaces the listing's special hours.
Show child parameters
datestringrequired
closedboolean
openstring
closestring
attributesobject
Yes/no attributes by Google id, e.g. has_wheelchair_accessible_entrance.
dryRunboolean
True to do nothing and get back exactly what the call would do: the rows it would write, the addresses it would submit, the emails it would send.
= false
{
  "clientId": "string",
  "locationId": "string",
  "changes": {
    "description": "string",
    "phone": {
      "primary": "string",
      "additional": [
        "string"
      ]
    },
    "website": "string",
    "categories": {
      "primary": "string",
      "additional": [
        "string"
      ]
    },
    "regularHours": [
      {
        "day": "MONDAY",
        "open": "string",
        "close": "string",
        "closeDay": "MONDAY"
      }
    ],
    "specialHours": [
      {
        "date": "string",
        "closed": true,
        "open": "string",
        "close": "string"
      }
    ],
    "attributes": {}
  },
  "dryRun": false
}

Code samples

cURL
curl -X POST "https://seolyticize.com/api/v1/tools/update_business_profile" \
  -H "Authorization: Bearer $SEOLYTICIZE_API_KEY" \
  -H "Idempotency-Key: <value>" \
  -H "Content-Type: application/json" \
  -d '{"clientId":"string","locationId":"string","changes":{"description":"string","phone":{"primary":"string","additional":["string"]},"website":"string","categories":{"primary":"string","additional":["string"]},"regularHours":[{"day":"MONDAY","open":"string","close":"string","closeDay":"MONDAY"}],"specialHours":[{"date":"string","closed":true,"open":"string","close":"string"}],"attributes":{}},"dryRun":false}'
TypeScript
Python
Go
PHP
Ruby
Java

Responses

200 The tool's result under data, and its meta.
Example
{
  "data": {},
  "meta": {
    "requestId": "string",
    "costMicros": 0,
    "cached": true,
    "cachedFrom": "string",
    "dataAsOf": "string",
    "sources": [
      "string"
    ],
    "partial": true,
    "next": [
      {
        "tool": "string",
        "args": {},
        "why": "string"
      }
    ],
    "nextCursor": "string",
    "dryRun": true
  }
}
Schema
datarequired
metaobjectrequired
Beside every answer: what it cost, whether it came from cache, how fresh it is, whether it is complete, and what to call next.
Show child parameters
requestIdstringrequired
costMicrosintegerrequired
Charged by this call, micro-USD (1,000,000 = $1).
cachedbooleanrequired
True when nothing was bought.
cachedFromstring
When the oldest cached answer used was bought.
dataAsOfstring
sourcesstring[]
partialbooleanrequired
True when the data is incomplete: a running crawl, unfinished days, unread pages.
nextobject[]required
Show child parameters
toolstring
argsobject
whystring
nextCursorstring
Pass as cursor for the next page.
dryRunboolean
Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
X-Request-Idstring
The id to quote about this request.
400 The body was not JSON or did not match the tool's input schema.
Example
{
  "error": "string",
  "code": "string",
  "next": "string",
  "requestId": "string"
}
Schema
errorstringrequired
A sentence written for the caller. Internal failures are reduced to 'The request could not be completed.' and never carry detail.
codestring
A stable snake_case reason to branch on; GET /api/v1/errors lists them all.
nextstring
The call or step that fixes it, when there is one.
requestIdstring
Quote it when asking about a failure.
Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
401 No key, or a key that is unknown or revoked.

Same as 400 · POST /api/v1/tools/update_business_profile

Headers
WWW-Authenticatestring
403 The key's role does not permit the tool, or the key may not reach the named client.

Same as 400 · POST /api/v1/tools/update_business_profile

Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
404 No tool by that name.

Same as 400 · POST /api/v1/tools/update_business_profile

Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
409 A request with this Idempotency-Key is still running.

Same as 400 · POST /api/v1/tools/update_business_profile

Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
422 A well-formed request the product declined, with the reason — a duplicate name, a plan limit, nothing configured to run.

Same as 400 · POST /api/v1/tools/update_business_profile

Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
429 This key has used its window.

Same as 400 · POST /api/v1/tools/update_business_profile

Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
Retry-Afterinteger
Seconds to wait before retrying.
500 The request could not be completed.

Same as 400 · POST /api/v1/tools/update_business_profile

Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
Updated