# Google Sheets API quota exceeded — how to fix it

A 429 from the Sheets API is not a bug and not something you can pay your way out of per-request. It is a per-minute quota, and the fix is almost always to stop asking Google so often.

*Last updated: 2026-07-13 · Source: <https://pastesheet.com/guides/google-sheets-api-quota-exceeded>*

## Key facts

- The error is `429 RESOURCE_EXHAUSTED`, and it means you crossed **300 reads/minute for the project** or **60/minute for one user**. ([source](https://developers.google.com/workspace/sheets/api/limits))
- Google's own guidance is **exponential backoff with jitter** — retry after 1s, 2s, 4s, 8s plus a random offset, rather than immediately. ([source](https://developers.google.com/workspace/sheets/api/limits))
- Backoff only slows the bleeding. **Caching removes the cause**: a cached endpoint reads the sheet once per TTL no matter how much traffic hits it.

## Why am I getting a 429 from the Google Sheets API?

Because you crossed a per-minute quota. Google allows **300 read requests per minute per project** and **60 read requests per minute per user per project**, and returns HTTP `429` once you exceed either ([Google's published usage limits](https://developers.google.com/workspace/sheets/api/limits)). The quota refills every minute.

The 60-per-user limit is the one that catches people out. It is far tighter than the project limit, so a single busy user — or a single chatty AI agent — can trip it while your project-wide usage looks fine.

## What usually causes it

- **Reading on every page load.** A page that fetches the sheet per visitor multiplies traffic straight into Google's quota.
- **An AI agent exploring.** One question becomes a schema read plus several filtered queries — agents are chatty by nature.
- **Polling.** A dashboard refreshing every few seconds will find the ceiling quickly.
- **Row-by-row reads.** Fetching cells or rows individually instead of in one range read.

## The fix: stop asking Google every time

Exponential backoff is the band-aid — it stops the errors but keeps you at the ceiling. The actual fix is a cache: read the sheet once, serve every subsequent request from memory, and refresh on an interval you choose.

That is the whole idea behind PasteSheet. It reads your sheet, caches the rows, and serves them from a fast endpoint. A thousand readers in a minute cost Google *one* read, not a thousand — so the quota stops being your problem. You set the refresh window yourself, from 30 seconds up to an hour. The full walkthrough is in [using Google Sheets as a REST API](https://pastesheet.com/guides/google-sheets-rest-api).

## Quota at a glance

| Limit | Value | Who it applies to |
| --- | --- | --- |
| Read requests / minute | 300 | Per project |
| Read requests / minute | **60** | Per user, per project — the usual culprit |
| Write requests / minute | 300 | Per project |
| On exceeding | `429` | Refills every minute |

## What it costs

**MCP is included on the Free plan.** Connect any **public** endpoint over MCP with no Google Cloud project and no credit card. Private endpoints and the account-wide workspace server need a paid plan (from **Starter ($9/mo)**) for the keys and OAuth they authenticate with.

Pro adds full-text search and aggregation (`count`, `sum`, `avg`, `group_by`) that your AI agent can call through `query_rows`.

**Starter — $9/month.** For indie makers shipping a real app.

- Endpoints: 10
- Requests: 50,000 / month
- Rows per endpoint: 5,000
- Tabs per endpoint: 5
- Rate limit: 300 / minute

## Frequently asked questions

### What is the Google Sheets API rate limit?

Google allows 300 read requests per minute per project and 60 per minute per user per project. Write limits match. Exceeding either returns a 429, and the quota refills each minute.

### Can I pay Google to raise the quota?

You can request a quota increase in the Google Cloud console, but it is not an instant paid upgrade and it is not guaranteed. Caching is faster to implement and usually removes the need entirely.

### Does exponential backoff fix it?

It stops the errors surfacing, but you are still bounded by the same per-minute ceiling — requests just wait. If your read volume genuinely exceeds the quota, you need to reduce reads, not retry them.

### How does caching remove the limit?

Because your traffic no longer reaches Google. The sheet is read once per cache window and everything else is served from the cache, so a thousand readers in a minute cost one Google read rather than a thousand.

## Sources

- [Usage limits — Google Sheets API](https://developers.google.com/workspace/sheets/api/limits) — Google

## Related guides

- [Google Sheets API Rate Limits (60/min)](https://pastesheet.com/guides/google-sheets-api-rate-limits) — Google Sheets API rate limits are 300 reads per minute per project and 60 per user. Here is why read-heavy apps hit a 429 — and how caching removes the wall.
- [How to Cache a Google Sheets JSON API](https://pastesheet.com/guides/google-sheets-json-cache) — Should you cache a Google Sheets JSON API? How edge caching keeps reads fast, avoids Google's rate limits, and serves your app from a CDN-like layer.
- [Turn Google Sheets Into a REST API (No Code)](https://pastesheet.com/guides/google-sheets-rest-api) — Turn a public or restricted Google Sheet into a live JSON REST API with filtering, sorting, and pagination — no backend, no code.
- [Does Google Sheets Have a REST API?](https://pastesheet.com/guides/does-google-sheets-have-an-api) — Does Google Sheets have an API? Yes — Google's cell-based Sheets API, plus simpler no-code options that expose your sheet as clean JSON in minutes.

---

[PasteSheet](https://pastesheet.com) turns any Google Sheet into a live REST API and MCP server for AI agents — no backend, no code. Canonical HTML version of this page: <https://pastesheet.com/guides/google-sheets-api-quota-exceeded>
