top of page

Digital Marketing Made Easy

WILCO Web Services

Google Business Profile API: Access, Setup, And Use Cases

  • Anthony Pataray
  • 12 hours ago
  • 16 min read

Managing one Google Business Profile manually is straightforward. Managing ten, twenty, or fifty of them for different locations or clients? That's where things break down fast. The Google Business Profile API gives businesses and agencies a way to automate listing management at scale, creating, updating, and verifying profiles without clicking through the same dashboard screens hundreds of times.


At Wilco Web Services, we work with local businesses on Local SEO every day, and accurate, optimized Google Business Profiles sit at the center of that work. We've seen firsthand how API access changes the game for multi-location businesses and marketing teams that need to keep listing data consistent and up to date across dozens of profiles.


This guide walks you through everything you need to know to get started: how to request API access, what Google's approval process actually looks like, setup steps, and the real-world use cases that make the API worth the effort. Whether you're a developer building integrations, an agency managing client listings, or a business owner with multiple locations, you'll leave with a clear understanding of what the API can and can't do, and how to put it to work.


What the Google Business Profile API does


The Google Business Profile API is a REST-based interface that lets you read and write business listing data programmatically. Instead of logging into Google's dashboard and making changes manually, you send HTTP requests to Google's servers, and those servers update your listings in real time. That means you can build workflows, scripts, and integrations that handle listing management without a human clicking through each profile one by one.


Core capabilities


Access to the full lifecycle of a business listing is what the API gives you. You can create new locations, update existing ones, manage business hours, add photos, publish posts, and respond to reviews, all through code. These operations map directly to what you'd do in the Google Business Profile dashboard, but at a scale and speed that manual work simply can't match.


For agencies managing dozens of client profiles, this matters a lot. A single API call can update the holiday hours for every location in your portfolio simultaneously. Without the API, that same task means logging into each profile separately, navigating to hours, editing, and saving, repeated for every single location.


If you're managing more than five locations, doing this work manually creates real risk: outdated information, inconsistent data, and hours of repetitive work that could be automated.

How requests and data flow


The API works through Google's REST architecture, which means you structure your requests as standard HTTP calls using methods like GET, POST, PATCH, and DELETE. Each request targets a specific resource, such as a location, a post, or a photo, using a URL that includes your account and location identifiers.


Here's a simplified example of what a GET request to retrieve a location's details looks like:


GET https://mybusinessbusinessinformation.googleapis.com/v1/locations/{locationId} Authorization: Bearer {your_oauth_token}


Google returns JSON-formatted data in the response, which your application can then parse, store, or use to trigger further actions. This standard structure makes the API straightforward to integrate with virtually any programming language or platform, whether you're working in Python, JavaScript, or another language entirely.


What the API does not cover


Knowing the boundaries of the API saves you from building toward a dead end. Verification of new listings is not available through the API for most use cases, though certain approved enterprise partners can access verification endpoints. That means if you create a new location via the API, you still need to complete the verification step through Google's standard process.


The API also does not give you direct control over Google's ranking algorithms or the appearance of your listing in search results beyond the data you submit. What shows up in search, and how prominently, depends on Google's systems processing that data. Keeping your listing data accurate and complete through the API is the lever you control; Google's ranking logic handles the rest.


Who can access it and what it costs


The Google Business Profile API is not available to everyone by default. Google restricts access to protect listing quality and prevent abuse, which means you need to apply and receive approval before you can make your first API call. Understanding who qualifies and what you'll pay upfront saves you from spending time on an application that won't get approved.


Who qualifies


Google targets API access at three main groups: agencies managing multiple client locations, software developers building tools that integrate with business listings, and enterprises operating ten or more locations under a single organization. If you're a single-location business owner who just wants to update your own profile, the standard Google Business Profile dashboard is the right tool. The API is built for scale, and Google's approval process reflects that.


Here's a breakdown of who typically qualifies:


User Type

Typical Use Case

Likely to Be Approved?

Digital marketing agency

Managing listings for multiple clients

Yes

Enterprise (10+ locations)

Keeping location data consistent at scale

Yes

SaaS developer

Building a listing management product

Yes

Single-location business owner

Updating their own one profile

No


If you manage fewer than ten locations and have no development background, the standard dashboard will handle everything you need without the complexity of API access.

What it costs


