The Google Business Profile API lets you read and update Business Profiles from code: business details, reviews and replies, and performance numbers such as calls, website clicks and direction requests. It’s free, but you have to apply for access first. Google only approves people who manage a profile that has been verified and active for 60 days or more and has a website. Once approved, your quota goes from 0 to 300 requests per minute.
It isn’t one API but a set of them, split by job, and the documentation sends you between old and new versions. This guide covers what each part does, how to get access, and a short Python script that pulls every review for your locations, which is the most common first project. Everything here was checked against Google’s developer documentation in October 2026.
What you can do with it
The useful parts for most agencies and multi-location businesses:
Common uses:
- Review monitoring. Pull new reviews for every location into a spreadsheet or Slack each morning.
- Reporting. Pull calls, website clicks and direction requests per location into a monthly report instead of copying them from the dashboard.
- Bulk updates. Change holiday hours for 40 locations in one script rather than 40 sets of clicks.
What it isn’t for: reading other businesses’ profiles. The API only works on profiles your Google Account manages. For competitors, you need search data tools instead.
Step 1: check you’re eligible
Google lists two requirements on its prerequisites page:
- You manage a Business Profile that has been verified and active for 60 days or more.
- The business on that profile has a website.
If you’re an agency, apply from the Google Account that manages client profiles. A brand-new profile won’t qualify until it’s two months old.
Step 2: request access
- Create a Google Cloud project in the Google Cloud Console. Note its project number.
- Fill in the access request. Use the Business Profile API contact form linked from the prerequisites page, and choose Application for Basic API Access from the drop-down. Use an email address that’s an owner or manager on the profile.
- Wait for approval, then check your quota. Google’s test: in the Cloud Console, look at the quota for the Business Profile APIs. “If your quota is 0 QPM, your project has not yet been approved.” If it shows 300 QPM, you’re approved.
Step 2 is where most applications go wrong. If the email on the form doesn’t manage a verified profile that’s 60 days old, the request gets rejected, so check the account before you send it.
Step 3: enable the APIs and set up OAuth
Once approved, enable these in your Cloud project under APIs and Services, as listed in Google’s basic setup guide:
- Google My Business API (the older v4 API, still used for reviews)
- My Business Account Management API
- My Business Business Information API
- My Business Verifications API
- My Business Notifications API
- My Business Place Actions API
- My Business Lodging API (hotels only)
For performance data, also enable the Business Profile Performance API.
Then create an OAuth client ID of type Desktop app under APIs and Services, then Credentials, and download it as client_secret.json. The scope every Business Profile call uses is:
https://www.googleapis.com/auth/business.manage
A first script: pull every review
This script signs in as you, lists your accounts and locations, and writes every review to a CSV file. It uses three endpoints, all from Google’s reference docs:
| Step | Endpoint | Limit per page |
|---|---|---|
| List accounts | GET mybusinessaccountmanagement.googleapis.com/v1/accounts |
Not stated |
| List locations | GET mybusinessbusinessinformation.googleapis.com/v1/accounts/{id}/locations |
100 |
| List reviews | GET mybusiness.googleapis.com/v4/accounts/{id}/locations/{id}/reviews |
50 |
The locations call needs a readMask listing the fields you want, or it fails. The reviews call also returns averageRating and totalReviewCount for each location.
Install the two libraries first:
pip install google-auth-oauthlib requests
Then save this as reviews.py, next to your client_secret.json:
import csv
import requests
from google_auth_oauthlib.flow import InstalledAppFlow
SCOPES = ["https://www.googleapis.com/auth/business.manage"]
creds = InstalledAppFlow.from_client_secrets_file("client_secret.json", SCOPES).run_local_server(port=0)
headers = {"Authorization": f"Bearer {creds.token}"}
def get_all(url, key, params=None):
"""Follow nextPageToken until every page is fetched."""
params, items = dict(params or {}), []
while True:
data = requests.get(url, headers=headers, params=params).json()
items += data.get(key, [])
if "nextPageToken" not in data:
return items
params["pageToken"] = data["nextPageToken"]
accounts = get_all("https://mybusinessaccountmanagement.googleapis.com/v1/accounts", "accounts")
with open("reviews.csv", "w", newline="") as f:
out = csv.writer(f)
out.writerow(["location", "date", "stars", "reviewer", "comment", "replied"])
for account in accounts:
locations = get_all(
f"https://mybusinessbusinessinformation.googleapis.com/v1/{account['name']}/locations",
"locations", {"readMask": "name,title", "pageSize": 100})
for loc in locations:
loc_id = loc["name"].split("/")[1]
reviews = get_all(
f"https://mybusiness.googleapis.com/v4/{account['name']}/locations/{loc_id}/reviews",
"reviews", {"pageSize": 50})
for r in reviews:
out.writerow([loc["title"], r.get("createTime", "")[:10], r.get("starRating"),
r.get("reviewer", {}).get("displayName"), r.get("comment", ""),
"yes" if r.get("reviewReply") else "no"])
print(f"{loc['title']}: {len(reviews)} reviews")
Run it with python reviews.py. A browser window asks you to sign in and allow access, then the script prints a count for each location and writes reviews.csv.
The replied column is the useful one. Filter it to “no” and you have every review still waiting for an answer, across every location, in one list.
Replying and pulling performance data
Two more calls cover most of what people build next.
Reply to a review. Send a PUT to the review’s /reply path with the text in a comment field, as shown in Google’s review data guide:
PUT https://mybusiness.googleapis.com/v4/accounts/{id}/locations/{id}/reviews/{reviewId}/reply
{"comment": "Thanks for the kind words, glad the repair went well."}
Write replies yourself, or at least read every one before it posts. A canned reply to a two-star review does more damage than no reply.
Pull performance numbers. The Performance API’s fetchMultiDailyMetricsTimeSeries returns daily counts per location for a date range. The daily metrics on offer include:
CALL_CLICKS: taps on the call buttonWEBSITE_CLICKS: clicks on the website linkBUSINESS_DIRECTION_REQUESTS: direction requestsBUSINESS_IMPRESSIONS_MOBILE_MAPS,BUSINESS_IMPRESSIONS_MOBILE_SEARCHand their desktop versions: how often the profile was seen
Those three action metrics are what a local business owner actually cares about, and they slot straight into the leads section of a monthly SEO report.
Things that trip people up
- Two API versions. Reviews still live on the older
mybusiness.googleapis.com/v4API, while accounts, locations and performance use the newer per-job APIs. Mixing them up is the most common 404 when you start. - Location IDs. The newer APIs return
locations/123. The v4 reviews path wantsaccounts/456/locations/123, so you have to join them yourself, as the script does. - Workspace accounts. Google notes that to reply to reviews from a Google Workspace account, the admin must have Google Search, Google Maps and Business Profile enabled as services.
- Quota. 300 requests a minute is plenty for a few hundred locations. Add a short pause between calls if you manage thousands.
If you’d rather not run code, the same numbers are in the dashboard for each profile. The API earns its keep once you manage more than a handful of locations, which is where our posts on building your own local SEO toolkit and editing a Business Profile pick up.
FAQ
Is the Google Business Profile API free?
Yes. There’s no charge for the API, but you must apply for access, and Google only approves people who manage a verified profile that has been active for 60 days or more and has a website.
How long does Google Business Profile API approval take?
Google doesn’t publish a time. Check your project’s quota in the Cloud Console: 0 requests per minute means you’re still waiting, 300 means you’re approved.
Can I get reviews for any business with the API?
No. The API only returns data for profiles your Google Account owns or manages. It can’t read competitors’ profiles.
Is the Google My Business API the same as the Business Profile API?
Yes. Google renamed Google My Business to Google Business Profile. The older v4 “Google My Business API” is still part of the set and still handles reviews.
Start small
Get access, run the review script, and set it to run every morning. Once that works, add the performance call for calls and website clicks, and you’ve automated the two things most local clients ask about every month.
