# Run your product catalog from a Google Sheet

A product catalog is a table your merchandising team already keeps in a spreadsheet: SKUs, names, prices, stock, image links. PasteSheet publishes that Sheet as a live, cached JSON API, so your storefront reads products straight from cells — anyone can update a price without a deploy.

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

## Key facts

- A Google Sheet is capped at **10 million cells** (or 18,278 columns), which is the real ceiling on using one as a database. ([source](https://support.google.com/drive/answer/37603))
- The catalog is capped by plan: **500 SKUs on Free**, **5,000 on Starter ($9/mo)**, and no row cap on **Pro ($19/mo)**.
- Free serves a fixed **5-minute cache**; paid plans set a custom TTL from **30 seconds to 1 hour**, so a price or stock edit lands as fast as you need it to.
- The endpoint is **read-only by design**, so a public storefront can never write to your sheet — and it never handles checkout: carts, payments and orders stay in your commerce stack.

## Why keep the catalog in a Sheet

Product data is naturally tabular — one row per SKU, a column for each attribute. Your buyers and merchandisers already live in a spreadsheet, sorting by margin and flagging what is out of stock. Building an admin panel just to edit that same table is wasted work, and every price change becoming a deploy is a bottleneck.

PasteSheet sits in front of the Sheet and serves it as clean, typed JSON over a fast, cached endpoint. Your storefront — a [Next.js site](https://pastesheet.com/use-cases/google-sheets-nextjs-data), a mobile app, or a [no-code front end](https://pastesheet.com/use-cases/google-sheets-app-backend) — fetches the catalog and renders it. This is the read and catalog layer, not checkout: it serves the merchandising data your storefront displays, while payments and orders stay in your commerce stack.

## What the catalog endpoint gives you

Each tab becomes an endpoint, and URL parameters do the querying — no query language to learn:

- Exact-match filters — `?in_stock=true` or `?category=Apparel` to slice the catalog.
- Partial matches with `contains[name]=` and full-text `search=` for on-site product search (Pro).
- Sort by price or newest with `sort=-price`, and page large catalogs with `page` / `per_page`.
- Image URLs live in a cell and return like any other field — host them on any CDN and reference the link.

## Fetch products as JSON

Point your storefront at the endpoint and read the rows. Filter to in-stock items and sort by price in a single request:

```bash
curl "https://pastesheet.com/your-endpoint/Products?in_stock=true&sort=-price"

{
  "data": [
    {
      "sku": "TSHIRT-BLK-M",
      "name": "Classic Tee — Black",
      "price": 24.00,
      "in_stock": true,
      "image": "https://cdn.example.com/tees/black.jpg"
    }
  ]
}
```

## Safe to publish, nothing to wire up

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 power a small storefront. Paid plans add type-mapped columns for clean prices and booleans, private endpoints, and a custom cache TTL as your catalog grows.

## Frequently asked questions

### Can PasteSheet handle checkout or orders?

No. PasteSheet is a read-only catalog layer — it serves your product data as JSON. Payments, carts, and orders stay in your commerce stack; you use PasteSheet to display what is for sale, not to process transactions.

### How do I show stock or price changes fast?

Edit the cell in Google Sheets and the API reflects it after the cache refreshes. The Free plan refreshes every 5 minutes; paid plans let you set a custom TTL down to 30 seconds when you need near-live stock.

### Can shoppers change my prices through the API?

No. The endpoint is read-only by design — there is no write path — so it is safe to expose to a public storefront or a client-side app without leaking edit access to your Sheet.

### How do product images work?

Store an image URL in a column and return it like any other field; your front end renders it. Host images anywhere — a CDN, Drive, or your own bucket — and just reference the link in the cell.

## Sources

- [Files you can store in Google Drive (size limits)](https://support.google.com/drive/answer/37603) — Google

## Related use cases

- [Drive a Pricing Table from Google Sheets](https://pastesheet.com/use-cases/google-sheets-pricing-table) — Drive a website pricing table from a Google Sheet so non-devs update prices and features without a deploy — served as a live, read-only JSON API.
- [Run a Restaurant Menu on Google Sheets](https://pastesheet.com/use-cases/google-sheets-restaurant-menu) — Run a digital restaurant menu from a Google Sheet — dishes, prices, and dietary tags as a live, read-only JSON API. Update by editing cells, no redeploy.
- [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.

---

[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-product-catalog>
