SheetLink Forms to Google Sheets – CF7, WPForms, Elementor, Gravity Forms (Free Zapier Alternative)
Changelog
1.9.1
New: Bulk Site Management – Network Template (Agency / Enterprise / Agency Bundle / Plus). New Network Template admin page lets the license owner snapshot one site’s rules and settings, publish it as the canonical fleet template via the customer portal, and pull-and-apply it on every other licensed site. Webhook URLs and per-site secrets are deliberately excluded from the template – each site keeps its own destination credentials. Settings are merged; rules are replaced wholesale with local URLs preserved by rule ID.
New: Backend infrastructure for the AI Analytics weekly email digest, delivery failure alerts, and Fan-Out bundle analytics dashboard. Sites with the corresponding entitlement begin receiving emails on the next cron tick (Mondays 09:00 UTC for digests, every 30 minutes for alerts).
New: Backend cross-site fleet view at /api/sheetlinkwp/portal/fleet returns the activation roster + 7-day delivery health for fleet-wide reporting.
Security: SSRF allowlist on the CRM Fan-Out backend – Slack webhooks must end in hooks.slack.com; Salesforce instance URLs must end in salesforce.com / force.com / salesforce.mil; ActiveCampaign API URLs are restricted to *.api-{us1,us2,au,eu}.com. Two-Way Sync inbound relay validates the activation domain before forwarding.
Security: Zod input validation on the CRM Fan-Out and Two-Way Sync inbound endpoints; malformed requests now return 400 with a precise error message instead of being silently ignored.
Security: Per-IP rate limit (30 requests/minute) and constant-time secret comparison on the SheetLinkWP admin and scoring-worker endpoints.
No plugin-side breaking changes. No schema migration on the plugin database (the new fleet-template fields live on the SheetLinkWP backend, not in the WordPress site).
1.9.0
New: Two-Way Sync echo suppression. When the plugin writes to a Google Sheet that also has the Two-Way Sync onEdit Apps Script wired up, the resulting onEdit echo is now suppressed via a 60-second fingerprint cache. Listeners of sheetlinkwp_sheet_update no longer receive the plugin’s own writes bouncing back. Eliminates the most common loop-risk scenario on the Two-Way Sync add-on.
New: GDPR consent audit log. Per-submission audit trail of every consent-style field a user ticks. New wp_sheetlink_consent_log table captures consent field name, submitted value, form source + ID, anonymized IP, User-Agent, and timestamp. Heuristically detects fields by name (consent / gdpr / privacy / terms / opt-in / accept / agree / newsletter). Surfaced in the WP privacy export and erasure flows so DSAR responses include the consent record alongside the submission data.
New: Mailchimp support in CRM Fan-Out. Add a Mailchimp audience as a fanout destination with a single API key + audience ID. Subscriber status configurable (pending / subscribed / transactional). Default is “pending” for double opt-in – GDPR-friendly out of the box.
New: ActiveCampaign support in CRM Fan-Out. Add an ActiveCampaign account as a fanout destination with API URL + API key. Optional automatic subscription to a numeric list ID. Uses the contact/sync endpoint so duplicate emails update the existing contact rather than failing.
Schema: new wp_sheetlink_consent_log table is created on activation and via dbDelta on plugin upgrade. Existing installs auto-migrate on first admin page load.
Marketing: brings shipped behavior in line with claims in the comparison table on the pricing page (echo suppression, consent logging) and on destination pages (Mailchimp, ActiveCampaign).
1.8.4
Fix: Integrations Bundle alt-destinations (Airtable, Notion) now actually fire when configured. Previous releases registered the listener but the sync engine never dispatched the corresponding action – paid alt-destinations were silently inactive. New filterable action sheetlink_deliver_submission is dispatched once per rule per submission so add-ons can fan-out alongside the primary Google Sheets delivery.
Change: Data Enrichment (UTM source/medium/campaign, GCLID, fbclid, msclkid, page URL, submitter IP) now defaults to ON for new installs. Existing sites that previously toggled the option keep their saved preference. The capture is non-blocking and only runs on front-end form submissions.
New: Delivery logs now include the request payload sent and the response body received (each truncated to 4KB). Failed deliveries previously surfaced only the HTTP code and an error message; admins can now see exactly what was sent and what came back without external tools.
New: Real exponential-backoff retry schedule (5 minutes, 30 minutes, 2 hours) replaces the previous fixed 15-minute interval. Failed deliveries land in the retry queue with a next_retry_at timestamp; the cron handler picks up only rows that are due. Retries now spread over a longer window so customers do not accumulate retry traffic during sustained Google-side outages.
New: Retry queue table gains response_body and next_retry_at columns. Existing installs auto-migrate via dbDelta on first admin page load after upgrade – no manual intervention required.
Developer: Added do_action( ‘sheetlink_deliver_submission’, $rule, $payload, $source ) in the sync-engine dispatch path. Listeners receive each rule that matched a submission, the assembled payload (post-enrichment), and the source plugin key. Fires regardless of Sheets primary delivery success so alt destinations are not gated by Google availability.
Developer: SheetLink_Logger::log() and SheetLink_Retry_Queue::enqueue() accept an optional payload / response-body parameter respectively; both are stored truncated to 4KB. Backward compatible – existing call sites keep working without the new parameter.
1.8.3
New: Customer portal card on the License admin screen. Shows account email, two-factor auth status, IP lock mode, and webhook / email notification state. Direct link to sign in to sheetlinkwp.com/account/ via magic link – no WordPress login required to manage billing, cancel subscriptions, or change security settings.
New: Agency Overview banner linking to the portal’s cross-site Agency tab. The portal tab rolls up every activated client site across every license on your account with 7-day submission volume, delivery health, and per-site deactivate / reactivate controls.
New: entitlements response includes a portal object with security state (totpEnabled, ipLockMode, notifyOnChange, hasWebhook) so the plugin can surface the current setup without a separate API call. Data is cached alongside entitlements (12-hour TTL, auto-refresh).
Plugin header + Description updated to accurately reflect the 12 core form plugins plus the 5 available through the Integrations Bundle add-on.
1.8.2
New: product_created and product_updated event types in WooCommerce Sync. Push product catalogue changes (price, SKU, stock, status) to Google Sheets alongside the existing order and customer events. Enables inventory monitoring, price-change auditing, and catalogue exports.
1.8.1
New: Pipedrive destination in CRM Fan-Out. Adds Persons, Leads, or Deals via API token and company domain, alongside existing HubSpot, Salesforce, and Zoho handlers.
1.8.0
New: CRM Fan-Out admin page (SheetLink → CRM Fan-Out). Adds HubSpot, Salesforce, and Zoho as destinations for every form submission. Credentials stay on your site and are relayed to the CRM API through SheetLink’s backend; SheetLink does not retain them. Requires an active CRM Fan-Out add-on.
New: Two-Way Sync admin page (SheetLink → Two-Way Sync). Install a small Apps Script snippet (generated for you) into your Google Sheet and every cell edit flows back to WordPress via a secured REST endpoint. Other plugins can react by listening on the sheetlinkwp_sheet_update action. Requires an active Two-Way Sync add-on.
New: WooCommerce Sync admin page (SheetLink → WooCommerce Sync). Push orders (created, completed, refunded) and customers to one or more Google Sheets with a per-event field map. Delivery is non-blocking – checkout is never slowed down. Requires an active WooCommerce Sync add-on.
New: three matching cards in the Features Hub with lock icons and upgrade links when no license is active.
Fix: activation of CRM Fan-Out uses the same fanoutMaxDest entitlement as Advanced Routing; the pricing distinction is retained for marketing but both unlock the same delivery pathway.
1.7.2
New: optional license-activation step in the Setup Wizard. Paste your license key during first-run to unlock premium features immediately. Skip it to finish setup with free-tier features only.
New: distinguished activation error types. Network / server-reachability failures, bad keys, site-limit exhaustion, and server errors now surface specific messages instead of a generic “activation failed”.
New: post-purchase email with your license key and activation instructions, sent automatically on successful Stripe checkout. Lost keys are still retrievable from the customer portal.
1.7.1
Align feature availability with the pricing page. Advanced Routing, Extra Integrations, White-Label, Branded Reports, Agency Dashboard, and Role-Based Menu Visibility now require an active SheetLink license – see sheetlinkwp.com/pricing for tiers. The core WP-to-Sheets delivery, retry queue, delivery logs, UTM capture, conditional routing, GDPR tools, local analytics, smart mapping, and the guided setup wizard remain free.
New: SheetLink → License admin page for license-key activation. License keys are delivered in your post-purchase email; the customer portal on sheetlinkwp.com can recover a lost key.
New: Features Hub shows lock icons + “Upgrade to unlock” links on premium features when no license is active.
New: Backend license system – paste a license key once, the plugin caches your entitlements locally for 12 hours and re-checks automatically.
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