SheetLink Forms beta

Forms to a spreadsheet without Zapier (and why you might want that)

Every submission a Zap touches is a metered task. A direct pipeline writes the row itself - no middleman, no task budget.

What Zapier actually does in a form-to-sheet flow

The standard recipe has three parts: a form tool that collects the submission, Zapier (or Make, or n8n) listening for it, and a "create spreadsheet row" action at the end. Zapier's job in the middle is transport - it receives the payload, reshapes it, and calls the Google Sheets API on your behalf.

That works, and it is genuinely flexible. But for the narrow job of "form goes to spreadsheet," the middleman adds three costs: every submission consumes a metered task against your plan, the Zap is a second system that can be off, misconfigured, or rate-limited without your form knowing, and debugging means reading two dashboards to find one missing row.

The per-task pricing problem

Task-based pricing punishes exactly the outcome you want: more leads. A form that grows from 100 to 2,000 submissions a month does not get harder to deliver, but it can push you through plan tiers, and a viral day can burn a month's budget in an afternoon. Spam makes it worse - a bot flood consumes tasks whether or not the rows were worth having.

SheetLink Forms has no per-submission or per-task fees, ever. During beta the whole product is free (invite required - the waitlist is on the homepage), and planned post-beta pricing is a flat unmetered paid plan around $15-19/month with a free tier around 50 submissions monthly. Planned, so labeled as planned - but the no-metering rule is a commitment, not a plan.

The direct pipeline

The alternative is to remove the hop: give the form an endpoint whose job is writing spreadsheet rows. Each SheetLink form gets a permanent URL - https://sheetlinkforms.com/f/slf_yourtoken - and an asynchronous worker delivers accepted submissions straight to the Google Sheets API or Microsoft Graph. No Zapier, no middleman, no polling interval.

The pieces you would otherwise assemble by hand come built in:

  1. Retries: failed deliveries retry at 5 minutes, 30 minutes, and 2 hours.
  2. A delivery log: every attempt is visible in the dashboard, so "where did my row go" has a one-screen answer.
  3. Field mapping: field names matching column headers map automatically (case and punctuation insensitive), with explicit per-field mapping when they differ.
  4. Spam screening: suspicious submissions are quarantined for review, never silently dropped - a Zap has no equivalent, it forwards whatever arrives.
  5. A formula-injection guard that escapes leading =, +, -, and @ before values reach cells.

The full flow is diagrammed on how it works.

Working code

A plain HTML form is the whole integration:

<form action="https://sheetlinkforms.com/f/slf_yourtoken" method="POST">
  <input name="email" type="email" placeholder="Work email" required>
  <input name="company" placeholder="Company">
  <input name="_slhp" tabindex="-1" autocomplete="off" style="position:absolute;left:-9999px">
  <button type="submit">Get updates</button>
</form>

The _slhp input is the spam honeypot - keep it. Posting from code instead of a browser works the same way:

curl -X POST https://sheetlinkforms.com/f/slf_yourtoken \
  -d "email=ada@example.com" -d "company=Analytical Engines Ltd"

JSON is accepted too (Content-Type: application/json returns {"ok":true,"id":"..."} instead of a redirect). Webflow and Framer sites can skip the form markup entirely and point the platforms' native webhook settings at /w/webflow/slf_yourtoken or /w/framer/slf_yourtoken. Details for every path are in the docs.

When Zapier is still the right tool

Honesty clause: a direct pipeline replaces the transport step, not a workflow engine. Reach for Zapier or a peer when you need any of these:

  1. Fan-out: one submission must also create a CRM contact, post to Slack, and open a ticket.
  2. Mid-flight logic: branching, enrichment lookups, or delays between steps.
  3. A destination that is not a spreadsheet: the point of SheetLink Forms is that the sheet is the working system.

The two also compose: land rows in the sheet directly, and let a Zap watch the sheet for the downstream steps. The metered task then fires only for rows that survived spam screening, which is usually far fewer than raw submissions.

Migrating an existing form

  1. Create a form in the dashboard and connect your sheet (one-click Google OAuth, drive.file scope - only the sheets you pick) or an Excel table.
  2. If your columns already exist, name your fields to match the headers and skip mapping entirely.
  3. Swap the form's action (or your Zap-facing webhook URL) for the SheetLink endpoint.
  4. Send a test submission and confirm the row in the delivery log, or try the live demo first to see rows land in a public sheet.
  5. Turn off the old Zap once a few real submissions have flowed through.

Nothing about your page changes except one attribute value.

FAQ

Is this just a webhook that happens to write to Sheets?

It is a form endpoint with delivery, screening, and observability built in: automatic field-to-column mapping, spam quarantine, retries at 5 min / 30 min / 2 h, a delivery log, and a formula-injection guard. A bare webhook gives you transport; you would rebuild the rest yourself.

What happens to spam that would have burned Zapier tasks?

It never reaches your sheet uninvited. Honeypot hits are marked spam outright; everything else suspicious (rate-limit trips, content heuristics, timing anomalies) is quarantined for one-click review. Approving delivers the row, so a false positive costs seconds, not a lead.

Can I still trigger other automations from submissions?

Yes - point any watcher at the destination sheet itself. Google Sheets triggers in Zapier or Make fire on new rows, so downstream automation keeps working while transport stays direct and unmetered.

Does the free beta limit submissions?

The beta is free with an invite from the waitlist, and there are no per-submission fees. Requests are subject to sane per-form and per-IP rate limits and a 256 KB body cap - protections, not a meter.

I use WordPress - does this apply to me?

WordPress has its own tighter integration: the sibling plugin at sheetlinkwp.com connects WordPress forms to Sheets and Excel natively. SheetLink Forms is the hosted endpoint for everything else - static sites, site builders, and custom code.

Related guides: Send an HTML form to Google Sheets without a backend · Turn emails into Google Sheets rows · Form spam protection that does not eat real leads

Request an invite Developer docs