Google Business Profile support added to Postproxy
Postproxy now publishes local posts to Google Business Profile locations and replies to reviews — three post formats and review management behind the same posts API.
Postproxy now publishes to Google Business Profile locations as a first-class platform. One POST /api/posts call creates a local update, an event, or a promotional offer on a specific location. Reviews on the location are pulled twice daily and replied to through the Profile Comments API.
What changed
Google Business Profile is now a supported platform on Postproxy. Add google_business to the profiles array on POST /api/posts and the post lands on a specific Business Profile location.
Three post formats share the endpoint:
standard— plain local post with optional CTAevent— event card with title and date rangeoffer— promotion with a validity window and optional coupon code
Reviews on every connected location are synced twice a day and exposed through the Profile Comments API for read and reply.
Why Google Business
For businesses with a physical presence — restaurants, clinics, service trades, retail, multi-location chains — Google Business Profile is the surface that actually drives walk-ins. It sits in the Map Pack, in branded search, and in the Knowledge Panel. Posts and offers attached to a location surface alongside those results.
Building it directly meant standing up a separate OAuth flow with Google, dealing with the per-vertical category restrictions, supporting three different post payload shapes, and implementing a review-pull job for every connected account. Postproxy now does all of that under the same profiles: ["google_business"] flag used for the other ten networks.
How does authentication work?
Connection goes through the standard Initialize Connection flow with "platform": "google_business". The redirect resolves a Google OAuth consent for Business Profile scopes; one Postproxy profile may manage multiple Google accounts and any number of locations underneath them.
List the locations a profile can post to with List Placements:
curl "https://api.postproxy.dev/api/profiles/prof_abc123/placements" \ -H "Authorization: Bearer YOUR_API_KEY"Each placement returns a full location resource path — accounts/123456789/locations/987654321 — used as location_id on every post.
How do you publish a standard local post?
location_id is the only required platform parameter. Body is optional; an image is optional too. The CTA button is supported through cta_action_type (LEARN_MORE, BOOK, ORDER, SHOP, SIGN_UP, CALL) and cta_url.
curl -X POST "https://api.postproxy.dev/api/posts" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "post": { "body": "We are now open on Sundays from 10am to 4pm — come visit!" }, "profiles": ["google_business"], "platforms": { "google_business": { "format": "standard", "location_id": "accounts/123456789/locations/987654321", "cta_action_type": "LEARN_MORE", "cta_url": "https://acme.example.com/hours" } } }'How do you publish an event?
The event format adds a title and a date range to the same payload. Times are optional and use 24-hour HH:MM.
{ "post": { "body": "Join us for our 5-year anniversary party — live music, free coffee, prizes." }, "profiles": ["google_business"], "platforms": { "google_business": { "format": "event", "location_id": "accounts/123456789/locations/987654321", "event_title": "Acme Coffee 5-Year Anniversary", "event_start_date": "2026-06-15", "event_start_time": "18:00", "event_end_date": "2026-06-15", "event_end_time": "22:00", "cta_action_type": "LEARN_MORE", "cta_url": "https://acme.example.com/anniversary" } }}How do you publish a promotional offer?
The offer format uses the same date fields as the offer validity window and accepts a coupon code, redemption URL, and terms.
{ "post": { "body": "20% off all whole-bean coffee through the end of the month." }, "profiles": ["google_business"], "platforms": { "google_business": { "format": "offer", "location_id": "accounts/123456789/locations/987654321", "event_start_date": "2026-06-01", "event_end_date": "2026-06-30", "offer_coupon_code": "BEANS20", "offer_redeem_url": "https://acme.example.com/shop", "offer_terms": "One per customer. Cannot be combined with other offers." } }}What are the constraints?
| Constraint | Google Business |
|---|---|
| Character limit | 1,500 |
| Image max size | 5 MB |
| Image formats | jpg, png |
| Max images per post | 1 |
| Image min dimensions | 400×300 px (recommended 1200×900, 4:3) |
| Video | Not supported by local posts |
| Text-only posts | Yes |
| Categories | Some verticals (e.g. lodging) have local posts disabled by Google — Postproxy returns a validation error before publish |
Full reference: Google Business platform parameters.
How do reviews work?
Reviews on a Google Business location are tied to the location, not to a single post — so they do not surface through the post-level Comments API. They live under the Profile Comments API instead.
Postproxy pulls reviews from Google for every active google_business profile twice a day, at 06:00 and 18:00 UTC. The latest sync timestamp is exposed as Profile#comments_synced_at.
List reviews on a location:
curl "https://api.postproxy.dev/api/profiles/prof_abc123/comments?placement_id=accounts/1234/locations/5678" \ -H "Authorization: Bearer YOUR_API_KEY"Each review carries the reviewer’s name, star rating (in platform_data.star_rating), body, and external ID. Reply by POST-ing to the same endpoint with parent_id set to the review’s external ID:
curl -X POST "https://api.postproxy.dev/api/profiles/prof_abc123/comments" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "parent_id": "accounts/1234/locations/5678/reviews/AbFvOq", "body": "Thanks Jane — see you again soon!" }'Replies are processed asynchronously: stored immediately with status: "pending", then transitioned to published once Google accepts them (or failed with an error_message). Top-level comments cannot be authored — Google reviews come from end users.
Deleting a reply removes the reply only; the original review row stays — the Google Business API does not let businesses delete reviews on their own location.
Where this fits in a publishing pipeline
For teams already cross-posting through Postproxy, Google Business slots into the existing pattern:
- Cross-posting. A storefront announcement can fan out to Instagram, Facebook, Google Business, and X in one request, with per-platform body overrides where the tone differs.
- Multi-location. One Postproxy profile may cover dozens of locations. Loop over placements and post the same body to each
location_id— useful for chains and franchise rollouts. - Scheduling. Scheduled posts and posting queues both accept the
google_businessformat. - Drafts and approvals. Same draft and approval flow as the rest of the platforms.
- Status and retries. Same post status lifecycle and retry policy. Category-restricted locations fail validation before publish; transient Google API errors retry automatically.
Getting started
If you already have a Postproxy account:
- In the dashboard, go to Profiles → Connect account and pick Google Business — or call Initialize Connection with
platform: "google_business". - Complete the Google OAuth flow. Postproxy will index every location across every account the OAuth scope grants access to.
- Call List Placements to get the
location_idvalues, then post.
There is no separate signup, no separate billing tier, and no waitlist. Google Business is part of the same flat platform list as Instagram, Facebook, TikTok, YouTube, LinkedIn, X, Threads, Pinterest, Telegram, and Bluesky. The unified posts API now covers eleven networks.
Postproxy
One API for every social platform
Publish to Instagram, X, LinkedIn, TikTok, YouTube and more with a single request. Free plan, no credit card required.