SheetLink Forms vs Formspark
Formspark stands out for two things: pay-once submission bundles instead of subscriptions, and Botpoison, its invisible anti-spam layer. SheetLink Forms differs on the destination - rows written straight into the spreadsheet you already work in - and on not counting submissions at all.
SheetLink Forms
SheetLink Forms is a hosted form endpoint whose destination is a spreadsheet. Each form gets a permanent URL at sheetlinkforms.com/f/your-token that accepts plain HTML posts, JSON, and platform webhooks (email-in is currently in setup), and accepted submissions append as rows under the header of a Google Sheet you pick (one-click OAuth with the limited drive.file scope - only the sheets you select, never the rest of Drive) or an Excel Online table. Delivery goes straight to the Google Sheets API or Microsoft Graph with retries at 5, 30, and 120 minutes, a per-submission delivery log, and a formula-injection guard. Screening quarantines suspicious submissions for one-click review instead of dropping them, and the optional sl.js embed attaches UTMs and ad click IDs to every row. Free during beta (invite required), with no per-submission fees, ever. Start with how it works or the live demo.
Formspark
Formspark is a developer-focused form backend with a pricing model almost nobody else uses: you buy submissions once instead of renting them monthly. Per their pricing page, the free tier includes 250 submissions and 10 forms with unlimited team members, and the paid upgrade is a one-time purchase - 50,000 submissions for $25 (listed at 50% off $50) - with bundles that "do not expire, you can spend the submissions at your pace across as many forms as you want". The feature set covers custom email notifications, an autoresponder, submission exports, webhooks, and team workspaces. Spam protection is unusually deep: Botpoison (their invisible anti-spam solution), reCAPTCHA, hCaptcha, Turnstile, custom spam words, and a honeypot, per their spam protection docs. It is a well-documented, well-liked product.
Side by side
| SheetLink Forms | Formspark | |
|---|---|---|
| Spreadsheet delivery | The primary destination: rows append directly into your chosen Google Sheet or Excel Online table via the official APIs, headers seed on empty sheets, and field names map to columns automatically (case and punctuation insensitive). | Not native: "Formspark does not connect to Google Sheets directly", per their Google Sheets docs, which recommend a Zapier or Make bridge, or a webhook into a Google Apps Script you deploy yourself. No Excel Online destination is documented. |
| Spam handling | Layered and reviewable: honeypot, per-form and per-IP rate limits, origin allowlist and CORS, content heuristics with a loose/normal/strict dial, timing signal, optional Cloudflare Turnstile. Suspicious submissions are quarantined for one-click review - never silently dropped. | A genuinely strong menu: Botpoison, described as "an invisible, user-friendly anti-spam solution", plus reCAPTCHA, hCaptcha, Turnstile, custom spam words, and a honeypot, per their docs. Botpoison's invisible challenge is a real differentiator and worth respecting. |
| Ad attribution and click IDs | The sl.js embed captures utm_* plus the ad click IDs - gclid, wbraid, gbraid, fbclid, msclkid - by default, persists them in localStorage across pages, and writes them onto the lead's row. | Formspark has a real answer here: the Formtrack script auto-injects utm_source through utm_content plus ref and referrer into submissions, per their UTM docs. Click IDs are not in the supported list, though custom parameters can be configured via data-formtrack-params. |
| Pricing model | Free during beta (invite required). No per-submission fees, ever - the planned post-beta paid plan (~$15-19/month) is unmetered, with a planned free tier around 50 submissions/month. | Pay once: 250 free submissions, then a one-time $25 bundle of 50,000 that never expires, per their pricing page. No subscription is a genuine virtue - though every submission still draws down a metered balance. |
| File uploads | Not supported yet - multipart posts are accepted but file parts are dropped. Text fields become cells; attachments do not. | Link-based rather than native: "Formspark stores a link to your uploaded file, not the file itself" - you upload to a provider like Uploadcare or S3 and Formspark records the URL, per their file upload docs. A documented pattern, but the storage is yours to arrange. |
| Platform webhooks | Dedicated inbound endpoints for Webflow (/w/webflow/token) and Framer (/w/framer/token) - one webhook covers every form on a Webflow site, with the form name recorded per row. | Outbound webhooks plus a catalog of integrations - Airtable, Notion, Slack, Make, Zapier - documented at documentation.formspark.io. Inbound, anything that can POST to a URL works. |
| Email notifications | None currently - rows land in your sheet and quarantined items wait in the dashboard. If you want an email per submission, this row goes to Formspark. | Formspark wins here. Custom email notifications and an autoresponder are listed features on their pricing page. |
| Delivery and reliability | Asynchronous worker writing straight to the Sheets API / Microsoft Graph; retries at 5 min / 30 min / 2 h; per-submission delivery log; formula-injection guard escaping leading = + - @ in cell values. | Submissions live in the Formspark dashboard with exports and webhook fan-out; spreadsheet delivery, when you want it, runs through the Zapier/Make/Apps Script bridges above. |
Choose Formspark when...
Pick Formspark if the pay-once model fits how you think about tools - a $25 bundle of 50,000 submissions can last a low-volume site for years, with no subscription ticking in the background. Pick it for Botpoison's invisible spam challenge, for email notifications and an autoresponder out of the box, or for its Formtrack UTM capture, which is more attribution than most backends offer. It is a thoughtful product and the pricing model deserves the fans it has.
Choose SheetLink Forms when...
Pick SheetLink Forms if you want the submission to end as a row in the sheet or Excel table you already work in, with no Zapier or Apps Script bridge to build and maintain. The embed captures actual ad click IDs (gclid, fbclid, msclkid and the consent-mode variants), not just UTMs, and screening quarantines rather than filters - a false positive costs seconds, not a lead. And where Formspark meters a prepaid balance, we simply do not count: no per-submission fees, ever. See the live demo or join the waitlist.
FAQ
Can I migrate from Formspark to SheetLink Forms?
Yes, and it is usually a one-line change. Point your form at your SheetLink endpoint:
<form action="https://sheetlinkforms.com/f/your-token" method="POST"> <input name="_slhp" tabindex="-1" autocomplete="off" style="position:absolute;left:-9999px"></form>
Keep your existing inputs exactly as they are. Field names that match your sheet's column headers map automatically - the matching is case and punctuation insensitive, so "Email", "email", and "E-mail" all land in the same column - and explicit per-field mapping is available for anything that does not line up. If you submit with fetch or XHR, change the URL in your request the same way. Full request and response details are in the developer docs.
Isn't pay-once better than a subscription?
For many sites, honestly, yes - Formspark's non-expiring bundles are a clean deal, and if a contact form gets five submissions a day, 50,000 submissions is a long runway. The distinction we would draw is that a bundle is still a meter: a bot burst or a traffic spike draws it down, and you top it up again. SheetLink's planned paid plan is a flat monthly price with no submission counting at all, and during beta the product is free with an invite. Different shapes; pick the one that matches your volume curve.
Do you have an equivalent to Botpoison?
Not a proof-of-work challenge under our own brand, no. Our invisible layer is a stack of signals instead: honeypot, per-form and per-IP rate limits, origin allowlist, content heuristics with a strictness dial, and the timing signal from the embed script, with Cloudflare Turnstile available when you want an explicit challenge. The bigger philosophical difference is what happens on a maybe: Formspark's filters decide, while SheetLink quarantines the submission for one-click review, so a wrong guess never silently costs a lead. Details in the docs.
Formspark captures UTMs too - what is actually different?
Two things. Scope: Formtrack's supported list is utm_* plus ref and referrer, per their docs, while sl.js also captures the ad click IDs - gclid, wbraid, gbraid, fbclid, msclkid - by default, which is what you need to tie a lead back to a specific paid click. Destination: SheetLink writes those values onto the row in your sheet, next to the lead they belong to, rather than into a dashboard record.
Comparison facts reference Formspark's public documentation and pricing pages and were checked at publish time; tell us if something is out of date.