Google Business Profile API Reference

Publish updates, events, and offers to your Google Business Profile locations.

Quick reference

authOAuth 2.0
text Limit1500 characters
max MediaExactly 1 image
media RuleOne JPG/PNG image (min 400x300 px, max 5 MB); video is not supported
max Video DurationNot supported
entity SelectionBusiness locations (accountId is the locationId)
first CommentNot supported (no comment-creation API)

Content types

Text

Up to 1500 characters.

Images

Exactly one image. JPEG or PNG. Min 400x300 px, max 5 MB.

Video

Not supported — Google's API does not accept video for posts

GIF

Not supported

Carousel

Not supported — one image per post

Media requirements

Constraints enforced by Google Business Profile's API. Requests that violate these limits will be rejected.

ConstraintValue
Max image size5 MB
Image formatsJPEG, PNG
Min image dimensions400x300 px
Max media items1
GIF supportNo

Platform settings

Pass these fields inside platformSettings.google-business in the request body.

postType
stringOptional

The Google Business post type. STANDARD is a "What's New" update; EVENT adds dates/times; OFFER adds coupon and redemption details.

Default: STANDARD

STANDARDEVENTOFFER
callToAction
stringOptional

Call-to-action button shown on the post. All types except CALL require actionUrl (CALL uses the location's phone number).

BOOKORDERSHOPLEARN_MORESIGN_UPCALL
actionUrl
stringOptional

URL the call-to-action button links to. Required when callToAction is set (except CALL).

eventTitle
stringOptional

Event title (EVENT posts). Max 58 characters.

eventStartDate
stringOptional

Event start date, YYYY-MM-DD (EVENT posts, required for EVENT).

eventEndDate
stringOptional

Event end date, YYYY-MM-DD (EVENT posts, required for EVENT).

eventStartTime
stringOptional

Event start time, HH:MM 24h (EVENT posts, optional).

eventEndTime
stringOptional

Event end time, HH:MM 24h (EVENT posts, optional).

offerTitle
stringOptional

Offer title (OFFER posts, required for OFFER). Max 58 characters. OFFER posts also use eventStartDate/eventEndDate for the redemption window.

couponCode
stringOptional

Coupon code customers show to redeem the offer (OFFER posts). Max 58 characters.

redeemUrl
stringOptional

URL where the offer can be redeemed online (OFFER posts).

termsConditions
stringOptional

Offer terms and conditions (OFFER posts). Max 1000 characters.

Code examples

Basic post

curl -X POST https://schedulala.com/api/v1/posts \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Fresh sourdough out of the oven every morning at 7am.",
"platforms": [
{ "platform": "google-business" }
],
"mediaItems": [
{ "type": "image", "url": "https://example.com/sourdough.jpg" }
],
"platformSettings": {
"google-business": {
"postType": "STANDARD",
"callToAction": "LEARN_MORE",
"actionUrl": "https://example.com/bakery"
}
},
"publishNow": true
}'

Post with media

# OFFER post with a coupon code
curl -X POST https://schedulala.com/api/v1/posts \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "20% off all coffee beans this week only!",
"platforms": [
{ "platform": "google-business", "accountId": "locations/456" }
],
"mediaItems": [
{ "type": "image", "url": "https://example.com/beans.jpg" }
],
"platformSettings": {
"google-business": {
"postType": "OFFER",
"offerTitle": "20% Off Coffee Beans",
"couponCode": "BEANS20",
"redeemUrl": "https://example.com/shop",
"termsConditions": "One per customer. Ends Sunday.",
"eventStartDate": "2026-07-14",
"eventEndDate": "2026-07-20"
}
},
"publishNow": true
}'

Quirks & gotchas

!

Accounts are business LOCATIONS — accountId is the locationId (e.g. 'locations/456'; the bare trailing id '456' also works). Only locations selected in the dashboard are postable.

!

Exactly one image per post: JPEG or PNG, minimum 400x300 px, maximum 5 MB. Video is not supported by Google's API.

!

STANDARD posts expire after about 7 days on your profile; EVENT and OFFER posts expire after their end date.

!

A REJECTED post state means Google's content policy declined the post (e.g. phone numbers in the text, prohibited content) — edit the content and try again.

!

Google provides no post-level analytics for Business Profile posts, so GBP does not appear in the analytics endpoints.

Related