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
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
-
Aggregation —
group_by=statuswithcountto get every lane total in one request instead of three — is a Pro ($19/mo) feature. Filtering each lane with?status=Plannedworks 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:
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
For indie makers shipping a real app.
- Endpoints
- 10
- Requests / mo
- 50,000
- Row cap
- 5,000
- Count items per lane
- Notify when a card moves
- Fast cache for updates
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
Related use cases
Run a Public Changelog from Google Sheets
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
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
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
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.
Turn your sheet into an API in minutes
Paste a Google Sheet URL and get a live REST API and MCP server — no backend, no code, free to start.