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.

Google Business Profile support added to Postproxy
Quick answer

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 CTA
  • event — event card with title and date range
  • offer — 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:

Terminal window
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.

Terminal window
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?

ConstraintGoogle Business
Character limit1,500
Image max size5 MB
Image formatsjpg, png
Max images per post1
Image min dimensions400×300 px (recommended 1200×900, 4:3)
VideoNot supported by local posts
Text-only postsYes
CategoriesSome 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:

Terminal window
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:

Terminal window
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_business format.
  • 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:

  1. In the dashboard, go to Profiles → Connect account and pick Google Business — or call Initialize Connection with platform: "google_business".
  2. Complete the Google OAuth flow. Postproxy will index every location across every account the OAuth scope grants access to.
  3. Call List Placements to get the location_id values, 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.

Ready to get started?

Start with our free plan and scale as your needs grow. No credit card required.