Run your i18n strings from a Google Sheet
A spreadsheet is where translation actually happens: one row per key, one column per locale, and a grid your translators can read at a glance. PasteSheet publishes that sheet as a live, cached JSON API, so your app pulls localized strings straight from cells and non-developers ship copy in a new language without touching the codebase or a deploy.
Last updated
Key facts
- One locale is one column, and a Google Sheet allows 18,278 columns (within a 10 million cell ceiling) — you will run out of languages long before you run out of room. source
- The strings tab holds up to 500 keys on Free and 5,000 on Starter ($9/mo); Pro ($19/mo) removes the row cap for a large bundle.
- The endpoint is read-only: translators edit in Google Sheets, and the app that reads the strings can never write one back.
Why localize from a Sheet
i18n is a table by nature: a key column and a column per locale. A spreadsheet shows the whole matrix at once, so a translator can see the English source next to the French cell they are filling in, and a missing translation is an obvious blank. Hand-editing JSON or PO files, by contrast, is a job only developers can do.
PasteSheet serves that grid as clean JSON over a fast, cached endpoint. Your app fetches the strings for a locale and renders them; translators just edit cells in Google Sheets. Add a column, add a language — no schema change, no migration, no release to get new copy in front of users.
How to structure the sheet
One tab, one row per string key, one column per locale:
-
A
keycolumn — the stable identifier your app looks up, likecheckout.title. -
A column per locale —
en,es,fr,de— holding the translated copy. -
Optional
contextornotescolumns to brief translators without leaving the sheet. - Fetch one key at a time, or pull the whole tab and cache it as your locale bundle.
Fetch translations as JSON
Point your app at the endpoint and read the strings. Filter to one key, or pull them all and build a locale map:
curl "https://pastesheet.com/your-endpoint/Strings?key=checkout.title"
{
"data": [
{
"key": "checkout.title",
"en": "Checkout",
"es": "Pagar",
"fr": "Commander",
"de": "Zur Kasse"
}
]
}Read-only, so it is safe to hand to translators
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
- Custom cache TTL
- Type-mapped columns
- Private endpoints & keys
Start on Starter ($9/mo) for a custom cache TTL, so a corrected translation reaches users in seconds instead of minutes. Free works to prototype with a 5-minute cache; paid plans add private endpoints and keys when your copy should not be public.
Frequently asked questions
Do translators need a PasteSheet account?
No. Only you, the owner, connect the sheet once. Translators just use Google Sheets — anyone you share the sheet with can edit copy, and the API reflects their changes after the cache refreshes.
How do I add a new language?
Add a column for the locale and fill it in. There is no schema to migrate and no code to change — the new locale appears in the JSON as soon as the cache refreshes.
Can I fetch just one locale?
Each row returns every locale column, so you filter by key rather than by language and read the column you need. Pull the whole tab once and cache it as your locale bundle for speed.
Can anyone change my strings via the API?
No. PasteSheet is read-only by design. The endpoint only serves the translations — there is no write path — so it is safe to expose to a client app or a public site.
Sources
Related use cases
Google Sheets for Mobile App Content
Ship mobile app strings, banners, and promos from a Google Sheet. PasteSheet serves them as a live, read-only JSON API — update content without a new build.
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.
Drive a Marketing Site from Google Sheets
Run your marketing site's content blocks from a Google Sheet — hero copy, feature lists, section text. PasteSheet publishes it as a live, read-only JSON API.
A No-Code Backend From a Google Sheet
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.
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.