For a while I was setting up Zapier for every client who wanted their contact form submissions in a spreadsheet. It worked, but the per-task billing got annoying at scale, and explaining to clients why their "free" form integration had a monthly cost attached to it got old.
So I built SheetLink Forms. It hooks into your existing WordPress form plugin and delivers submissions straight to Google Sheets via a Google Apps Script webhook you deploy yourself. No middleware, no third-party service sitting in the middle, no per-submission fees.
It supports the main form plugins: Elementor Pro, Contact Form 7, Gravity Forms, WPForms, Fluent Forms, Ninja Forms, and a bunch of others. Fourteen total in the current version if you count the ones in the optional bundle.
A few things I'm genuinely happy with how they turned out:
- There's a retry queue built in. If Google Sheets is momentarily unreachable, the submission queues and retries automatically with exponential backoff. Before I built this I lost a few leads to transient failures and didn't know until a client asked why a row was missing.
- UTM parameters and ad click IDs (GCLID, fbclid, etc.) get appended to every row automatically. Useful if you're running paid campaigns and want to know which ad the lead came from without setting up any extra tracking.
- The most recent addition is a Google Ads offline conversion export if you close a deal that came through a form, you can fill in the conversion value in the sheet and export a CSV formatted exactly for Google Ads upload. No CRM required.
What it doesn't do: it's not a form builder, it doesn't store submissions in WordPress (that's your sheet's job), and it's not trying to replace Zapier for everything, just for this one workflow.
The core plugin is free on WordPress.org. There are paid tiers for things like retry logs, conditional routing, and multi-site support, and some add-ons for CRM fan-out and WooCommerce sync.
Happy to answer questions about how it works or the technical decisions behind it. Built it primarily for agency use so a lot of the edge cases (AJAX form submissions, cookie TTL for GCLID capture across async submissions, that kind of thing) came from real client situations.
Plugin page: wordpress.org/plugins/sheetlink-forms/