Google Business Profile API Reference
Publish updates, events, and offers to your Google Business Profile locations.
Quick reference
| auth | OAuth 2.0 |
| text Limit | 1500 characters |
| max Media | Exactly 1 image |
| media Rule | One JPG/PNG image (min 400x300 px, max 5 MB); video is not supported |
| max Video Duration | Not supported |
| entity Selection | Business locations (accountId is the locationId) |
| first Comment | Not supported (no comment-creation API) |
Content types
Up to 1500 characters.
Exactly one image. JPEG or PNG. Min 400x300 px, max 5 MB.
Not supported — Google's API does not accept video for posts
Not supported
Not supported — one image per post
Media requirements
Constraints enforced by Google Business Profile's API. Requests that violate these limits will be rejected.
| Constraint | Value |
|---|---|
| Max image size | 5 MB |
| Image formats | JPEG, PNG |
| Min image dimensions | 400x300 px |
| Max media items | 1 |
| GIF support | No |
Platform settings
Pass these fields inside platformSettings.google-business in the request body.
| Name | Type | Required | Description |
|---|---|---|---|
postType | string | Optional | The Google Business post type. STANDARD is a "What's New" update; EVENT adds dates/times; OFFER adds coupon and redemption details.Default: STANDARDSTANDARDEVENTOFFER |
callToAction | string | Optional | 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 | string | Optional | URL the call-to-action button links to. Required when callToAction is set (except CALL). |
eventTitle | string | Optional | Event title (EVENT posts). Max 58 characters. |
eventStartDate | string | Optional | Event start date, YYYY-MM-DD (EVENT posts, required for EVENT). |
eventEndDate | string | Optional | Event end date, YYYY-MM-DD (EVENT posts, required for EVENT). |
eventStartTime | string | Optional | Event start time, HH:MM 24h (EVENT posts, optional). |
eventEndTime | string | Optional | Event end time, HH:MM 24h (EVENT posts, optional). |
offerTitle | string | Optional | Offer title (OFFER posts, required for OFFER). Max 58 characters. OFFER posts also use eventStartDate/eventEndDate for the redemption window. |
couponCode | string | Optional | Coupon code customers show to redeem the offer (OFFER posts). Max 58 characters. |
redeemUrl | string | Optional | URL where the offer can be redeemed online (OFFER posts). |
termsConditions | string | Optional | Offer terms and conditions (OFFER posts). Max 1000 characters. |
postTypestringOptionalThe Google Business post type. STANDARD is a "What's New" update; EVENT adds dates/times; OFFER adds coupon and redemption details.
Default: STANDARD
STANDARDEVENTOFFERcallToActionstringOptionalCall-to-action button shown on the post. All types except CALL require actionUrl (CALL uses the location's phone number).
BOOKORDERSHOPLEARN_MORESIGN_UPCALLactionUrlstringOptionalURL the call-to-action button links to. Required when callToAction is set (except CALL).
eventTitlestringOptionalEvent title (EVENT posts). Max 58 characters.
eventStartDatestringOptionalEvent start date, YYYY-MM-DD (EVENT posts, required for EVENT).
eventEndDatestringOptionalEvent end date, YYYY-MM-DD (EVENT posts, required for EVENT).
eventStartTimestringOptionalEvent start time, HH:MM 24h (EVENT posts, optional).
eventEndTimestringOptionalEvent end time, HH:MM 24h (EVENT posts, optional).
offerTitlestringOptionalOffer title (OFFER posts, required for OFFER). Max 58 characters. OFFER posts also use eventStartDate/eventEndDate for the redemption window.
couponCodestringOptionalCoupon code customers show to redeem the offer (OFFER posts). Max 58 characters.
redeemUrlstringOptionalURL where the offer can be redeemed online (OFFER posts).
termsConditionsstringOptionalOffer 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 codecurl -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.