Access the Google Business Profile APIs with managed OAuth authentication. Manage business accounts and locations, read and reply to reviews, publish local posts and photos, and pull performance metrics.
Reference
Google splits Business Profile across several APIs. Most resources are v1; reviews, media, and local posts are v4, and their v4 paths need both the account and the location.
List Accounts
GET /google-business-profile/v1/accountsThe name field (accounts/{accountId}) is the account reference used by the other endpoints.
List Locations
GET /google-business-profile/v1/accounts/{accountId}/locations?readMask=name,titleGet Location
GET /google-business-profile/v1/locations/{locationId}?readMask=name,title,storefrontAddress,phoneNumbers,websiteUri,categories,regularHours,metadataUpdate Location
PATCH /google-business-profile/v1/locations/{locationId}?updateMask=profile.description
Content-Type: application/json
{
"profile": {
"description": "New business description"
}
}Only the fields named in updateMask are changed. A field named in updateMask but missing from the body is cleared.
Search Google Locations
Searches every location Google knows about, not only the ones the account manages. Use it to check whether a listing already exists before creating one.
POST /google-business-profile/v1/googleLocations:search
Content-Type: application/json
{
"query": "starbucks seattle",
"pageSize": 3
}List Categories
GET /google-business-profile/v1/categories?regionCode=US&languageCode=en&view=BASIC&pageSize=100Daily Metrics
GET /google-business-profile/v1/locations/{locationId}:fetchMultiDailyMetricsTimeSeries?dailyMetrics=WEBSITE_CLICKS&dailyMetrics=CALL_CLICKS&dailyRange.start_date.year=2026&dailyRange.start_date.month=7&dailyRange.start_date.day=1&dailyRange.end_date.year=2026&dailyRange.end_date.month=7&dailyRange.end_date.day=28Search Keywords
GET /google-business-profile/v1/locations/{locationId}/searchkeywords/impressions/monthly?monthlyRange.start_month.year=2026&monthlyRange.start_month.month=6&monthlyRange.end_month.year=2026&monthlyRange.end_month.month=7List Reviews
GET /google-business-profile/v4/accounts/{accountId}/locations/{locationId}/reviews?pageSize=50&orderBy=updateTime%20descReply to Review
PUT /google-business-profile/v4/accounts/{accountId}/locations/{locationId}/reviews/{reviewId}/reply
Content-Type: application/json
{
"comment": "Thank you for the feedback."
}List Local Posts
GET /google-business-profile/v4/accounts/{accountId}/locations/{locationId}/localPostsCreate Local Post
POST /google-business-profile/v4/accounts/{accountId}/locations/{locationId}/localPosts
Content-Type: application/json
{
"languageCode": "en-US",
"summary": "Post text shown on the listing",
"topicType": "STANDARD",
"callToAction": {
"actionType": "LEARN_MORE",
"url": "https://example.com"
}
}List Media
GET /google-business-profile/v4/accounts/{accountId}/locations/{locationId}/mediaList Verifications
GET /google-business-profile/v1/locations/{locationId}/verificationsNotes:
- Start from
GET /v1/accounts, then list the account's locations. Both IDs are needed for everyv4path. readMaskis required on location reads, andupdateMaskon location updates.- A wrong version or HTTP method returns Google's HTML 404 page instead of a JSON error.
googleLocations:searchis aPOST; the performance methods areGET. - Several list endpoints return
{}instead of an empty array when there is nothing to list. - Location edits, review replies, local posts, and photos are public as soon as they are written.
Daily Quota
Maton enforces a daily quota of 5,000 units per account, weighted by request cost:
| Request | Cost |
|---|---|
Create a location (POST /v1/accounts/{accountId}/locations) | 500 |
Search Google locations (POST /v1/googleLocations:search) | 250 |
| Every other request | 1 |
The window is 24 hours and starts with your first request; responses report what is left in the RateLimit header. See Daily quotas for details. To increase this limit, reach out to support@maton.ai.