---
title: "Google Search Console API Rate Limits"
description: "Search Analytics allows 1,200 queries per minute per site and per user. Learn URL Inspection quotas, load limits, and retry strategies."
canonical_url: "https://gscdump.com/learn-google-search-console/api/rate-limits"
last_updated: "2026-07-20"
---

The GSC API applies request quotas to every resource and resource-based load quotas to Search Analytics. Either type of quota can block a Search Analytics request.

## Search Analytics Limits

Google's [Search Console API usage limits](https://developers.google.com/webmaster-tools/limits#search_analytics) separate Search Analytics quotas by site, user, and project:

**Per site:**

- **1,200 queries per minute (QPM)** across users querying the same property

**Per user:**

- **1,200 QPM** across all properties queried by the same user

**Per project:**

- **30 million queries per day (QPD)**
- **40,000 queries per minute (QPM)**

One request can count against the site, user, and project quotas at the same time. A rate limit can produce a `429` `rateLimitExceeded` response. Other quota failures can be returned as `403` errors such as `quotaExceeded`, as listed in Google's [Search Console API error reference](https://developers.google.com/webmaster-tools/v1/errors).

Search Analytics also has short-term load quota, measured in 10-minute periods, and long-term load quota, measured over one day. If you exceed the short-term load quota, [Google recommends waiting 15 minutes](https://developers.google.com/webmaster-tools/limits#search_analytics) before trying again. If one request still fails after that, reduce its cost or wait for the long-term quota window to recover.

## URL Inspection Limits

The URL Inspection API has separate [site and project quotas](https://developers.google.com/webmaster-tools/limits#url_inspection):

- **2,000 queries per day** per site
- **600 queries per minute** per site
- **10 million queries per day** per project
- **15,000 queries per minute** per project

The per-site daily quota makes URL Inspection unsuitable as a crawler or as a replacement for bulk indexing reports. Reserve it for URLs that need individual inspection.

## Other API Resources

For resources outside Search Analytics and URL Inspection, including Sites and Sitemaps, Google sets a [per-user limit](https://developers.google.com/webmaster-tools/limits#all-other-resources) of 20 queries per second and 200 queries per minute. The per-project limit is 100 million queries per day.

## Row Limit

Search Analytics [exposes a maximum of **50,000 rows per day per search type**](https://developers.google.com/webmaster-tools/v1/how-tos/all-your-data#data-limits), sorted by clicks. The limit has three practical consequences:

- Dimensioned results expose top rows rather than a guaranteed complete list
- Long-tail queries may be absent
- To obtain property-level aggregate totals, make a separate request without page or query dimensions; do not sum a truncated result set

See [export row limits](/learn-google-search-console/limits/export-row-limits) for details on working with this constraint.

## Query Cost Factors

Google identifies [three request choices that increase Search Analytics load](https://developers.google.com/webmaster-tools/limits#search_analytics):

1. **Dimensions:** Grouping or filtering by both `page` and `query` is most expensive.
2. **Date range:** Six-month requests cost significantly more than single-day queries.
3. **Repeated requests:** Re-querying the same historical data consumes load again.

When synchronizing historical data, prefer **one-day queries** over large date ranges to reduce per-query load. Google specifically identifies page and query grouping or filtering, especially together, as expensive.

## Batch Requests

The API supports up to **1,000 calls in one batch request**. A batch is a `multipart/mixed` HTTP request in which each part contains an individual Search Console request. Calls can execute in any order.

Batching reduces HTTP connection overhead, but [each inner call still counts separately](https://developers.google.com/webmaster-tools/v1/how-tos/batch) against quota. It does not combine request bodies into a `searchanalytics.batch()` method, and a particular client library might not provide a batch helper.

## Exponential Backoff

Search Console defines `429` as a rate-limit response, `500` as an internal error, and `503` as a backend or availability failure in its [error reference](https://developers.google.com/webmaster-tools/v1/errors). For retry-safe requests, capped exponential backoff with jitter follows [Google Cloud's retry pattern](https://cloud.google.com/iam/docs/retry-strategy). Preserve Google's response status when your request wrapper throws an error:

```typescript
async function fetchWithBackoff<T>(
  fn: () => Promise<T>,
  maxRetries = 5,
): Promise<T> {
  let delay = 1000 // Start at 1 second

  for (let attempt = 0; attempt <= maxRetries; attempt++) {
    try {
      return await fn()
    }
    catch (error: unknown) {
      const typedError = error as { status?: number, response?: { status?: number } }
      const status = typedError.status ?? typedError.response?.status

      if (![429, 500, 503].includes(status ?? 0) || attempt === maxRetries) {
        throw error
      }

      const jitter = Math.random() * 1000
      await new Promise(resolve => setTimeout(resolve, delay + jitter))
      delay = Math.min(delay * 2, 32_000)
    }
  }

  throw new Error('Max retries exceeded')
}

// Usage
const data = await fetchWithBackoff(() =>
  gsc.searchanalytics.query({
    siteUrl: 'https://example.com',
    requestBody: {
      startDate: '2026-07-01',
      endDate: '2026-07-01',
      dimensions: ['page'],
    },
  })
)
```

Do not repeatedly back off and retry an expensive request that returns `quotaExceeded`. For a short-term load failure, wait 15 minutes; for a long-term failure, reduce the date range or remove page/query grouping or filtering.

## A Practical Rate-Limit Strategy

For syncing large properties:

1. **Use daily requests:** Fetch one day per request to reduce Search Analytics load.
2. **Queue jobs:** Apply explicit per-site, per-user, and per-project rate limits. No single concurrency setting is safe for every workload.
3. **Classify quota errors:** Retry transient `429`, `500`, and `503` responses with backoff. Change or delay requests that exceed load quota.
4. **Monitor quotas:** Track your project's daily quota usage in Google Cloud Console.

See [authentication](/learn-google-search-console/api/authentication) for project setup and the [query builder](/learn-google-search-console/api/query-builder) for efficient request patterns.

## Related Articles

- [GSC API Query Builder](/learn-google-search-console/api/query-builder): Build queries with dimensions and filters
- [GSC API Authentication](/learn-google-search-console/api/authentication): Set up OAuth and token management
- [Export Row Limits](/learn-google-search-console/limits/export-row-limits): Understand the 25K/50K row caps
- [GSC MCP Server](/learn-google-search-console/ai-agents/mcp-server): Query existing Pro-synced data without spending live Search Analytics quota
