Updated Oct 2026

Google Business Profile API Quota: Default Limits, Increases and How to Stop 429 Errors

The default Google Business Profile API quota is 300 queries per minute (QPM) per API, per Google Cloud project, once your project is approved. The Business Information API adds daily caps (300 location creates, 300 SearchGoogleLocation calls, 10,000 updates) and a hard limit of 10 edits per minute per profile that can’t be raised. Go over any of them and Google returns HTTP 429 Too Many Requests. You can request more through the “Quota Increase Request” form, but only if you already use most of what you have.

Google Business Profile API quota: every default limit

These are the defaults on Google’s usage limits page for the Google Business Profile API family:

APIDefault limit
Business Information API300 QPM
Business Information — Create Location300 per day
Business Information — SearchGoogleLocation300 per day
Business Information — Update Location10,000 per day
Business Information — edits10 per minute per Business Profile (can’t be increased)
Account Management API300 QPM
Performance API300 QPM
Verifications API300 QPM
Lodging API300 QPM
Place Actions API300 QPM
Notifications API300 QPM

The limits page doesn’t list the Google My Business API v4, which still serves reviews, posts and media (see what still lives in v4). Check its value in the Quotas tab of your own project.

A quota of 0 QPM isn’t a limit: it means your project hasn’t been approved. Don’t file a quota increase in that case. Get approved first.

What a 429 means in the Business Profile APIs

Google returns 429 Too Many Requests over HTTP, or RESOURCE_EXHAUSTED over gRPC, when a request goes over a quota. There are three different causes, and each one needs a different fix:

  1. Per-minute burst. You sent more than 300 requests in a minute to one API. Fix: throttle and back off.
  2. Daily cap. You used up a per-day limit, such as 300 location creates. Fix: spread the job over several days or request an increase.
  3. Per-profile edits. You sent more than 10 edits to the same profile in a minute. Fix: serialize writes per location. This limit can’t be raised.

How to check your current quota and usage

  1. Open the Google Cloud console and select the project you use for Business Profile.
  2. Go to APIs & Services → Enabled APIs & services and open the API you call most, for example My Business Business Information API.
  3. Open the Quotas tab to see the limit, and the Metrics tab to see traffic and errors by response code.
  4. Filter metrics by response code 429 to see when and how often you hit the limit.

How to request a Google Business Profile API quota increase

  1. Apply the best practices first. Google asks you to submit a request only after you’ve implemented backoff, throttling and notifications, so do the steps below before you ask.
  2. Gather evidence. Export a few weeks of usage from the Metrics tab. Google decides based on past usage.
  3. Open the GBP API contact form (support.google.com/business/contact/api_default) and choose Quota Increase Request.
  4. Fill in your company details, a contact email and your project number.
  5. Wait for the reply by email, then check the new value in the Quotas tab.

When Google says no. Google’s docs give two thresholds. The usage limits page says requests are typically denied if your app averages under 50% of its limit, doesn’t consistently reach it, or has a very spiky pattern. Google’s API FAQ says requests may be denied if average usage is under 70%. Aim to be consistently above 70% before you ask.

How to avoid 429 errors (with code)

1. Retry with exponential backoff and jitter

Retry 429 and 5xx responses, wait longer each time and add randomness so parallel workers don’t retry in sync. The code below respects a Retry-After header when there is one.

api.prismareviews.com/v1
// Node 18+
async function withBackoff(doRequest, { retries = 6, baseMs = 1000, maxMs = 60000 } = {}) {
  for (let attempt = 0; ; attempt++) {
    const res = await doRequest();
    const retryable = res.status === 429 || res.status >= 500;
    if (!retryable || attempt >= retries) return res;
    const retryAfter = Number(res.headers.get("retry-after"));
    const wait = retryAfter > 0
      ? retryAfter * 1000
      : Math.random() * Math.min(maxMs, baseMs * 2 ** attempt); // full jitter
    await new Promise((r) => setTimeout(r, wait));
  }
}

// usage
const res = await withBackoff(() =>
  fetch(url, { headers: { Authorization: `Bearer ${token}` } })
);

2. Throttle with a client-side queue

Backoff reacts to 429s. A queue prevents them. Set a token bucket a little under the limit (for example 250 per minute) and send every call through it. For writes, keep one queue per location so you never send more than 10 edits a minute to the same profile.

