Product Changelog Managed in Google Sheets
Use a Google Sheet as a simple CMS for your product changelog — write updates in Sheets, publish them to your website via SheetsAPI.
A changelog your product team can publish themselves
Product changelogs rot when publishing one requires a developer. The fix is simple: put the changelog in Google Sheets and serve it with GKit SheetsAPI. Your product team writes entries directly in the Sheet, and the website picks them up automatically — no CMS login, no deploy, no handoff.
Sheet structure
Create a sheet named Changelog with these columns:
| version | date | title | body | type |
|---|---|---|---|---|
| 2.4.0 | 2026-06-20 | Custom webhook support | You can now configure webhooks per workspace... | feature |
| 2.3.1 | 2026-06-10 | Fix export timeout | Resolved a timeout error on large CSV exports. | fix |
| 2.3.0 | 2026-05-28 | Removed legacy v1 API | The v1 API endpoints have been removed. | breaking |
type accepts feature, fix, or breaking — your frontend uses this to render the right badge color.
The API call
Fetch the 20 most recent entries, newest first:
const res = await fetch(
"https://sheetsapi.gkit.mreshank.com/api/spreadsheets/{userKey}/Changelog?sort=-date&limit=20"
);
const { data } = await res.json();sort=-date means descending by date. limit=20 caps the response so you're not loading the entire history on every page view.
Rendering changelog entries
data.forEach(entry => {
const badge = { feature: "🟢", fix: "🔵", breaking: "🔴" }[entry.type] ?? "⚪";
console.log(`${badge} ${entry.version} — ${entry.title} (${entry.date})`);
// render entry.body as markdown or plain text
});To show only breaking changes in a migration guide:
const res = await fetch(
"https://sheetsapi.gkit.mreshank.com/api/spreadsheets/{userKey}/Changelog?search=type:breaking&sort=-date"
);Curl equivalent
curl "https://sheetsapi.gkit.mreshank.com/api/spreadsheets/{userKey}/Changelog?sort=-date&limit=20"The publishing workflow
- Product manager ships a feature.
- They open the Sheet and add a row: version, today's date, a title, a short description, type =
feature. - The changelog page refreshes and shows the new entry.
No CMS. No PR. No "hey can you publish this for me." The person who knows what shipped is also the person who publishes it.
For versioned docs, you can add a docs_url column and link each entry to the relevant release notes page.
Why this works
A changelog is a list of rows with a handful of fields — exactly what a spreadsheet is already good at. Most teams already draft release notes in a Google Doc or Sheet anyway. SheetsAPI removes the manual step of copying that content into a CMS. The Sheet is the CMS. The API is just a thin read layer that makes the content available to your website without any middleware.
The result is a changelog that stays current because the people who own the product also own the data, and updating it costs them nothing more than adding a row.
Connect your changelog Sheet and publish your next release in seconds.