Squarespace forms to Excel
A plain HTML form in a code block, posting to a permanent endpoint. Rows are inserted live into an Excel table on OneDrive, with attribution captured and spam quarantined.
Squarespace's form block has no idea Excel exists. Its storage options revolve around notifications and a handful of basic connections, so the moment your working system is a Microsoft 365 workbook - the one your team filters, assigns, and reports from - you are exporting CSVs by hand or paying Zapier or Power Automate to meter every submission as a task.
SheetLink Forms takes the direct route: a plain HTML form on your Squarespace page posting to a permanent hosted endpoint, with a native Excel Online destination no other hosted form backend offers. An asynchronous worker inserts each submission into your chosen Excel table via Microsoft Graph - a live row in the real workbook on OneDrive, visible in Excel on the web and the desktop app seconds later, and readable by Power BI if you want a lead dashboard on top. Retries run at 5 minutes, 30 minutes, and 2 hours, a delivery log records every attempt, and a formula-injection guard escapes leading =, +, -, and @ in cell values.
With the sl.js embed on the page, the form submits inline via AJAX and every row can carry utm_source/medium/campaign/term/content plus gclid, wbraid, gbraid, fbclid, and msclkid, persisted across pages - so the lead that browsed three pages before converting still lands attributed. Google Sheets is available as an alternative destination. See how it works or try the live demo.
The best path for Squarespace
The best path for Squarespace is a plain HTML form in a code block, with its action pointing at your /f/ endpoint. To be plain about the requirement: this needs a Squarespace plan tier that allows code - code blocks with scripts and code injection are a premium feature (Business and Commerce plans on legacy billing, Core and up on current plans). On plans without code, there is no clean way in.
Place the form with a code block where you want it, and load sl.js - ideally site-wide via Settings -> Advanced -> Code Injection (footer), so attribution parameters are captured on whichever page a visitor lands on and persist until the form is submitted. Endpoint behavior is documented in the docs.
1. Connect Excel Online in the SheetLink Forms dashboard
Create a form and connect a Microsoft account via OAuth - Microsoft 365 or a personal Microsoft account with OneDrive both work. Choose the workbook and the Excel table inside it that should receive rows. The table's columns define the row shape and SheetLink Forms syncs the column names from the table, so build the table with your columns first (select the headers in Excel and press Ctrl+T). Unlike the Google Sheets destination, there is no automatic header seeding on Excel - and Google Sheets remains available on the same screen if some forms should go there instead.
2. Add a code block with your form
- Edit the page and add a Code block where the form should sit.
- Paste the HTML form, keeping the hidden
_slhphoneypot input - it is the primary bot trap. - Set the
actionto your endpoint:https://sheetlinkforms.com/f/YOUR_TOKEN.
Name your inputs after your table's columns; matching is case- and punctuation-insensitive (Email, email, and E-mail all match), and explicit per-field mapping is available in the dashboard when names cannot line up.
3. Load sl.js via code injection
Go to Settings -> Advanced -> Code Injection and add the sl.js script tag to the footer. Site-wide injection is what makes attribution work: the script captures UTM parameters and ad click IDs from the URL on any page and persists them in localStorage, so a visitor who lands on a campaign page and converts on your contact page still arrives attributed - give your Excel table columns for those values and they fill in automatically. The script also auto-binds any form whose action points at /f/, upgrades it to AJAX submit with inline success text, injects the honeypot if missing, and adds a timing signal that helps separate humans from bots.
4. Style the form to match your site
A code block form does not inherit the form block's styling, so add a few CSS rules - in the same code block or via Squarespace's custom CSS panel - for spacing, input borders, and the button. Leave the honeypot's inline style untouched; it is what keeps the field invisible to humans while bots fill it in.
5. Save, test, and open the workbook
Save the page and submit a test. With sl.js present the form submits in place and shows success text; without it, the browser follows a 303 redirect to a hosted thank-you page or your custom redirect URL. Then open the workbook in Excel on the web or the desktop app - the row was inserted into the live table, so it is already there. Confirm it in the delivery log too, and check quarantine: anything flagged by the heuristics waits for one-click approval rather than being dropped.
FAQ
Which Squarespace plan do I need?
One that allows code on pages. Code blocks with scripts and code injection are gated to Business and Commerce plans on legacy billing, and to Core and up on current plans. If your plan cannot add code, it cannot host the form.
How do the rows actually get into Excel?
Through a Microsoft Graph table-row insert against your workbook on OneDrive. There is no CSV export, no import step, no sync delay - the row exists in the real file as soon as delivery completes, and it shows up immediately whether you have the workbook open in Excel on the web or the desktop app. Power BI can connect to the same workbook, which turns a Squarespace contact form into a live lead dashboard with no extra tooling.
Do I have to set up the Excel table myself?
Yes, once. The table's columns define the row shape - SheetLink Forms syncs column names from the table rather than inventing headers, so create the table with the columns you want before the first test submission. That is the one asymmetry with the Google Sheets destination, where empty sheets get a header row seeded automatically. After the table exists, field-to-column matching is automatic and name-based, with explicit mapping in the dashboard for anything that does not line up.
Squarespace can already connect forms to storage - why this?
The native form block covers basic collection, and it has no Excel Online destination at all. SheetLink Forms adds the things the block cannot do: live rows in a OneDrive workbook, your own column layout with explicit field mapping, automatic gclid/fbclid/UTM attribution on every row, a quarantine-based spam model where nothing is silently dropped, and a delivery log with automatic retries. If the native block already does everything you need, keep it.
Is it free?
Free during the beta, invite required - the waitlist is on the homepage. No per-submission or per-task fees, ever - unlike the Power Automate or Zapier route to Excel, where each submission is a metered task. Planned post-beta pricing (planned, not final): a free tier around 50 submissions a month and a paid plan around $15-19/mo, unmetered.
What stops spam bots from filling my workbook?
Layers: the _slhp honeypot (the only check that marks spam outright), a timing signal from sl.js, per-form and per-IP rate limits, a per-form origin allowlist, and content heuristics for link stuffing, disposable email domains, and empty payloads - with a strictness dial per form and optional Cloudflare Turnstile. Suspicious submissions are quarantined for one-click review, never silently dropped.
Also on: Squarespace · Wix · Webflow · Plain HTML