Skip to main content

Post to Google Business Profile via API

Create and schedule posts on a business's Google Business Profile. Posts show on the business's listing in Google Search and Google Maps. PostEverywhere handles the Google sign-in, token refresh, the photo upload and retries, so you can publish to Google alongside your other platforms in one API call. For an overview of all supported platforms, see the Introduction.

The platform key is google_business.

Connecting a Business Profile​

Google Business Profile connects with Google sign-in (OAuth). Connect it from the dashboard, or from code: mint a connect link with "platform": "google_business" and hand it to the business owner. See Connecting Accounts. It is not a credential platform, so connect_credential_account does not apply.

  • The person must sign in with the Google account that owns or manages the business on Google.
  • If that Google account manages several businesses, they choose which ones to add on a short "choose your businesses" page.
  • Each business counts as one connected account on your plan.
  • Google only allows posts on verified Business Profiles. An unverified business can be connected, but posts to it are refused until the business is verified on Google.

GET /v1/accounts/{id} returns a google_business object for these accounts:

{
"google_business": {
"title": "Corner Cafe",
"address": "1 High Street, Bath, BA1 1AA",
"maps_uri": "https://maps.google.com/?cid=123456789",
"verified": true,
"can_post": true
}
}

can_post: false means Google does not allow posts on this business yet, usually because it is not verified.

Supported Content Types​

Post typepost_typeWhat it shows
Updateupdate (default)Text, an optional photo and an optional button.
EventeventAn event title with start and end date and time, optional text, photo and button.
OfferofferAn offer title with start and end dates, optional coupon code, redeem link and terms. Offers have no button: Google shows the offer itself.

Limits​

RuleValue
TextUp to 1,500 characters. Required on updates, optional on events and offers.
PhotosAt most 1 per post. JPG or PNG, up to 5 MB, at least 250 x 250 pixels. Other image formats in your media library are converted to JPG for you.
VideoNot supported.
Phone numbers in the textGoogle may reject the post. Use the call button instead.
Product postsNot available through Google's API.

Platform-Specific Settings​

Use platform_content.google_business.settings:

{
"platform_content": {
"google_business": {
"content": "Live jazz every Friday from 7pm. Book a table now.",
"settings": {
"post_type": "event",
"event_title": "Friday Jazz Night",
"start_date": "2026-11-06T19:00",
"end_date": "2026-11-06T23:00",
"button": "book",
"button_url": "https://example.com/book"
}
}
}
}

Settings Reference​

SettingTypeDefaultDescription
post_typestringupdateupdate, event or offer.
buttonstringnonenone, book, order, shop, learn_more, sign_up or call. Ignored on offers.
button_urlstring-Full web address for the button. Required for every button except call, which uses the business phone number.
event_titlestring-Title of the event or offer. Required for events and offers.
start_datestring-YYYY-MM-DD or YYYY-MM-DDTHH:mm, in the business's own local time. Required for events and offers.
end_datestring-Same format. Must be after start_date. Required for events and offers.
coupon_codestring-Offers only.
redeem_urlstring-Offers only. Full web address where the offer is redeemed.
termsstring-Offers only. Terms and conditions.

Example: Create a Post​

Publish an offer​

curl -X POST https://app.posteverywhere.ai/api/v1/posts \
-H "Authorization: Bearer $POSTEVERYWHERE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "20% off all coffee beans this month.",
"account_ids": [123],
"scheduled_for": "2026-11-01T09:00:00Z",
"platform_content": {
"google_business": {
"settings": {
"post_type": "offer",
"event_title": "Autumn sale",
"start_date": "2026-11-01",
"end_date": "2026-11-30",
"coupon_code": "AUTUMN20",
"redeem_url": "https://example.com/shop"
}
}
}
}'

With the CLI​

posteverywhere post -c "Live jazz every Friday from 7pm." -a 123 \
--gbp-type event --event-title "Friday Jazz Night" \
--start 2026-11-06T19:00 --end 2026-11-06T23:00 \
--gbp-button book --gbp-button-url https://example.com/book

CLI flags: --gbp-type, --gbp-button, --gbp-button-url, --event-title, --start, --end, --coupon, --redeem-url, --terms.

Errors​

A post that breaks these rules is refused before anything is sent to Google, with 400 and the code google_business_post_invalid. The errors list says what to fix, in plain words (for example "Add a title for your event." or "Google Business Profile posts can have one photo. Videos are not supported.").

Publish-time failures you may see in GET /v1/posts/{id}/results:

Message starts withWhat to do
"Your Google Business Profile connection has expired."Reconnect the account.
"Your Google account no longer manages this Business Profile."Ask the owner to add you as a manager, then reconnect.
"Google does not allow posts on this Business Profile yet."Verify the business on Google, then retry.
"Google rejected this post."Edit the text (often a phone number in it), then retry.
"Google could not use this photo."Use a JPG or PNG between 10 KB and 5 MB, at least 250 x 250.
"Google Business Profile is busy right now."Nothing. We retry automatically.

Analytics​

Google does not provide per-post statistics for Business Profile posts, so posts to google_business have no views, clicks or likes in the analytics endpoints.

Not supported​

Review replies, Q&A, messages, editing business information (hours, address, photo gallery), product posts and video are not part of this integration.