1. Overview
Google Business Profile (GBP) publishing uses the Google My Business API (v4) against your connected GBP location. SocialAPI creates local posts via the/{location}/localPosts endpoint. Each post publishes immediately and appears in your business knowledge panel on Google Search and Google Maps.
2. Supported media
Video: Not supported. The Google My Business API does not accept video uploads for local posts.
Caption limit: GBP does not publish a documented character limit, but posts display best under 1,500 characters. Very long posts may be truncated in the knowledge panel display.
Carousels and multi-image posts: Not supported. Only the first entry in
media_ids is used.
3. Create post
UsePOST /v1/posts with targets targeting a connected GBP location. The text field maps to the summary field in the GBP API.
Platform data fields
Pass these insideplatform_data.google.
topicType details:
STANDARD: A general informational post. No extra fields required.EVENT: Requires aneventobject withtitle,schedule.startDate, andschedule.endDate. Pass viaplatform_data.google.OFFER: Requires anofferobject withcouponCode,redeemOnlineUrl, ortermsConditions. Pass viaplatform_data.google.ALERT: Reserved for urgent or time-sensitive announcements. Requires analertTypefield passed viaplatform_data.google. Treated similarly toSTANDARDbut may render differently in the knowledge panel.
Event post example
Image post example
platform_data.google directly to the underlying platform API. These fields are not validated by SocialAPI and may break if the platform changes its API. See Google Business Profile API reference for the full list of supported parameters.
4. Update post
GBP supports patching thesummary and other fields of an existing local post. Use PATCH /v1/posts/:pid with a text field to update the post body.
updateMask
TheupdateMask field controls which fields are sent to the GBP PATCH endpoint. It defaults to "summary" when omitted. To update additional fields (for example, an event schedule), pass them in platform_data.google alongside an explicit updateMask listing all changed paths as a comma-separated string.
topicType cannot be changed after a post is created. Attempting to include it in an update will result in a GBP API error.
5. Delete post
DELETE on the full post resource name (for example, accounts/123/locations/456/localPosts/789). If the post no longer exists on GBP, the call returns 404 with code resource.not_found.
Retry not supported: The GBP connector does not support POST /v1/posts/:pid/retry. If a post fails, delete it and create a new one.
6. Retrieve posts
UseGET /v1/posts to list posts stored in SocialAPI. Filter by platform or account:
targets array with per-platform status. Engagement metrics are not available for Google Business Profile posts:
0 and metrics_synced_at is null. Use the Google Business Profile dashboard or Insights API for performance data.
Permalink note: The permalink value comes from the GBP searchUrl field returned by the API. It is a Google Search URL linking directly to the business location.
7. Quirks, errors, and recovery
No scheduling
The GBP local posts API publishes immediately on create. There is no scheduled or draft publish capability. If you setscheduled_at on a post targeting a Google account, SocialAPI will create the post at the scheduled time but Google will publish it immediately at that point, not at a future time of your choosing within GBP’s own UI.
topicType must be set for non-standard posts
OmittingtopicType defaults to STANDARD, which is correct for general updates. For event, offer, or alert posts, you must explicitly set topicType and provide the required nested fields. Sending an event or offer object without the matching topicType results in a GBP API validation error.
Post IDs are full resource names
Theplatform_post_id returned for a Google post is the full GBP resource name, for example accounts/123456789/locations/987654321/localPosts/abcdef. This is the ID required by the update and delete endpoints. SocialAPI stores and forwards this value automatically.
Location ID format
Each connected GBP location has an account ID in the formataccounts/{accountId}/locations/{locationId}. When a user connects their Google account, SocialAPI discovers all locations they manage and creates one connected account entry per location. Users do not need to reconnect for additional locations owned by the same Google account as long as they were present at the time of the initial OAuth exchange.
Token auto-refresh
Google OAuth 2.0 access tokens expire after one hour. SocialAPI automatically refreshes the token using the stored refresh token before each API call when the token is within five minutes of expiry. The refreshed token is written back to the database. No action is required from your application.Rate limits
The GBP API enforces a 300 QPM (queries per minute) quota on SocialAPI’s managed Google Cloud project, shared across all locations. SocialAPI applies an internal throttle at 240 QPM (80% of the limit) to leave headroom for bursts. When the throttle is active, requests return429 Too Many Requests. Retry after a short delay.
Error shapes
When a publish fails, the post target’serror field contains a structured error:
Recovery
- Auth error: If auto-refresh fails, disconnect and reconnect the Google account through the OAuth flow to obtain a new refresh token.
- API error: Check the
messagefield. Common causes include a missingtopicTypefor event or offer posts, an invalid event date format, or attempting to update a field not included inupdateMask. - Rate limit: Wait before retrying. The Google connector does not support
POST /v1/posts/:pid/retry; delete and recreate the post instead.
8. Full worked example
The following example creates an offer post, checks its status, then updates the summary text. Step 1: Create the offer post9. Required OAuth scopes
SocialAPI’s managed Google Cloud OAuth app requests the following scope on your behalf during the authorization flow. This is informational — you do not need to configure anything.
This single scope covers the GBP API operations we use: listing locations, creating and managing local posts, and reading and replying to reviews.