# Publish a product roadmap from a Google Sheet

A public roadmap is a board: one row per item, each with a status of planned, in progress, or shipped. PasteSheet turns that Google Sheet into a live JSON API, so your roadmap page groups items by status and moving a card is editing one cell — never a code change or a deploy.

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

## 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))
- Aggregation — `group_by=status` with `count` to get every lane total in one request instead of three — is a **Pro ($19/mo)** feature. Filtering each lane with `?status=Planned` works on any plan.
- The board holds up to **500 items on Free** and **5,000 on Starter ($9/mo)**; **Pro** removes the row cap.
- The endpoint is **read-only**: a public roadmap can show votes and ETAs, but a visitor can never move a card or edit an item through the API.

## Move a card by editing a cell

A public roadmap earns trust by staying current, and it stays current only if updating it is trivial. Keep the items in a Google Sheet — one row each, with a status column of planned, in progress, or shipped — and moving a card across the board becomes changing a single cell.

PasteSheet serves the sheet as typed JSON, so your roadmap page fetches the items and renders a column per status. Your product team edits the sheet; the page follows. No board tool to pay for, no admin panel to build, and the changelog next door can read the same shipped rows.

## How the board reads the sheet

A status column plus a few extras, and the queries that build each lane:

- `?status=Planned` — build one lane per status with an exact-match filter.
- `?sort=-votes` — surface the most-requested items first.
- `?quarter=Q3 2026` — filter to a release window or milestone.
- `?group_by=status&count` — count items per lane in one call (Pro aggregation).

## Fetch the roadmap as JSON

Point each lane at the endpoint with a status filter, or pull everything and group client-side:

```bash
curl "https://pastesheet.com/your-endpoint/Roadmap?status=In%20Progress&sort=-votes"

{
  "data": [
    {
      "title": "Webhooks on row change",
      "status": "In Progress",
      "quarter": "Q3 2026",
      "votes": 128,
      "eta": "2026-09"
    }
  ]
}
```

## Read-only, so it is safe to publish

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

**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

**Starts at $9/mo** if you want the extras a roadmap benefits from — but the Free plan runs the page today. Pro adds aggregation, so `group_by=status` with `count` returns your lane totals in a single request instead of three.

## Frequently asked questions

### How do I move an item across the board?

Change the status cell in the sheet — from Planned to In Progress to Shipped. The roadmap page reflects it after the cache TTL, or immediately after a manual refresh. No deploy, no board tool.

### Can I group items by status?

Yes. Filter each lane with ?status=Planned, or on Pro use ?group_by=status with count to get the item totals per lane in one call. Either way the status column drives the layout.

### Can I show vote counts or ETAs?

Store them as columns — votes as a number, ETA as a date — and they come back typed. Sort by ?sort=-votes to surface the most-requested items at the top of a lane.

### Can visitors change my roadmap through the API?

No. PasteSheet is read-only by design. The endpoint only serves data, so it is safe to expose on a public roadmap page.

## Sources

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

## Related use cases

- [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.
- [Google Sheets Feature Flags & Remote Config](https://pastesheet.com/use-cases/google-sheets-feature-flags) — Ship feature flags from a Google Sheet. Toggles are served as a live, read-only JSON API your app reads on launch — no deploy, no app-store review, no backend.
- [Feed a Live Dashboard From Google Sheets](https://pastesheet.com/use-cases/google-sheets-live-dashboard) — Power a live dashboard from a Google Sheet: PasteSheet serves rows and count/sum/avg rollups as cached JSON your charts read — no backend, no database.
- [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-roadmap>