The Google Business Profile API itself is free to use. Google does not charge per request or per location for standard listing management operations. However, you do need a Google Cloud project to authenticate your requests, and depending on how you use other Google Cloud services alongside the API, you may see costs there.


For the vast majority of agencies and businesses using the API purely for listing management tasks, such as updating hours, publishing posts, or pulling review data, your Google Cloud bill will stay at zero or close to it. The free tier for Google Cloud covers the authentication and basic infrastructure you need. You can review Google Cloud's current pricing directly at Google Cloud Pricing to confirm what applies to your specific setup before you start building.


Prerequisites before you request access


Before you submit your application for the Google Business Profile API, Google expects you to have several things already in place. Skipping these steps and applying anyway typically results in a rejection or a long back-and-forth that delays your access. Getting these prerequisites sorted out first puts your application in the strongest possible position from the start.


A verified Google Business Profile account


You need at least one active, verified Google Business Profile tied to the Google account you'll use during the application process. Google uses this to confirm you have real experience managing listings. If you're an agency, use an account that already has owner or manager access to your client profiles. Unverified or newly created profiles raise red flags in the review process, so make sure verification is complete before you apply.


A Google Cloud account and project


You need a Google Cloud account set up and ready before you request access. You don't need a fully configured project at this stage, but having an account linked to a billing-enabled Google Cloud project shows Google you're prepared to move forward technically. You can create a free account at Google Cloud. Google will ask for your project details during the application, so having this ready prevents delays.


A documented use case with scale


Google's review team looks closely at why you need API access and how many locations you plan to manage. You need to articulate a clear, specific use case before you apply. Vague answers like "I want to update listings" won't cut it.


Prepare a written summary of your use case that includes the number of locations you manage, the type of operations you'll automate, and the business problem the API solves for you.

Strong use cases include specific details like:


  • The number of locations you currently manage (aim to demonstrate ten or more)

  • The specific operations you need to automate, such as bulk hours updates, review response workflows, or post scheduling

  • Whether you're building a client-facing tool or managing your own portfolio of locations


A developer or technical contact


Google expects someone on your team to handle API integration and authentication. If that's not you personally, identify your technical contact before applying. Your application will ask for a primary contact who can handle OAuth configuration and troubleshoot API requests. Having this person identified and ready to act speeds up the setup phase once approval comes through.


Step 1. Request access and approval


Once your prerequisites are in place, you submit your application through the Google Business Profile API access request form. Google hosts this form within their developer documentation, and you reach it by navigating to the Google Business Profile API documentation. The form takes about 15 to 20 minutes to complete if you have your use case details prepared and your Cloud project information ready before you start.


What to include in your application


The form asks for several pieces of information that Google uses to evaluate whether your use case qualifies for API access. Answering each field clearly and specifically improves your chances of approval on the first submission, rather than triggering a back-and-forth that stretches the process out over weeks.


Here is what the form typically asks for:


  • Your Google Cloud project ID (have this created and ready before you open the form)

  • The number of locations you currently manage or plan to manage through the API

  • A description of your use case, including which operations you need to automate and why the standard dashboard is insufficient for your needs

  • Your technical contact's name and email address, the person responsible for handling the integration

  • Your company name and website URL, so Google can confirm you're a legitimate business or agency


Be specific about your location count and intended operations. Applications that describe the use case vaguely get flagged for follow-up, which adds days or weeks to the approval timeline.

What Google reviews


After you submit, Google's team manually reviews your application. They check whether your described use case aligns with the API's intended purposes: scale, automation, and integration with external tools. They also confirm that your Google Cloud project actually exists and that the contact information you provided corresponds to a real person at a real organization. This is not an automated gate, so the quality and specificity of your written answers directly shape the outcome.


What to expect after submission


Review timelines vary, but most applicants hear back within five to seven business days. If Google needs clarification, they email your listed technical contact with specific questions. Respond quickly, because leaving a clarification request unanswered for more than a few days can stall your application entirely.


Once approved, Google sends an email confirmation that includes instructions on which APIs to enable in your Cloud project. Save that email, because it contains the exact API service names you need in Step 2.


Step 2. Create a Google Cloud project


A Google Cloud project is the container that holds your API credentials, authentication settings, and usage data. Every request you make to the Google Business Profile API flows through this project, so setting it up correctly from the start keeps your integration clean and your credentials organized.


