How do you publish a dashboard that reads a Google Sheet only the owner can edit?
Last updated 2026-08-24 · Confidence: documented — Google, GitHub, Vercel, and Netlify docs; the column-stability section is inferred and marked.
Host the single HTML file on any free static host and have it fetch the Sheet through one of Google’s read-only endpoints. The page can only read, so viewers never touch the data, and edits to the Sheet flow through without re-prompting the AI.
Four no-server ways the page can read the Sheet
Section titled “Four no-server ways the page can read the Sheet”- Publish to web — File → Share → Publish to the web publishes the whole spreadsheet or individual tabs; changes auto-republish, and the update “might take a few minutes”.
- gviz endpoint —
docs.google.com/spreadsheets/d/{id}/gviz/tqreturns JSON for a chosen tab or range (gid,sheet,rangeparameters), or CSV viatqx=out:csv. Works without credentials only when the sheet is shared “anyone with the link can view”; private sheets need OAuth. - opensheet — free hosted Sheet-to-JSON proxy; needs the same anyone-with-link sharing; responses cache for 30 seconds.
- Apps Script web app — a
doGetdeployed to run as the owner serves JSON to anonymous visitors while the sheet itself stays private.
The same sheet can also feed an agent directly — see Feeding spreadsheets; AI output lands back in it via Writing to Docs.
Viewers can’t edit; anyone with the URL can read
Section titled “Viewers can’t edit; anyone with the URL can read”Every endpoint above is read-only, and Google shows published files as a version viewers can’t edit. The trade: the published or link-shared URL is unguessable but unauthenticated — Google’s warning is “Be careful when publishing private or sensitive info”, and stopping access means stopping publishing. Sharing the page through the AI product’s own publisher has its own audience limits — see AI page publishing.
Hosting the page itself is free
Section titled “Hosting the page itself is free”- GitHub Pages serves static files, with a 100 GB/month soft bandwidth limit and no commercial use.
- Vercel’s Hobby plan is free for personal, non-commercial projects.
- Netlify’s individual plan is $0 with custom domains and SSL.
Renaming or reordering columns breaks the wiring
Section titled “Renaming or reordering columns breaks the wiring”opensheet keys JSON by the header row and gviz addresses fixed ranges, so page code that reads named columns stops matching after a header change; adding rows is safe.
Sources
Section titled “Sources”- Make Google Docs, Sheets, Slides & Forms public — Google Docs Editors Help
- Google Sheets as a Data Source — Google Charts docs
- Implementing a Data Source — Google Charts docs
- Web Apps — Apps Script docs
- opensheet — GitHub
- What is GitHub Pages? — GitHub Docs
- GitHub Pages limits — GitHub Docs
- Vercel Hobby Plan — Vercel docs
- Netlify Pricing — Netlify