Google Business Profile
Social PostingPublish updates, events and offers to a Google Business Profile location with the Zernio API, then manage its reviews, listing details and performance metrics.
Authentication details
Connecting accounts guideOAuth 2.0
Connect endpoints
GET /v1/connect/googlebusiness/locationsList Google Business Profile locationsPOST /v1/connect/googlebusiness/select-locationSelect Google Business Profile location
Permissions3 scopes
- Always requested
Pass scopes=posting,analytics to the connect endpoint to ask only for those areas. The first row comes with every connection.
Publish updates, events and offers to Google Business Profile (googlebusiness) with POST /v1/posts and platform: "googlebusiness".
The same account also serves reviews, listing management (hours, photos, services, menus, verification) and location-level performance metrics.
Quick reference
| Property | Value |
|---|---|
| Character limit | 1,500 |
| Images per post | 1 |
| Videos per post | Not supported |
| Image formats | JPEG, PNG only (WebP auto-converted) |
| Image max size | 5 MB |
| Image min dimensions | 400 x 300 px |
| Post types | Text, Text+Image, Text+CTA, Event, Offer |
| Scheduling | Yes |
| Inbox (Reviews) | Yes |
| Inbox (DMs/Comments) | No |
| Analytics | Location-level only (per-post deprecated by Google) |
Before you start
Google Business Profile requires a verified location.
Posts appear in Google Search, Google Maps and the Knowledge Panel rather than in a social feed. They contribute to local search ranking.
A post stays visible for about 7 days before Google archives it, so post at least weekly.
Videos are not supported. A text-only post works but gets less visibility than one with an image or a call-to-action button.
Connect
Call GET /v1/connect/googlebusiness with profileId (Get OAuth connect URL). Send the user's browser to the returned authUrl.
After Google's consent screen the user picks which location to connect. Zernio hosts that screen by default.
To build it yourself, pass headless=true and use List locations and Select location.
The connecting accounts guide covers both modes and scopes. Account health reports what a connected account can do.
import Zernio from '@zernio/node';
const zernio = new Zernio();
const { data: connect } = await zernio.connect.getConnectUrl({
path: { platform: 'googlebusiness' },
query: { profileId: '66a1f0c2a4b9d3e8f1a2b3c4', redirect_url: 'https://myapp.com/callback' }
});
// Send the user's browser to connect.authUrlResponse (200):
{
"authUrl": "https://accounts.google.com/o/oauth2/v2/auth?client_id=...",
"state": "..."
}After the location is selected, the user lands on redirect_url with these params appended:
connected=googlebusiness&profileId=...&accountId=...One account is one location. An account that manages several locations posts to the others with locationId; see Multi-Location Posting.
Publish
A plain post becomes a STANDARD update on the connected location. Call POST /v1/posts with:
content- at most one image in
mediaItems - a
platformsentry withplatform: "googlebusiness" publishNow: true
curl -X POST https://zernio.com/api/v1/posts \
-H "Authorization: Bearer $ZERNIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Open all holiday weekend. Stop by for the seasonal menu.",
"mediaItems": [
{"type": "image", "url": "https://cdn.example.com/holiday-special.jpg"}
],
"platforms": [
{"platform": "googlebusiness", "accountId": "66b2e19d8c3f5a7e9d0b1c2d"}
],
"publishNow": true
}'Response (201):
{
"post": {
"_id": "65f1c0a9e2b5af0012ab34cd",
"status": "published",
"platforms": [
{
"platform": "googlebusiness",
"status": "published",
"platformPostId": "1234567890123456789",
"platformPostUrl": "https://business.google.com/..."
}
]
}
}Replace publishNow with scheduledFor and timezone to schedule it.
Call-to-action buttons, text-only posts and edits are on Posts & Content Types. topicType: "EVENT" and "OFFER" are on Event & Offer Posts.
Common errors
| Error | Cause | Fix |
|---|---|---|
402 with code: "PAYMENT_REQUIRED" on GET /v1/connect/googlebusiness | A billing gate stopped the connection before OAuth started, usually no payment method on file. | Send the user to the dashboard_url in the response, then call connect again. |
500 on GET /v1/connect/googlebusiness/locations | Google refused the listing: the token is invalid, or the user lacks permission on the Google Business account. | Restart the connect flow so the user re-authorizes with business.manage. |
404 on POST /v1/connect/googlebusiness/select-location | locationId is not one of the locations this connection manages. | Pass an id from the List locations response of the same flow. |
The publish-time errors are in Fields, Media & Limits, and Error handling covers the envelope.
In this section
Posts & content types
Create a Google Business Profile post with an image, add a call-to-action button, publish text only and edit a published post.
Media requirements
Image requirements for Google Business Profile posts, and the rules for media URLs.
Event & offer posts
Publish event and offer posts to Google Business Profile with topicType, event and offer in platformSpecificData.
Multi-location posting
List the locations an account manages, post to several in one request, switch the default location, and give a location its own profile.
Analytics
Read daily performance metrics and the search keywords that triggered impressions for a Google Business Profile location.
Inbox
List Google Business Profile reviews, reply to them and read reviews across several locations in one call.
Business Profile management
Read and update a Google Business Profile listing through the API, with verification, hours, photos, attributes and action links.
Services & food menus
Read and replace the service list of a Google Business Profile location, and the food menus of a restaurant or cafe.
Fields, media & limits
Every platformSpecificData field for a Google Business Profile post, the image requirements, what Google's API does not expose, and common errors with their fixes.
Related
- Connecting accounts: the OAuth flow and the location selection step.
- Create post: every field of the request.
- Media uploads: upload images instead of hosting them.
- Reviews: the inbox API for reviews.
- Performance metrics: daily impressions, clicks, calls, directions and bookings.
Google Business Profile
40- GET
- POST
- GET
- DELETE
- GET
- GET
- GET
- GET
- GET
- POST
- GET
- POST
Publishing
24· Unified API, shared with other platforms- POST
- POST
- POST
- POST
- GET
- POST
- GET
- PUT
- DELETE
- POST
- POST
- POST
Analytics
8· Unified API, shared with other platforms- GET
- GET
- GET
- GET
- GET
- GET
- GET
- GET
Reviews
3· Unified API, shared with other platforms- GET
- POST
- DELETE