SheetLink Forms beta

Framer forms to Excel

Set your Framer Form component's destination to a webhook and every submission is inserted as a live row in an Excel table on OneDrive. No code, no Zapier, no CSV.

Framer's Form component collects submissions beautifully and then hands you an email notification, which is not a place you can sort, filter, or share with a client. For teams that live in Microsoft 365, the working system is an Excel workbook - and until now the only bridges from Framer to Excel were per-task automation tools like Zapier or Power Automate, both of which meter every submission.

SheetLink Forms closes that gap directly. It is a hosted endpoint with a native Framer webhook and a native Excel Online destination - something no other hosted form backend (Formspree, Basin, Formcarry) offers. You set the Form component's submission destination to a webhook URL, Framer's server calls it on every submission, and an asynchronous worker inserts the row into your chosen Excel table via a Microsoft Graph table-row insert. The row lives in the real workbook on OneDrive from the moment it is written, visible immediately in Excel on the web and the desktop app. Deliveries retry automatically at 5 minutes, 30 minutes, and 2 hours if OneDrive hiccups, and a delivery log tracks every submission.

Spam follows one rule here: suspicious submissions are quarantined for one-click review, never silently dropped. Google Sheets is also available as a destination if part of your team prefers it. The full pipeline is on how it works, and the live demo shows a real form feeding a public sheet.

The best path for Framer

The best path for Framer is the native webhook. Every Framer Form component lets you choose where submissions go: select the form, open its submission settings, choose Webhook as the destination, and paste your SheetLink Forms URL. Framer's server sends the webhook, so nothing is embedded on the page, your design is untouched, and it works wherever the site is published.

The destination is set per Form component, which means different forms can feed different workbooks - one token per form, each with its own Excel table, strictness dial, and delivery log. Payload details and mapping rules are in the developer docs.

https://sheetlinkforms.com/w/framer/YOUR_TOKEN

1. Connect a Microsoft account and choose your table

Create a form in the SheetLink Forms dashboard and connect Excel Online: an OAuth flow links a Microsoft 365 account or a personal Microsoft account with OneDrive. Pick the workbook, then pick the Excel table inside it. The table's columns define the row shape - SheetLink Forms syncs column names from the table, so make sure the table exists with the columns you want before testing. This differs from the Google Sheets destination, where an empty sheet gets its header row seeded; on Excel, the table is the source of truth. Google Sheets is selectable as an alternative destination on the same screen.

2. Copy your Framer webhook URL

Grab the Framer-specific webhook URL from the form's setup panel: https://sheetlinkforms.com/w/framer/YOUR_TOKEN. The /w/framer/ path is built to parse the payload Framer's webhook destination sends - it is not the same as the generic /f/ endpoint that plain HTML forms post to.

3. Set the Form component's destination to Webhook

  1. Select the Form component on your canvas.
  2. Open the form's submission settings in the properties panel.
  3. Choose Webhook as the destination.
  4. Paste your SheetLink Forms URL.

Repeat for each form if you have several - since each Form component carries its own destination, a contact form and a waitlist form can feed separate Excel tables in separate workbooks.

4. Name inputs after your table columns

Each input's name becomes a field in the row, and matching against the Excel table's columns is name-based and forgiving about case and punctuation: Email, email, and E-mail all land in an Email column. When a Framer field name and a column name genuinely cannot line up, define an explicit per-field mapping in the dashboard.

5. Publish and watch the row appear

Publish the site and submit the form once, then open the workbook in Excel on the web or the desktop app - the row is inserted into the live file, so it should be sitting in the table within seconds while Framer shows its normal success state. Check the delivery log in the dashboard to confirm, and glance at the quarantine view: anything the heuristics flagged waits there for one-click approval instead of vanishing. Values starting with =, +, -, or @ are escaped before they reach a cell, so a hostile submission cannot plant a live formula in your workbook.

FAQ

What kind of Microsoft account does this need?

A Microsoft 365 account or a personal Microsoft account with OneDrive - anything that can own a workbook on OneDrive. You connect it once via OAuth in the dashboard, pick the workbook and table, and every Framer submission from then on is inserted as a table row through Microsoft Graph.

Can Power BI read these rows?

Yes, and this is one of the quiet payoffs of writing to a real workbook instead of exporting CSVs: Power BI connects to the OneDrive workbook directly, so your Framer leads can drive a live dashboard with zero extra plumbing. Rows arrive via Graph, the workbook updates, Power BI refreshes - that is the whole pipeline.

Is this free to use with Framer?

Yes - SheetLink Forms is free during the beta, invite required via the waitlist. There are no per-submission or per-task fees, ever, unlike the Zapier or Power Automate route where each Framer submission burns a metered task. Planned post-beta pricing (planned, not final): a free tier around 50 submissions a month, paid around $15-19/mo, unmetered.

Does this change how my Framer form looks or behaves?

No. The webhook is purely a destination. Design, validation, and the success state stay exactly as you built them in Framer - the only new behavior is that each submission also becomes a row in your Excel table.

What if a submission has a field my table has no column for?

The table's columns define the row shape, so map the fields you care about to the columns you have - name-based matching handles most of it automatically, and explicit per-field mapping in the dashboard covers the rest. If you want to start capturing a new field, add the column to the Excel table; SheetLink Forms syncs column names from the table.

What happens to spam submissions?

Webhook submissions pass through content heuristics (link stuffing, disposable email domains, empty payloads) plus per-form and per-IP rate limits, with a strictness dial per form. Suspicious ones are quarantined for one-click review - approve and the row is inserted. Nothing is silently dropped.

Can I capture UTM parameters and ad click IDs from Framer?

The webhook path records the form's fields as Framer sends them. Automatic capture of utm_* plus gclid, wbraid, gbraid, fbclid, and msclkid - persisted across pages - belongs to the sl.js embed used with plain HTML forms. If ad attribution is central, use an embedded HTML form posting to your /f/ endpoint with sl.js loaded; both paths are in the docs.

Also on: Framer · Webflow · React · Carrd

Request an invite See the live demo