Skip to main content
Available Google Business Profile publishing is live. You can create, update, and delete local posts (updates, offers, and events) on a connected Business Profile location. See Google Business Profile for the connector overview.

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

Use POST /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 inside platform_data.google. topicType details:
  • STANDARD: A general informational post. No extra fields required.
  • EVENT: Requires an event object with title, schedule.startDate, and schedule.endDate. Pass via platform_data.google.
  • OFFER: Requires an offer object with couponCode, redeemOnlineUrl, or termsConditions. Pass via platform_data.google.
  • ALERT: Reserved for urgent or time-sensitive announcements. Requires an alertType field passed via platform_data.google. Treated similarly to STANDARD but may render differently in the knowledge panel.

Event post example

Image post example

SocialAPI forwards any additional keys in 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 the summary and other fields of an existing local post. Use PATCH /v1/posts/:pid with a text field to update the post body.

updateMask

The updateMask 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.
Limitation: 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

Or, to delete only the Google target of a cross-platform post:
SocialAPI calls 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

Use GET /v1/posts to list posts stored in SocialAPI. Filter by platform or account:
Each post includes a targets array with per-platform status. Engagement metrics are not available for Google Business Profile posts:
Metrics notes: The Google My Business API does not expose per-post engagement metrics (likes, comments, shares, or saves) via the local posts endpoint. All metric fields are always 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 set scheduled_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

Omitting topicType 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

The platform_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 format accounts/{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 return 429 Too Many Requests. Retry after a short delay.

Error shapes

When a publish fails, the post target’s error 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 message field. Common causes include a missing topicType for event or offer posts, an invalid event date format, or attempting to update a field not included in updateMask.
  • 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 post
Response:
Step 2: Check status
Response once published:
Step 3: Update the post summary

9. 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.