Node.js
// Minimal token bucket: N requests per 60 s
function createLimiter(perMinute = 250) {
  let tokens = perMinute;
  const queue = [];
  setInterval(() => { tokens = perMinute; drain(); }, 60_000);
  function drain() {
    while (tokens > 0 && queue.length) { tokens--; queue.shift()(); }
  }
  return (fn) => new Promise((resolve, reject) => {
    queue.push(() => fn().then(resolve, reject));
    drain();
  });
}

const limit = createLimiter(250);
await limit(() => withBackoff(() => fetch(url, { headers })));

3. Stop polling: use Pub/Sub notifications

Polling burns quota fast. With 1,000 locations checked every 5 minutes you spend 200 requests a minute just asking “anything new?”, which is two-thirds of a 300 QPM quota before you reply to anything. The Notifications API pushes NEW_REVIEW and UPDATED_REVIEW events to a Cloud Pub/Sub topic instead (notification setup):

  1. Create a Pub/Sub topic.
  2. Grant pubsub.topics.publish on it to mybusiness-api-pubsub@system.gserviceaccount.com.
  3. Call PATCH https://mybusinessnotifications.googleapis.com/v1/accounts/{accountId}/notificationSetting with your topic and the notification types, once per account.
  4. Fetch only the review that changed.

4. Read many locations in one call

POST https://mybusiness.googleapis.com/v4/accounts/{accountId}/locations:batchGetReviews reads reviews for several locations at once (review data). It takes locationNames, pageSize, pageToken, orderBy and ignoreRatingOnlyReviews.

cURL
curl -X POST -H "Authorization: Bearer ACCESS_TOKEN" -H "Content-Type: application/json" \
  "https://mybusiness.googleapis.com/v4/accounts/ACCOUNT_ID/locations:batchGetReviews" \
  -d '{"locationNames": ["accounts/ACCOUNT_ID/locations/LOC_1", "accounts/ACCOUNT_ID/locations/LOC_2"], "pageSize": 50, "orderBy": "updateTime desc"}'

5. Sync incrementally

reviews.list sorts by updateTime desc by default. Store the newest updateTime you’ve seen and stop paging as soon as you reach it. A full re-sync of every location every night is a common quota leak.

If you also reply to reviews through the API, every reply is one more call against the quota of the v4 API.

Common quota mistakes

MistakeWhat happensFix
Filing a quota increase with 0 QPMIgnored or deniedApply for Basic API Access
Retrying instantly in a loop429 storm, longer lockoutBackoff with jitter
Parallel bulk edits on one profile429 on the 11th edit in a minuteOne write queue per location
Polling all locations on a cronMost of your quota spent on “no change”Pub/Sub notifications
Asking for more quota at 20% usageDeniedOptimise first; ask above 70%

FAQ

What is the default Google Business Profile API quota?

300 queries per minute per API once your project is approved. The Business Information API also limits Create Location and SearchGoogleLocation to 300 per day, Update Location to 10,000 per day and edits to 10 per minute per profile.

What error does Google return when I exceed the quota?

HTTP 429 Too Many Requests, or RESOURCE_EXHAUSTED over gRPC.

Is the quota per user or per project?

Per Google Cloud project. Every client you connect through OAuth shares the same project quota, which is why agencies and multi-location brands hit it first.

Can the 10 edits per minute per profile limit be increased?

No. Google states that this limit cannot be increased. Queue writes per profile.

Why was my quota increase request denied?

Google typically denies increases when the project doesn’t consistently reach its limit, averages well below it (under 50% on the usage limits page, under 70% in the FAQ) or has a very spiky request pattern.

How long does a quota increase take?

Google doesn’t publish a timeline for quota increases. Plan your rollout as if the current quota is all you’ll get.

Skip all this with Prisma

Prisma connects Google with its own Cloud project and runs the plumbing: scheduled syncs that stay inside Google's quota, a job queue with exponential backoff for retries, and webhooks (review.created, review.updated) so you never poll. Prisma's own limits are per API key and per minute, and GET /v1/usage tells you where you stand. Built for agencies and multi-location brands.

cURL
curl "https://api.prismareviews.com/v1/usage" \
  -H "Authorization: Bearer $PRISMA_API_KEY"

Your first 2 locations are free, then plans from €49 a month. See pricing and the Prisma error codes.

Get API key

No quota forms on your side. Your first 2 locations are free.

Get your API key in a minute

Free Spark plan: 2 locations, no card. Test keys return sample data on all 11 platforms, so you can build before connecting a real one.