Set up your project in Google Cloud Console


Go to Google Cloud Console and sign in with the same Google account you used in your API access application. Google ties your approval to that account, so using a different one here creates a mismatch that will block you later.


Follow these steps to create your project:


  1. Click the project selector dropdown at the top of the page, next to the Google Cloud logo.

  2. Click New Project in the dialog that appears.

  3. Enter a project name that clearly identifies its purpose, such as "GBP API Integration" or your agency name followed by "Listings."

  4. Leave the organization field set to your organization if one appears, or leave it blank for personal accounts.

  5. Click Create and wait roughly 30 seconds for Google to provision the project.

  6. Once created, select the new project from the project selector to make it your active project.


Write down your Project ID as soon as the project is created. It appears directly under the project name and looks like a lowercase string with hyphens, such as "gbp-api-integration-123456." You will need this ID repeatedly throughout the setup process.

Configure billing on your project


Even though the Google Business Profile API itself does not charge per request, Google requires a billing account linked to your project before you can enable most APIs. Without it, the API enablement step in Step 3 will fail.


Navigate to Billing in the left sidebar of the Google Cloud Console, then click Link a billing account. If you do not have an existing billing account, follow Google's prompts to create one. You will need a valid credit card, but you will not be charged for standard listing management operations that fall within Google Cloud's free tier. Once billing is linked, your project status updates automatically and you are ready to move on to enabling the API and configuring OAuth credentials.


Step 3. Enable the API and configure OAuth


With your Google Cloud project created and billing linked, you now need to enable the specific APIs Google authorized you to use and set up OAuth 2.0 so your application can authenticate requests. These two tasks go hand in hand: enabling the API tells Google your project is allowed to use it, and OAuth configuration gives your application the credentials to prove it with every request.


Enable the correct APIs in Cloud Console


Open Google Cloud Console and confirm your newly created project is selected in the project selector at the top. Navigate to APIs and Services in the left sidebar, then click Library. You need to enable several APIs for full access to the Google Business Profile API feature set.


Search for and enable each of the following:


  • My Business Business Information API (handles location data, hours, and attributes)

  • My Business Account Management API (manages access and account-level operations)

  • My Business Notifications API (optional but useful for real-time update alerts)

  • My Business Q&A API (if you plan to manage questions and answers programmatically)

  • My Business Reviews API (required if you need to read or respond to reviews)


Click Enable on each one individually. Google activates them within a few seconds, and they appear in your project's Enabled APIs list once done.


Check your approval email from Step 1 to confirm exactly which APIs Google authorized for your account, then enable only those to avoid any scope mismatch during the review process.

Set up OAuth 2.0 credentials


After enabling the APIs, navigate to APIs and Services > Credentials in the left sidebar. Click Create Credentials and select OAuth client ID. If you have not yet configured your OAuth consent screen, Google will prompt you to do that first. Fill in your application name, support email, and authorized domain, then save.


Back in the credentials flow, select Web application as the application type if you are building a server-side integration, or Desktop app for local scripts. Add your redirect URI, which is the URL Google sends the user back to after they authorize access. For local testing, http://localhost works. Once you create the credential, Google gives you a client ID and client secret. Download the JSON file immediately and store it securely outside your code repository.


{ "installed": { "client_id": "YOUR_CLIENT_ID.apps.googleusercontent.com", "client_secret": "YOUR_CLIENT_SECRET", "redirect_uris": ["http://localhost"], "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token" } }


Use this file in your application to initiate the OAuth flow and exchange the authorization code for an access token that authenticates your API requests.


Step 4. Make your first API request


With your OAuth credentials configured, you are ready to send your first live request to the Google Business Profile API. The goal here is simple: authenticate successfully and retrieve data from a real location. This confirms your credentials work and gives you a foundation to build every subsequent integration on.


Authenticate and get your access token


Before any API call goes through, you need a valid OAuth 2.0 access token. You exchange your client credentials for this token through Google's token endpoint. If you are working in Python, the google-auth library handles this flow cleanly. Install it with pip install google-auth google-auth-oauthlib requests, then use the following script to authenticate and print your token:


from google_auth_oauthlib.flow import InstalledAppFlow SCOPES = ["https://www.googleapis.com/auth/business.manage"] flow = InstalledAppFlow.from_client_secrets_file( "client_secret.json", scopes=SCOPES ) creds = flow.run_local_server(port=0) print("Access token:", creds.token)


