=== SheetLink Forms === Contributors: sheetlink Tags: google sheets, forms, contact form 7, gravity forms, spreadsheet Requires at least: 5.8 Tested up to: 6.9 Requires PHP: 7.4 Stable tag: 1.7.0 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html Send WordPress form submissions directly to Google Sheets via a free Google Apps Script receiver. Works on any site without registration. == Description == SheetLink Forms connects your WordPress forms directly to Google Sheets using a free Google Apps Script receiver. No middleware required — form data goes straight from your server to the Google Apps Script you deploy, over HTTPS. The plugin is local-first. The only feature that contacts an external service is the optional Lead Scoring add-on on the Analytics page, which is disabled by default, requires a SheetLink API token, and requires an explicit consent checkbox before any data is transmitted. See the "External services" section below for full disclosure. Works on any WordPress site without registration or account creation. = Supported Form Plugins = * Elementor Pro Forms * Contact Form 7 * Gravity Forms * WPForms * Fluent Forms * Formidable Forms * Ninja Forms * Forminator * Everest Forms * Beaver Builder * Divi * WS Form = How It Works = 1. Install SheetLink Forms 2. Create a sync rule — pick your form plugin, map fields to spreadsheet columns 3. Copy the generated Google Apps Script into your Google Sheet 4. Deploy the script as a web app 5. Every form submission automatically appears in your Google Sheet = Features = * **All 12 form integrations** — works with every major WordPress form builder * **Unlimited sync rules** — different forms to different sheets * **Field mapping** — choose exactly which fields go to which columns * **Smart mapping suggestions** — local heuristic that proposes Google Sheets column headers from your form field names (no external calls) * **Auto-timestamps** — optional timestamp column on every submission * **Delivery logs** — see every submission with status and error details * **Automatic retry queue** — failed deliveries are retried up to 3 times * **UTM & marketing data capture** — auto-append IP, page URL, UTM parameters * **Conditional routing** — route submissions to different sheets or tabs based on field values * **Advanced routing (v1.7)** — multi-destination fan-out with priority order and optional fallback webhooks * **Local analytics (v1.7)** — submissions-per-day, peak hours, top forms, duplicate detection, week-over-week trend; stored in your own WordPress database * **Branded reports (v1.7)** — generate client-facing HTML reports from your own submission data * **Role-based admin view (v1.7)** — show or hide plugin sections based on WordPress role * **White-label admin (v1.7)** — replace the plugin menu label and logo for agency installs * **Extra integrations (v1.7)** — JetFormBuilder, Bricks, MetForm, Kali, HappyForms support in addition to the core 12 * **Agency dashboard (v1.7)** — multisite summary across all network sites * **Test button** — send sample data to verify your setup * **Script generator** — generates the Google Apps Script for you, just copy & paste * **GDPR data export and deletion** — integrates with WordPress privacy tools * **Multisite central management** — network admin overview of all subsites * **Local-first by default** — every feature above runs locally on your WordPress server. Only Google Apps Script (always) and the optional lead-scoring API (off by default, requires token + explicit consent) reach external services. == External services == This plugin contacts the following external services. One (Google Apps Script) is core to the plugin's function. One (SheetLink Lead Scoring API) is an optional add-on that is disabled by default and requires an explicit consent checkbox before any data is transmitted. = Google Apps Script = * **What it is:** A user-deployed Google Apps Script web app that receives form data and writes it to your Google Sheet. * **What data is sent:** The form field values mapped by the user, plus optional enrichment data (timestamps, UTM parameters, IP address, page URL) if enabled by the site administrator. * **When it is called:** Each time a WordPress form submission matches a sync rule. * **Where data goes:** User-deployed Google Apps Script web app URLs hosted at `https://script.google.com/` or `https://script.googleusercontent.com/`. The plugin validates that all receiver URLs begin with these prefixes. * **No account required:** The plugin does not use Google API keys or OAuth. Users deploy a free Google Apps Script receiver in their own Google Sheet. * **Google Apps Script documentation:** [https://developers.google.com/apps-script](https://developers.google.com/apps-script) * **Google Terms of Service:** [https://policies.google.com/terms](https://policies.google.com/terms) * **Google Privacy Policy:** [https://policies.google.com/privacy](https://policies.google.com/privacy) = SheetLink Lead Scoring API (optional, off by default) = * **What it is:** A hosted lead-scoring service provided by SheetLink. It returns a 0–100 score for each submission. * **When it is called:** Only when the Analytics feature is enabled, an API token is configured on the Analytics settings page, AND the administrator ticks the "I understand form submission data will be transmitted..." consent checkbox. If any one of these is missing, no data is sent. * **What data is sent:** The submitted form field values, the form identifier, the source form plugin name, and the site URL (`home_url()`). No WordPress user account data, admin passwords, or database records unrelated to the submission are sent. * **Where data goes:** `https://siteanswerai.com/api/sheetlinkwp/lead-score` over HTTPS, authenticated with a Bearer token provided by SheetLink. * **Opt-in and opt-out:** The feature is off by default. Removing the token, unchecking the consent box, or disabling the Analytics feature immediately stops all requests. * **Privacy considerations:** If your forms collect personal data, you should list `siteanswerai.com` as a data processor in your own privacy notice before enabling this feature. * **Terms of Service:** [https://sheetlinkwp.com/terms](https://sheetlinkwp.com/terms) * **Privacy Policy:** [https://sheetlinkwp.com/privacy](https://sheetlinkwp.com/privacy) No other external services are contacted by this plugin. All other features — smart mapping suggestions, local analytics charts, duplicate detection, conditional and advanced routing, branded reports, role-based views, white-label, and the agency dashboard — run entirely on your own WordPress server. == Installation == 1. Upload the `sheetlink-forms` folder to `/wp-content/plugins/` 2. Activate the plugin through the Plugins menu 3. Go to **SheetLink** in the admin menu 4. Click **+ Add Rule** to create your first sync rule == Frequently Asked Questions == = Do I need to create an account or register? = No. SheetLink Forms works immediately after installation. No account, no registration, no license key required. = Do I need a Zapier account? = No. SheetLink Forms sends data directly from WordPress to Google Sheets via a free Google Apps Script. No third-party services needed. = Does the plugin call home or track anything? = No telemetry, no analytics beacons, no activation pings. The plugin does not call our servers unless you explicitly enable and configure the optional Lead Scoring add-on on the Analytics page (disabled by default, requires an API token and an explicit consent checkbox). Every other feature runs locally on your WordPress server. Form submissions themselves are sent only to the Google Apps Script URL you configure in each sync rule. See "External services" above for the full disclosure. = Which form plugins are supported? = Elementor Pro Forms, Contact Form 7, Gravity Forms, WPForms, Fluent Forms, Formidable Forms, Ninja Forms, Forminator, Everest Forms, Beaver Builder, Divi, and WS Form. = How do I set up the Google Sheet? = SheetLink Forms generates the Google Apps Script for you. Click "Get Script" on any rule, copy the code, and paste it into your Google Sheet's Apps Script editor (Extensions > Apps Script). Then deploy it as a web app. = Can I send different forms to different sheets? = Yes. Create multiple sync rules, each pointing to a different Google Apps Script URL (i.e., a different Google Sheet). = Is my data secure? = Form submission data is sent directly from your WordPress server to the Google Apps Script URL you configure, over HTTPS. The plugin only allows `script.google.com` and `script.googleusercontent.com` URLs as receiver destinations. If — and only if — you enable the optional Lead Scoring add-on on the Analytics page, a copy of each submission is also sent over HTTPS to `https://siteanswerai.com/api/sheetlinkwp/lead-score`. Every other feature of the plugin runs locally on your WordPress server. = What happens if the Google Sheet is unavailable? = The submission is logged as failed and automatically retried up to 3 times (every 15 minutes). You can also retry manually from the Retry Queue page. == Screenshots == 1. Main settings page with sync rules 2. Rule editor with field mapping 3. Generated Google Apps Script 4. Delivery log showing submission history == Changelog == = 1.7.0 = * New: Guided Setup Wizard — first-run wizard that walks you from activation to a working Google Sheet connection in three minutes. Generates the Apps Script, sends a test payload, and saves your first sync rule. * New: Smart Mapping suggestions — local heuristic proposes Google Sheets column headers from your form field names. No external calls. * New: Advanced Routing — multi-destination fan-out with priority order and optional fallback webhooks. * New: Local Analytics dashboard — submissions-per-day, peak hours, top forms, duplicate detection, week-over-week trend. All data stays in your own WordPress database. * New: Branded Reports — generate client-facing HTML reports from your own submission data. * New: Role-Based Admin View — show or hide plugin sections based on WordPress role (decorative UI gating; WordPress capability checks remain authoritative). * New: White-Label Admin — replace the plugin menu label and logo for agency installs. * New: Extra Integrations — JetFormBuilder, Bricks, MetForm, Kali, and HappyForms support. * New: Agency Dashboard — multisite summary across all network sites. * New: Features Hub — single control panel to toggle the above features on or off. * New: Optional Lead Scoring add-on under Analytics. Disabled by default. Requires a SheetLink API token **and** an explicit consent checkbox before any form data is sent to `https://siteanswerai.com/api/sheetlinkwp/lead-score`. Fully disclosed in the External Services section. * Fix: plugin initialisation moved from `plugins_loaded` to `init` to resolve the "translation loading triggered too early" notice introduced in WordPress 6.7. * Fix: `uninstall.php` now removes the analytics table and every v1.7 feature flag / config option when the plugin is deleted. = 1.6.3 = * Tested up to WordPress 6.8 (corrected from incorrect 6.9 tag) = 1.6.2 = * Removed client-side routing rules cap in admin JavaScript (completing the server-side fix in 1.6.1) = 1.6.1 = * Removed artificial cap on conditional routing rules (was limited to 10, now unlimited) = 1.6.0 = * All 12 form integrations now included and fully functional (added Forminator, Everest, Beaver Builder, Divi, WS Form) * Removed all premium feature gating — every feature in the plugin works without restrictions * Fixed text domain to match plugin slug (sheetlink-forms) * Replaced all inline JavaScript with properly enqueued scripts * Fixed output escaping in admin UI and sync rule templates * Updated External Services documentation with complete disclosure * Renamed main plugin file to sheetlink-forms.php per WordPress.org naming convention * Retry queue now processes for all users (previously required license activation) = 1.5.1 = * WP.org compliance: replaced all inline JS/CSS with wp_enqueue_script and wp_add_inline_style * WP.org compliance: added External Services disclosure for Google Apps Script integration * WP.org compliance: consistent "SheetLink Forms" branding across all headers and readme = 1.5.0 = * WooCommerce bidirectional sync module * AI Analytics with trend analysis and duplicate detection * CRM Fan-Out connectors (HubSpot, Salesforce, Zoho) * GDPR data export and deletion tools * Multisite central management * GCLID/fbclid/msclkid click ID enrichment * Two-Way Sync echo suppression to prevent update loops = 1.4.0 = * Admin UI modernization with design tokens and CSS custom properties * New component library: stat cards, badges, toggles, empty states * Consistent card, table, and badge styling across all pages = 1.3.0 = * Free Single-Site Edition — all core features work without registration * Added edition detection (Free / Agency) * Removed license activation requirement for core delivery * Renamed webhook labels to Receiver URL for clarity * Updated admin UI with edition badge and upgrade page * WP.org compliance: zero external calls in free edition = 1.2.0 = * Two-Way Sync admin UI with dedicated page and activity log * White-label support for entitlement-based plans * Multi-Node Fan-out Routing = 1.0.0 = * Initial release * Support for 7 form plugins * Field mapping with column assignment * Google Apps Script generator * Sync log with last 100 entries * Test webhook button == Upgrade Notice == = 1.7.0 = New optional features: smart mapping, advanced routing, local analytics, branded reports, role-based view, white-label, agency dashboard, and extra integrations. All are local-only except the optional Lead Scoring add-on, which is off by default and requires an explicit consent checkbox. = 1.6.3 = Corrected "Tested up to" to WordPress 6.8. = 1.6.2 = Removed remaining client-side routing rules cap. All features fully unrestricted. = 1.6.1 = Removed artificial cap on conditional routing rules. All features fully functional without restrictions.