# An alternative to an Apps Script Web App

Publishing a sheet as JSON via Apps Script is the classic free hack. It works — right up until it is quietly load-bearing and nobody remembers how it was deployed.

*Last updated: 2026-07-26 · Source: <https://pastesheet.com/guides/apps-script-alternative>*

## Key facts

- Apps Script caps a script at **6 minutes per execution** (30 seconds for a custom function) and **30 simultaneous executions per user**. ([source](https://developers.google.com/apps-script/guides/services/quotas))
- Apps Script allows **20,000 `UrlFetch` calls per day** on a consumer account (100,000 on Workspace), and trigger runtime is capped at **90 minutes a day**. ([source](https://developers.google.com/apps-script/guides/services/quotas))
- Those Apps Script limits sit **on top of** the Sheets API's own per-minute quotas — and a `doGet()` web app has no caching layer, so every caller is a cold execution. ([source](https://developers.google.com/workspace/sheets/api/limits))
- A cached endpoint reads the sheet **once per TTL**, not once per request — so 10,000 visitors become one upstream read, and Google's quota stops being your problem.

## Why replace an Apps Script Web App?

Because it becomes infrastructure without ever being treated like it. A `doGet()` that returns `ContentService` JSON is fifteen lines and free, and for a weekend project that is exactly right.

The trouble starts when it matters. Apps Script has its own execution quotas, cold starts that show up as multi-second latency, no real caching layer, no typed output, and a deployment model — versioned web-app URLs, "execute as", "who has access" — that is remarkably easy to get subtly wrong.

## What tends to break

- **Latency.** Cold starts are unpredictable and slow, and you cannot cache in front of them without building that yourself.
- **Quotas.** Apps Script enforces its own daily execution limits, separate from the Sheets API quota.
- **Types.** You get whatever the script serialises — usually strings — so every consumer re-parses numbers and dates.
- **Deployment.** A new version means a new deployment, and it is easy to leave callers pointed at an old URL.
- **Silent schema drift.** Someone renames a column, the script keeps returning 200, and downstream code breaks quietly.

## The hosted alternative

PasteSheet replaces the script with a connected endpoint: cached responses with a TTL you choose, AI-inferred column types, filtering and sorting as query parameters, and [an MCP server](https://pastesheet.com/guides/google-sheets-mcp) for AI agents on the same URL. It also watches the sheet's schema and alerts you when a column changes — the failure Apps Script never tells you about.

If your script is doing something genuinely custom — bespoke transforms, writes, calling other Google services — keep it. This is for the very common case where the script exists solely to hand out rows as JSON — which is what [using Google Sheets as a REST API](https://pastesheet.com/guides/google-sheets-rest-api) covers end to end.

## What it costs

**MCP is included on the Free plan.** Connect any **public** endpoint over MCP with no Google Cloud project and no credit card. Private endpoints and the account-wide workspace server need a paid plan (from **Starter ($9/mo)**) for the keys and OAuth they authenticate with.

Pro adds full-text search and aggregation (`count`, `sum`, `avg`, `group_by`) that your AI agent can call through `query_rows`.

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

## Frequently asked questions

### Is Apps Script bad for serving a JSON API?

Not bad, but not built for it. It works well for small internal jobs. It struggles once the endpoint is load-bearing: cold-start latency, its own execution quotas, no caching layer, and untyped output.

### Can I keep my Apps Script for writes?

Yes, and that is often the right split. Keep the script for anything that writes or does custom work, and move the read path to a cached endpoint that your app and your AI agents can hit hard.

### What about Apps Script quotas?

Apps Script enforces its own daily execution limits, on top of the Sheets API's per-minute quotas. A cached endpoint sidesteps both, because the sheet is read once per cache window regardless of traffic.

### Do I still need a Google Cloud project?

No. PasteSheet reads a shared sheet through its link, so there is no Cloud project, OAuth consent screen, or service account — and nothing to redeploy when the data changes.

## Sources

- [Quotas for Google Services (Apps Script)](https://developers.google.com/apps-script/guides/services/quotas) — Google
- [Usage limits — Google Sheets API](https://developers.google.com/workspace/sheets/api/limits) — Google
- [Web Apps — Apps Script](https://developers.google.com/apps-script/guides/web) — Google

## Related guides

- [Google Sheets API Without an API Key](https://pastesheet.com/guides/google-sheets-api-without-api-key) — Read a Google Sheet as JSON with no API key, no OAuth client, and no service account. What is possible keyless, and where the trade-offs actually are.
- [How to Cache a Google Sheets JSON API](https://pastesheet.com/guides/google-sheets-json-cache) — Should you cache a Google Sheets JSON API? How edge caching keeps reads fast, avoids Google's rate limits, and serves your app from a CDN-like layer.
- [SheetDB Alternative: REST API + Free MCP](https://pastesheet.com/guides/sheetdb-alternative) — SheetDB turns a Google Sheet into a REST API. PasteSheet does that too — plus a read-only MCP server for AI agents, with MCP included on the free plan.
- [Turn Google Sheets Into a REST API (No Code)](https://pastesheet.com/guides/google-sheets-rest-api) — Turn a public or restricted Google Sheet into a live JSON REST API with filtering, sorting, and pagination — no backend, no code.

---

[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/guides/apps-script-alternative>