Running this opens a browser window where you authorize the application. After you confirm access, the script prints your access token to the terminal. Copy it, because you will attach it to every subsequent request as a Bearer token in the Authorization header.


Store your credentials object rather than the raw token string, since access tokens expire after one hour and the credentials object handles automatic refresh for you.

Send a GET request to retrieve your location


With a valid access token, you can now retrieve your account's location list. This request confirms end-to-end connectivity between your code and Google's servers. Use the following Python snippet, replacing {accountId} with your actual Google Business Profile account ID, which you find in the URL when viewing your profile in the dashboard:


import requests account_id = "YOUR_ACCOUNT_ID" token = creds.token url = f"https://mybusinessbusinessinformation.googleapis.com/v1/accounts/{account_id}/locations" headers = {"Authorization": f"Bearer {token}"} response = requests.get(url, headers=headers) print(response.status_code) print(response.json())


A 200 status code in the response means your request succeeded. The JSON body will contain your location data, including names, addresses, and location IDs. If you see a 403 error, double-check that you enabled the correct APIs in Step 3 and that your OAuth scope matches https://www.googleapis.com/auth/business.manage.


Step 5. Manage locations and business info


Once your first request returns clean data, you can move on to making actual changes to your locations. The Google Business Profile API exposes endpoints for updating nearly every piece of business information: hours, addresses, phone numbers, categories, and attributes. Each update follows the same pattern: send a PATCH request targeting the specific location ID with a JSON body that contains only the fields you want to change.


Update business hours


Regular hours and special hours live in separate fields within the location resource. To update standard weekly hours, you send a PATCH request to the location endpoint with an regularHours object in the body. Here is a Python example that sets Monday through Friday hours for a single location:


import requests location_id = "YOUR_LOCATION_ID" token = creds.token url = f"https://mybusinessbusinessinformation.googleapis.com/v1/locations/{location_id}" headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"} payload = { "regularHours": { "periods": [ {"openDay": "MONDAY", "openTime": "09:00", "closeDay": "MONDAY", "closeTime": "17:00"}, {"openDay": "TUESDAY", "openTime": "09:00", "closeDay": "TUESDAY", "closeTime": "17:00"}, {"openDay": "WEDNESDAY", "openTime": "09:00", "closeDay": "WEDNESDAY", "closeTime": "17:00"}, {"openDay": "THURSDAY", "openTime": "09:00", "closeDay": "THURSDAY", "closeTime": "17:00"}, {"openDay": "FRIDAY", "openTime": "09:00", "closeDay": "FRIDAY", "closeTime": "17:00"} ] } } params = {"updateMask": "regularHours"} response = requests.patch(url, headers=headers, json=payload, params=params) print(response.status_code)


Always include the updateMask query parameter specifying exactly which fields you are updating. Without it, Google treats the request as a full replacement and overwrites fields you did not intend to change.

Edit core business information


Name, address, and phone number fields follow the same PATCH pattern, but they use different field names in the JSON body. Use title for the business name, phoneNumbers.primaryPhone for the main number, and storefrontAddress for the physical address. If you manage multiple locations, loop through your location IDs and apply the same payload structure to each one, changing only the values that differ per location.


Keep your updateMask values precise. Passing storefrontAddress as the mask only touches address fields, leaving hours, categories, and other attributes untouched. This granular control prevents accidental overwrites when you run bulk updates across a large location portfolio.


Step 6. Automate posts, photos, and reviews


Beyond managing static business information, the Google Business Profile API lets you automate three high-value activities that most businesses handle manually: publishing posts, uploading photos, and responding to reviews. Each of these operations uses its own endpoint and data structure, but the authentication pattern stays identical to what you built in the previous steps.


Publish posts programmatically


Local posts drive visibility for promotions, events, and updates directly in search results. You create a post by sending a POST request to the localPosts endpoint with a JSON body that defines the post type, content, and any attached call-to-action. Here is a working example for a standard update post:


url = f"https://mybusiness.googleapis.com/v4/accounts/{account_id}/locations/{location_id}/localPosts" payload = { "languageCode": "en-US", "summary": "We have updated our service hours for the summer season.", "callToAction": { "actionType": "LEARN_MORE", "url": "https://yourwebsite.com/hours" }, "topicType": "STANDARD" } response = requests.post(url, headers=headers, json=payload)


