# Use a Google Sheet as a read backend for Bubble

Bubble's API Connector can call any JSON endpoint, so you do not need a Google Sheets plugin or a Cloud project to read spreadsheet data. Point it at a PasteSheet endpoint and a sheet becomes a live, queryable source you bind to repeating groups and pages.

*Last updated: 2026-07-11 · Source: <https://pastesheet.com/use-cases/google-sheets-bubble-backend>*

## Key facts

- Google's API requires a **Google Cloud project plus OAuth credentials or a service account** before it will return a single row. ([source](https://developers.google.com/workspace/sheets/api/guides/authorizing))
- It needs **no Google Cloud project, no OAuth consent screen and no service-account JSON**. You paste a share URL, and MCP is included on the Free plan.
- For a private feed, add an `Authorization: Bearer` header to the API Connector call. Private endpoints and keys start on **Starter ($9/mo)**; public endpoints need no key at all.
- A repeating group can bind up to **500 rows on Free** and **5,000 on Starter**; **Pro ($19/mo)** removes the row cap.

## A sheet Bubble can read without a plugin

Plenty of Bubble apps only need to *read* some reference data — a catalog, a price list, a set of locations someone maintains in a spreadsheet. Modeling that in Bubble's database means an import step and a sync job to keep it current, and the Google Sheets plugins want OAuth and a Cloud project to boot.

PasteSheet skips all of it. It publishes your sheet as a plain JSON endpoint, and Bubble's built-in **API Connector** reads it like any other API — no plugin to install, no Google account to authorize. This is a read data layer, not a two-way sync, so the sheet stays the source of truth.

## Wire it into the API Connector

Set it up once in the Bubble editor, then reuse the call anywhere:

1. Add the **API Connector** plugin, then create a new API named `PasteSheet`.
2. Add a **GET** call to `https://pastesheet.com/your-endpoint/Products` and hit **Initialize call** so Bubble learns each column and its type.
3. Expose `sort`, `per_page`, or a filter like `status` as query parameters so you can filter at runtime.
4. Bind the call's `data` list to a repeating group — each row's columns are ready to drop into cells. For a private endpoint, add an `Authorization: Bearer YOUR_KEY` header.

## The response the API Connector reads

The endpoint the connector calls returns typed rows under a `data` key — point the repeating group at that list:

```bash
curl "https://pastesheet.com/your-endpoint/Products?status=live&sort=name&per_page=25"

{
  "data": [
    {
      "sku": "TS-001",
      "name": "Field Notebook",
      "price": 12.5,
      "status": "live"
    }
  ]
}
```

## Read-only, nothing to authorize

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 to back a Bubble list or two. Upgrade for private endpoints and keys, a custom cache TTL, and full-text search as your app grows.

## Frequently asked questions

### Do I need a Bubble plugin for Google Sheets?

No. PasteSheet exposes the sheet as JSON, and Bubble's built-in API Connector reads any JSON endpoint. There is no Sheets plugin to install and no Google account to authorize.

### Can Bubble write back to the sheet?

No. This is a read data layer — the endpoint only serves data and has no write path. Bubble pulls lists and records but cannot change the spreadsheet.

### How do I keep my data private in Bubble?

The sheet itself must be link-shared for PasteSheet to read it, but the endpoint does not have to be: make the endpoint private and send an Authorization: Bearer YOUR_KEY header in the API Connector call. Public endpoints need no key at all.

### How current is the data in my app?

Responses are cached for speed — 5 minutes on Free, a custom 30s–1hr TTL on paid plans. Edits appear after the cache refreshes, or immediately after a manual refresh in PasteSheet.

## Sources

- [Authorize requests — Google Sheets API](https://developers.google.com/workspace/sheets/api/guides/authorizing) — Google
- [Service accounts overview](https://cloud.google.com/iam/docs/service-account-overview) — Google Cloud

## Related use cases

- [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.
- [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.
- [Serve a Product Catalog from Google Sheets](https://pastesheet.com/use-cases/google-sheets-product-catalog) — Power a product catalog from a Google Sheet. PasteSheet serves products, prices, and stock as a live, read-only JSON API — no backend, no Google Cloud setup.
- [Use Google Sheets as a Free Headless CMS](https://pastesheet.com/use-cases/google-sheets-cms) — Run your website's content from a Google Sheet. PasteSheet publishes it as a live, read-only JSON API — no database, no backend, no Google Cloud setup.

---

[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-bubble-backend>
