Power a Webflow site from a Google Sheet
Webflow CMS is great until you need data it does not model well — fast-changing listings, a table someone else owns, a feed you would rather edit in a spreadsheet. PasteSheet turns any Google Sheet into a live, cached JSON API you fetch from a Webflow embed, so the page renders straight from cells.
Last updated
Key facts
- A Webflow embed fetches client-side, so every page view is one request: Free allows 2,000 requests a month, Starter ($9/mo) 50,000, Pro ($19/mo) 300,000 and Agency ($49/mo) 1,000,000.
- 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.
-
The Google Sheets API allows 300 read requests per minute per project and 60 per minute per user. Past that it returns
429 RESOURCE_EXHAUSTED. source - The embed can render up to 500 rows on Free and 5,000 on Starter; Pro removes the row cap.
Where Webflow CMS runs out of room
Webflow CMS is perfect for the content you author inside Webflow, but it strains the moment the data lives elsewhere — a pricing grid finance owns, an inventory list that changes hourly, a directory a non-Webflow teammate maintains. Item limits, manual re-imports, and one-editor-at-a-time workflows start to hurt.
A Google Sheet sidesteps all of that: anyone can edit it, it updates instantly, and it is already where the data lives. PasteSheet puts a fast, cached JSON API in front of that sheet, so a small script in a Webflow Embed element fetches the rows and renders them into your page — no plugin, no Zapier sync into the CMS.
What to drive from the sheet
Anything that is really a table and changes more often than you want to re-import:
- Dynamic directories and job boards that update daily.
- Product catalogs, pricing tables, and listings.
- Team bios, testimonials, and event schedules.
- Any feed a non-technical teammate should own without a Webflow seat.
Fetch and render in a Webflow embed
Drop an Embed element where the list should render, then fetch your endpoint and build the markup. Filter, sort, and paginate with URL parameters — no query language:
<div id="listings"></div>
<script>
fetch("https://pastesheet.com/your-endpoint/Listings?status=live&sort=-date")
.then((r) => r.json())
.then(({ data }) => {
document.getElementById("listings").innerHTML = data
.map((row) => `<a class="card" href="${row.url}">${row.title}</a>`)
.join("");
});
</script>Setting it up end to end
From spreadsheet to rendered Webflow section:
- 1 Choose the source path. Share the sheet as Anyone with the link for a public source, or connect Google and choose the exact restricted sheet in Picker.
-
2
Paste the public URL, or finish the Picker flow. Tabs and columns are read immediately, and each column gets an inferred type and a clean alias — so a header like
Job Title (public)can be queried asjob_title. - 3 Copy the endpoint URL and test it in a browser tab. If you see JSON, Webflow will too.
- 4 In the Webflow Designer, drop an Embed element where the list belongs and paste the fetch script.
- 5 Style one card in Webflow, copy its class names into your template string, and publish.
Webflow CMS or a live sheet?
Use Webflow CMS when the content is marketing copy you author in Webflow, needs its own indexable URL per item, or has to be editable in the Designer. Blog posts and case studies belong there.
Use a live sheet when the data is genuinely tabular, changes faster than you want to re-import, or is owned by someone who should not need a Webflow seat. Inventory, pricing, schedules, and directories fit here.
One caveat worth stating plainly, because it decides the choice more often than any feature: an Embed renders client-side, so its rows are not part of the page HTML that search engines index first. For a listings section inside an already-indexed page, that is fine. If each row needs to rank as its own page, that is a CMS job, and no amount of fetching changes it.
Things that trip people up
- Testing on the Designer preview. Embed scripts do not execute in the Designer canvas — publish to a staging domain to see the list render.
- Header rows with formatting. Merged cells and a decorative title row above the headers confuse column detection. Keep row 1 as plain headers.
- Trailing blank rows. A sheet someone has scrolled through can carry hundreds of empty rows; filter them out or delete them so the count in your UI is honest.
-
Forgetting the tab name. Without one you get the first tab. Append
/TabNameto read a specific tab. - Rendering before styling. Style a single card in Webflow first, then copy its generated class names into the template string — reverse order means rewriting the script.
- Private endpoint keys. A client-side embed cannot safely hide a bearer key. Keep a private endpoint server-side, or use a public endpoint only when you intend the returned data to be public.
What about Gmail, Slack, and Webflow together?
People searching for Webflow plus Google Sheets plus Gmail or Slack are usually after an automation — a form submission that lands in a sheet and pings a channel. That is a different job, and Zapier or Make does it well; PasteSheet has no triggers and sends no notifications.
The two pair cleanly though: let an automation tool write rows into the sheet, and let PasteSheet read that same sheet into your Webflow page. See using a sheet API with Zapier and Make for where the line sits.
Safe to expose on a public page
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.
- Endpoints
- 3
- Requests / mo
- 2,000
- Row cap
- 500
- Type-mapped columns
- Custom cache TTL
- Full-text search
Start free. The Free plan runs 3 live endpoints with a 5-minute cache — enough to power a Webflow section or two. Upgrade for private endpoints, a custom cache TTL, and full-text search behind a search widget.
Frequently asked questions
Do I need a Webflow plugin or app?
No. You paste a small fetch script into a Webflow Embed element. PasteSheet serves the sheet as JSON over a normal HTTPS endpoint, so the browser reads it directly — nothing to install in Webflow.
Will this sync into Webflow CMS collections?
No. PasteSheet is a read data layer, not a two-way CMS sync. Your embed fetches the JSON at runtime and renders it client-side, so the sheet stays the single source of truth.
How fresh is the data on the page?
Responses are cached for speed — 5 minutes on Free, a custom 30s–1hr TTL on paid plans. Edit a cell and the page reflects it after the cache refreshes, or immediately after a manual refresh.
Can visitors change my sheet through the embed?
No. The endpoint is read-only by design — there is no write path — so it is safe to expose in a public Webflow page.
How do I connect Google Sheets to Webflow?
Use a public sheet URL, or connect Google and choose a restricted sheet in Picker. Then fetch the resulting JSON endpoint from a Webflow Embed element. Use a public endpoint for client-side data, or fetch a bearer-key-protected endpoint from your own server.
Is a Google Sheets Webflow integration good for SEO?
Rows fetched in an Embed render client-side, so they are not in the initial HTML that crawlers read first. That is fine for a listings section on a page that already ranks, but if each row needs its own indexable URL, use Webflow CMS instead.
Does this count against Webflow CMS item limits?
No. The data never enters Webflow CMS — it stays in the sheet and is fetched at runtime — so CMS item limits and collection caps do not apply.
Can I connect Google Sheets, Slack, and Webflow together?
Partly. PasteSheet reads a sheet into Webflow but has no triggers or notifications, so Slack and Gmail alerts need an automation tool like Zapier or Make writing into the same sheet. The two work well side by side.
Do visitors need to be signed in to Google?
No. PasteSheet reads the sheet server-side and serves plain JSON, so a visitor's browser never talks to Google and never needs an account.
Sources
- Usage limits — Google Sheets API — Google
Related use cases
Power a Framer Site With a Google Sheet
Render live data on a Framer site from a Google Sheet. PasteSheet serves cached JSON your code component fetches — no plugin, no backend, no Google Cloud.
Use Google Sheets as a Free Headless CMS
Run your website's content from a Google Sheet. PasteSheet publishes it as a live, read-only JSON API — no database, no backend, no Google Cloud setup.
Build a Directory Website From a Sheet
Turn a Google Sheet into a searchable directory. PasteSheet serves your listings as a filterable, read-only JSON API — no database, no admin panel, no code.
Serve a Product Catalog from Google Sheets
Power a product catalog from a Google Sheet. PasteSheet serves products, prices, and stock as a live, read-only JSON API — no backend, no Google Cloud 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.