Posts created via the API follow the same character limits and content policies as posts created manually, so keep your summary under 1,500 characters and avoid prohibited promotional language in event descriptions.

Upload photos to your locations


Photo uploads require a two-step process: first you create a media item resource, then you upload the binary file to the media upload URL Google returns in the first response. Use the mediaItems endpoint and set the mediaFormat field to PHOTO along with a locationAssociation that ties the image to the correct category, such as EXTERIOR, INTERIOR, or FOOD_AND_DRINK.


Automating photo uploads works especially well for multi-location retail or restaurant brands that refresh seasonal imagery across dozens of profiles at once. Build a simple loop over your location IDs and pass each one the same batch of approved image files to keep your visual presence consistent and current.


Respond to reviews at scale


Review responses live under the accounts/{accountId}/locations/{locationId}/reviews/{reviewId}/reply endpoint. Send a PUT request with a comment field containing your response text. To automate this responsibly, first pull new reviews using a GET request to the reviews endpoint, filter for unanswered entries, and then send templated responses based on star rating or keywords detected in the review body. Keep your templates specific enough to feel personal, and avoid identical copy-paste responses across every review since Google's systems and real readers both notice generic patterns.


Step 7. Pull insights and monitor changes


The Google Business Profile API gives you access to performance data that shows exactly how customers are finding and interacting with your listings. Pulling this data programmatically lets you track trends across all your locations without manually opening each profile in the dashboard and copying numbers into a spreadsheet. You can feed this data directly into your own reporting tools, flag anomalies automatically, and build dashboards that give you a clear picture of listing health across your entire portfolio.


Retrieve search and engagement metrics


Use the Business Profile Performance API to pull metrics like search impressions, website clicks, direction requests, and phone calls. Send a GET request to the performance endpoint with a date range and the metric types you want to retrieve. Here is a working example that pulls daily search impressions for the past 30 days:


url = f"https://businessprofileperformance.googleapis.com/v1/locations/{location_id}:fetchMultiDailyMetricsTimeSeries" params = { "dailyMetrics": ["BUSINESS_IMPRESSIONS_DESKTOP_SEARCH", "CALL_CLICKS", "WEBSITE_CLICKS"], "dailyRange.startDate.year": 2026, "dailyRange.startDate.month": 4, "dailyRange.startDate.day": 1, "dailyRange.endDate.year": 2026, "dailyRange.endDate.month": 4, "dailyRange.endDate.day": 30, } response = requests.get(url, headers=headers, params=params) print(response.json())


Google returns a time series object containing daily values for each metric you requested. Store these in a database and run this script on a scheduled basis to build a historical record you can reference when diagnosing performance shifts.


Schedule your metrics pull to run on the same day each week so your comparisons stay consistent and you catch drops before they compound.

Monitor for unexpected changes


Beyond pulling metrics on a schedule, you should also [watch for data anomalies](https://www.wilcowebservices.com/post/local-seo-marketing-agency) that signal a problem with a listing. Set up a simple threshold check in your script that flags any location where week-over-week phone click volume drops by more than 20 percent. That kind of drop often points to a listing getting suspended, an address change that broke your profile, or a competitor gaining ground. Catching it fast gives you time to investigate and fix it before it affects your client's business in a measurable way.


Build a lightweight alert into your monitoring script that sends an email notification to your team whenever a flagged condition triggers. Even a basic conditional check on the returned metrics data, combined with Python's smtplib library or a simple webhook to a messaging platform, keeps your team informed without requiring anyone to log in and check dashboards manually.


Wrap up and move forward


The Google Business Profile API gives you a direct, programmatic way to manage listings at scale. You now have a clear path from requesting access to pulling performance insights: get your prerequisites in order, submit a specific application, configure your Cloud project and OAuth credentials, and build out the operations that match your actual workflow. Whether you update hours in bulk, respond to reviews automatically, or feed location data into your reporting tools, the API replaces hours of manual dashboard work with repeatable, reliable code.


If you manage multiple locations and feel the weight of keeping every profile accurate and optimized, the API is worth every hour you invest in the setup. For businesses that want results without building the integration themselves, getting the underlying listing strategy right is just as important as the tooling. If you want a team that understands both, reach out to Wilco Web Services and we will help you move forward.

 
 
 

Comments


bottom of page