# Flip feature flags by editing a Google Sheet

Feature flags do not belong in a redeploy. PasteSheet turns a Google Sheet into a live, cached flags API your app reads on launch, so you flip a boolean, tweak a rollout percentage, or point an A/B test at a new variant by editing a cell — no build, no release, no app-store review to wait on.

*Last updated: 2026-07-26 · Source: <https://pastesheet.com/use-cases/google-sheets-feature-flags>*

## Key facts

- A kill switch propagates as fast as your cache TTL: Free is a fixed **5 minutes**, while paid plans set it anywhere from **30 seconds to 1 hour**. Thirty seconds is the floor — this is not a sub-second flag service.
- A cached endpoint reads the sheet **once per TTL**, not once per request — so 10,000 visitors become one upstream read, and Google's quota stops being your problem.
- The Google Sheets API allows **300 read requests per minute per project** and **60 per minute per user**. Past that it returns `429 RESOURCE_EXHAUSTED`. ([source](https://developers.google.com/workspace/sheets/api/limits))
- The flags endpoint is **read-only by design**, so it is safe to ship the URL inside a client: an app can read every flag but can never flip one.

## Why keep feature flags in a Sheet

A feature flag is just a row: a key, a boolean, maybe a rollout percentage and a variant. That is a table, and a spreadsheet models it perfectly. Product and marketing can toggle a launch or dial a rollout up and down without pinging an engineer, and you never ship a build just to turn something on.

PasteSheet sits in front of the sheet and serves it as clean, typed JSON over a fast, cached endpoint. Your app — a mobile client, a [Next.js](https://pastesheet.com/use-cases/google-sheets-nextjs-data) front end, or a background worker — fetches the flags on launch and branches on them. Edit a cell, and the new state is live once the cache refreshes.

## What you can drive from the sheet

One tab of flags, a column per attribute. Common patterns people ship:

- Kill switches — flip `enabled` to `false` to disable a feature instantly.
- Percentage rollouts — bump a `rollout` column from 10 to 50 to 100.
- A/B variants — assign a `variant` per key and read it client-side.
- Per-platform gates — filter with `?platform=ios` so each build sees only its flags.

## Read the flags as JSON

Point your app at the endpoint and read the enabled flags. Filter, sort, and paginate with URL parameters — no query language to learn:

```bash
curl "https://pastesheet.com/your-endpoint/Flags?enabled=true"

{
  "data": [
    {
      "key": "new_checkout",
      "enabled": true,
      "rollout": 50,
      "variant": "b",
      "platform": "all"
    }
  ]
}
```

## Read-only, so it is safe to ship in the client

Because the endpoint is **read-only by design**, it is safe to expose publicly or hand to a teammate: consumers can read and query the data but can never change the sheet. And there is **no Google Cloud project, OAuth screen, or service account** to set up — you paste a share URL and get a live API.

## What it costs

**Free — $0/month.** For side projects and trying things out.

- Endpoints: 3
- Requests: 2,000 / month
- Rows per endpoint: 500
- Tabs per endpoint: 1
- Rate limit: 60 / minute

**Start free.** The Free plan runs 3 live endpoints with a 5-minute cache — enough for a flags table. Paid plans add a custom cache TTL so a kill switch propagates in seconds, plus private endpoints and keys when the flags should not be public.

## Frequently asked questions

### How fast does a flag change take effect?

As fast as your cache TTL. The Free plan refreshes every 5 minutes; paid plans let you set a TTL as low as 30 seconds, so a kill switch or rollout change reaches your app almost immediately.

### Can someone flip my flags through the API?

No. PasteSheet is read-only by design. The endpoint only serves the flag values — there is no write path — so a client that reads your flags can never change the sheet.

### How do I do percentage rollouts?

Store a rollout percentage in a column and read it client-side: hash a stable user id and compare it against the number. Bumping the cell from 10 to 100 widens the rollout with no deploy.

### Do I need a Google Cloud project?

No. There is no service account, OAuth screen, or Apps Script. You paste a Google Sheet share URL and PasteSheet hosts the cached JSON API and MCP server for you.

## Sources

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

## Related use cases

- [Google Sheets for Mobile App Content](https://pastesheet.com/use-cases/google-sheets-mobile-app-content) — Ship mobile app strings, banners, and promos from a Google Sheet. PasteSheet serves them as a live, read-only JSON API — update content without a new build.
- [A No-Code Backend From a Google Sheet](https://pastesheet.com/use-cases/google-sheets-app-backend) — Skip the server. PasteSheet turns a Google Sheet into a live, read-only JSON API your web or mobile app reads from — no database, no backend, no Google setup.
- [Run a Public Changelog from Google Sheets](https://pastesheet.com/use-cases/google-sheets-changelog) — Publish a release-notes page from a Google Sheet — every version as live JSON, sorted newest first and filtered by type. No backend, no deploy to ship updates.
- [Use a Google Sheet as a Next.js Data Source](https://pastesheet.com/use-cases/google-sheets-nextjs-data) — Fetch a Google Sheet as typed JSON in Next.js or React — from a Server Component, getStaticProps, or ISR. Cached, read-only, set up by pasting a share URL.

---

[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/use-cases/google-sheets-feature-flags>
