PostEverywhere Google Business Profile API Guide
PostEverywhere API reference for Google Business Profile: request fields for updates, events and offers, buttons, photos and connecting several locations.
Publish posts to a Google Business Profile through the same POST /v1/posts request you use for every other platform. Posts show on the business's listing on Google Search and Maps. PostEverywhere supports the three post types Google allows through its API: updates, events and offers. For a general overview of all supported platforms, see the Introduction.
Connect a Google Business Profile
Google Business Profile connects with a Google sign-in (OAuth).
- In the dashboard, open Accounts, choose Google Business Profile and sign in with the Google account that owns or manages the business on Google.
- If that account manages several businesses, a chooser lists them and you pick which to add. Each business is one connected account on your plan.
- From the API or an AI agent, call
POST /v1/accounts/connect-linkwith"platform": "google_business"(MCP:create_connect_link) and open the returned URL to finish the Google sign-in.connect-credentialdoes not apply, because there is no credential to paste.
Google only accepts posts from verified Business Profiles. An unverified business can be connected, but posts to it are refused until it is verified on Google. GET /v1/accounts/{id} returns a google_business object with the business title, address, maps_uri, verified and can_post, so you can check before you schedule.
What you can publish to Google Business Profile
| Item | Limit |
|---|---|
| Post types | update (default), event, offer |
| Text | Up to 1,500 characters. Required on updates, optional on events and offers |
| Photo | One per post, JPG or PNG, up to 5 MB, at least 250 x 250 pixels |
| Video | Not supported |
| Button | On updates and events only: book, order, shop, learn_more, sign_up or call |
Product posts are not available through Google's API. Hotels cannot publish offers (Google's policy).
Request fields
Put Google-specific options in platform_content.google_business.settings. Every setting is optional except where noted. camelCase names (postType, buttonUrl, eventTitle, startDate, endDate, couponCode, redeemUrl) are accepted too.
| Setting | Type | Notes |
|---|---|---|
post_type |
string | update, event or offer. Defaults to update |
button |
string | none (default), book, order, shop, learn_more, sign_up or call. Offers have no button |
button_url |
string (URL) | Required for every button except none and call. call uses the phone number on the Business Profile |
event_title |
string | Up to 58 characters. Required for events and offers |
start_date |
string | Required for events and offers. YYYY-MM-DD or YYYY-MM-DDTHH:mm, in the business's own time zone |
end_date |
string | Required for events and offers. Same format, not before start_date |
coupon_code |
string | Offers only. Up to 58 characters |
redeem_url |
string (URL) | Offers only. Where the offer is used online |
terms |
string | Offers only. Terms and conditions, up to 5,000 characters |
platform_content.google_business.content overrides the top-level content for Google only.
Example: an event with a button
curl -X POST https://app.posteverywhere.ai/api/v1/posts \
-H "Authorization: Bearer $POSTEVERYWHERE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Late-night shopping this Friday: every shop on the high street stays open until 10pm.",
"account_ids": [2210],
"media_ids": ["<media_id>"],
"platform_content": {
"google_business": {
"settings": {
"post_type": "event",
"event_title": "Late-night shopping",
"start_date": "2026-12-04T18:00",
"end_date": "2026-12-04T22:00",
"button": "learn_more",
"button_url": "https://example.com/late-night"
}
}
},
"scheduled_for": "2026-12-01T09:00:00Z"
}'
Example: an offer with a coupon code
{
"content": "20% off every pastry all week at the Elm Street shop.",
"account_ids": [2210],
"platform_content": {
"google_business": {
"settings": {
"post_type": "offer",
"event_title": "20% off pastries",
"start_date": "2026-11-09",
"end_date": "2026-11-15",
"coupon_code": "SPRING20",
"terms": "One per customer. In store only."
}
}
}
}
Things Google rejects
- Phone numbers in the text. Google may refuse the post. Use the
callbutton instead. - Posts on unverified businesses. Verify the business on Google first.
- A post that breaks a rule above (a missing event title, an end date before the start date, two photos, a video) returns
400 google_business_post_invalidwith the reason.
Google also reviews some posts after they publish and can reject them later. When that happens PostEverywhere marks the post as failed and shows the reason Google gave, so you know it is no longer live. There are no per-post analytics for Google Business Profile: Google retired per-post insights, so get_post_results returns the publish result only.