Automation

Google Business Profile API: access, limits and a first script

What the Google Business Profile API can do, how to get approved, which APIs to enable, and a short Python script that pulls your reviews.

// in this article

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:

Business details Read and update name, hours, categories, phone and website. Business Information API
Reviews List reviews, read ratings and post replies. v4 API
Performance Daily calls, website clicks, directions, impressions. Performance API
Accounts List the accounts and locations you manage. Account Management API
fig 1 · the four parts of the business profile apis most projects use, from google's developer docs

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

  1. Create a Google Cloud project in the Google Cloud Console. Note its project number.
  2. 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.
  3. 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_01 Cloud project Create it, note the project number.
step_02 Access form Application for Basic API Access. use the profile owner's email
step_03 Check quota 0 QPM means waiting.
step_04 300 QPM Approved. Enable the APIs.
fig 2 · getting access to the business profile apis, from google's prerequisites page

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.

reviews.csv
location, date, stars, replied
Smith Plumbing Plano, 2026-10-21, FIVE, yes
Smith Plumbing Frisco, 2026-10-19, TWO, no
Smith Plumbing Plano, 2026-10-12, FOUR, no
Filtered to replied = no
Frisco, 2026-10-19, TWO
Plano, 2026-10-12, FOUR
2 reviews waiting for a reply
fig 3 · what the script's output looks like for a made-up two-location business

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 button
  • WEBSITE_CLICKS: clicks on the website link
  • BUSINESS_DIRECTION_REQUESTS: direction requests
  • BUSINESS_IMPRESSIONS_MOBILE_MAPS, BUSINESS_IMPRESSIONS_MOBILE_SEARCH and 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/v4 API, 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 wants accounts/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.

Portrait of Liam Fraser
// written byLiam FraserSEO specialist with 3 years of experience. Liam writes about what works in local, technical and AI search.About SerpSurfers →