PasteSheet icon PasteSheet logo mark — a spreadsheet grid with a curly brace on a green rounded square PasteSheet

Render live Google Sheet data in Framer

Framer ships real React under the hood, so a code component can fetch and render anything. Point one at a PasteSheet endpoint and your Google Sheet becomes a live data source — typed JSON, cached at the edge, refreshed the moment someone edits a cell.

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
  • A code component can render up to 500 rows on Free and 5,000 on Starter ($9/mo); Pro ($19/mo) removes the row cap.
  • The published site is as fresh as the cache: a fixed 5 minutes on Free, or a custom 30 seconds to 1 hour on paid plans — no re-publish from the Framer editor either way.
  • The endpoint is read-only by design, so the URL is safe to ship in a public Framer site: the component fetches rows and can never write one back.

Why a code component beats a static design

Framer is fast for layout, but the content you paste into a frame is frozen at design time. The moment your data changes — a new listing, an updated price, a fresh roster — you are back in the editor nudging text. That does not scale for anything that updates on its own schedule.

Because Framer code components are just React, they can fetch data at runtime and render it live. PasteSheet gives that component a clean, cached JSON endpoint over any Google Sheet, so a non-technical teammate edits a spreadsheet and your published site reflects it — no plugin, no backend to stand up.

Good fits for a live component

Anything a spreadsheet models cleanly and that changes after you ship:

Fetch the API in a code component

Add a code component and fetch your endpoint in an effect. The rows come back typed, so numbers and dates are ready to render — filter and sort in the URL:

Listings.tsx
import { useEffect, useState } from "react"

export function Listings() {
    const [rows, setRows] = useState([])

    useEffect(() => {
        fetch("https://pastesheet.com/your-endpoint/Listings?sort=-date")
            .then((r) => r.json())
            .then(({ data }) => setRows(data))
    }, [])

    return (
        <ul>
            {rows.map((row) => (
                <li key={row.slug}>{row.title}</li>
            ))}
        </ul>
    )
}

Read-only, so it is safe to ship

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

Free

For side projects and trying things out.

$0 /mo
Endpoints
3
Requests / mo
2,000
Row cap
500
  • Type-mapped columns
  • Custom cache TTL
  • Private endpoints & keys

Start free. The Free plan runs 3 live endpoints with a 5-minute cache — plenty for a Framer component or two. Upgrade for private endpoints, a custom cache TTL, and full-text search when you grow.

Frequently asked questions

Do I need a Framer plugin?

No. A Framer code component is plain React, so it fetches the PasteSheet endpoint over HTTPS at runtime. There is nothing to install — you paste the component code and point it at your URL.

Does the data update after I publish?

Yes. The component fetches live JSON on load, so editing the Google Sheet updates the published site after the cache refreshes — no re-publish and no touching the Framer editor.

How fresh is the data?

Responses are cached for speed — 5 minutes on Free, a custom 30s–1hr TTL on paid plans. A manual refresh in PasteSheet pushes changes through immediately.

Can the component write back to my sheet?

No. PasteSheet is read-only by design — the endpoint only serves data, with no write path — so it is safe to expose in a public Framer site.

Sources

Related use cases

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.