=== Leadcatch Form Abandonment Tracker ===
Contributors: shopifywpplugins
Tags: forms, abandoned form, form abandonment, lead recovery, analytics
Requires at least: 5.8
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.18.1
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

A WordPress form plugin for form tracking and form analytics. See where visitors give up on your forms, recover abandoned leads, and track failed submissions.

== Description ==

LeadCatch Form Abandonment Tracker is a form tracking system that shows you what happens between a visitor starting a form and finishing it, so you can recover the leads you would otherwise lose.

### Form analytics and form tracking

Use form analytics to track forms across your site. You can track form submissions, see starts, submissions, abandonment and recovery rates, and compare them with the previous period. This is form submission tracking and form conversion tracking in one place, with a form conversion rate and a form abandonment rate for every form.

### Recover leads you would otherwise lose

When a visitor starts a form but leaves without submitting, LeadCatch captures the name, email and phone they already typed, with the visitor's consent, so you can follow up instead of losing the lead completely. This lets you recover abandoned forms, using the values saved before the visitor left.

### Draft recovery

Visitors who lose a tab or crash their browser get their answers back instead of starting over.

### See why forms fail

* **Abandonment detection:** know which forms visitors start but never submit, and where they drop off. This is form abandonment tracking for every form on your site.
* **Failed submission tracking:** see validation errors and failed sends, and how often they repeat.
* **Field analytics:** see which fields people reach, and how long they spend on each one. Use this for form conversion optimization: shorten or fix the fields where visitors hesitate or give up.

### Dashboard, reports and export

* Dashboard and reports for starts, submissions, abandonment and recovery rates, with comparison to the previous period.
* Filterable entries list with search, status filter and bulk actions.
* **CSV export** and a read-only **REST API** for administrators, so you can send entries to your CRM or reporting tools.

### Works with your forms

This WordPress form tracking plugin works with Contact Form 7, WPForms, Gravity Forms, Fluent Forms, Elementor Pro Forms, Ninja Forms, Formidable Forms, Bricks Forms, the Jetpack Contact Form block, and any standard HTML form. No setup per form is needed. Integrations are detected automatically.

It gives you Gravity Forms partial entries and Gravity Forms analytics, WPForms form abandonment and WPForms analytics, Contact Form 7 tracking, Elementor form tracking and Ninja Forms analytics, all from the same dashboard.

### Privacy first

* A consent notice is shown before any typed value is saved. You can require it everywhere, nowhere, or per page.
* Passwords, card numbers, CVV, one-time codes, national ID numbers and similar fields are always excluded and cannot be switched on.
* Stored field values are encrypted at rest.
* IP address and country storage can each be turned off.
* Data is deleted automatically after the retention period you choose (90 days by default).
* The free plugin does not contact any external service. All data stays in your own WordPress database.

An optional separate add-on, LeadCatch Form Abandonment Tracker Pro, adds Session Replay, Google Analytics 4 events and multi-channel notifications (Email, Slack, Discord, Microsoft Teams, Telegram). The free plugin is fully functional on its own and contains none of the Pro code.


== Installation ==

1. Upload the `leadcatch-form-abandonment-tracker` folder to `/wp-content/plugins/`, or install it from the Plugins screen.
2. Activate the plugin.
3. Open **Leadcatch > Settings** and review the consent and privacy options.
4. Visit a page with a form and start typing. Entries appear under **Leadcatch > Entries**.

== Frequently Asked Questions ==

= Is it GDPR friendly? =

It is built to help. Consent is required before values are stored by default, sensitive fields are always excluded, values are encrypted, and old data is deleted automatically. You remain responsible for your own privacy policy and legal basis. Suggested privacy policy text is added to **Settings > Privacy**, and entries are included in **Tools > Export Personal Data** and **Erase Personal Data** (matched by the email address typed into the form).

= Does it send my visitors' data to another website? =

No. The free plugin does not contact any external service. All data stays in your own database.

= What is form abandonment tracking? =

Form abandonment tracking means recording which forms visitors start but never submit. LeadCatch tracks every form start, shows which form was abandoned, which fields were reached, and how long visitors spent, so you can see where people give up.

= How do I track form submissions and measure my form conversion rate? =

Install the plugin, activate it, and visit a page with a form. LeadCatch records starts and submissions automatically, then shows your form conversion rate and form abandonment rate on the Dashboard, with comparison to the previous period. You can also export entries to CSV or use the read-only REST API.

= What is my form abandonment rate and how can I lower it? =

Your form abandonment rate is the share of started forms that were never submitted. LeadCatch shows this rate per form and per field. To lower it, look at the field analytics: shorten long forms, fix fields with long hesitation times, and fix repeated validation errors. That is the fastest form conversion optimization you can do with real data.

= Does it track Gravity Forms partial entries? =

Yes. LeadCatch gives you Gravity Forms partial entries and Gravity Forms analytics, including the Gravity Forms partial entries add-on use case. It records Gravity Forms starts, submissions, abandonments and failed submissions, and shows which fields visitors reached before they left.

= Does it work with WPForms form abandonment? =

Yes. LeadCatch gives you WPForms form abandonment tracking and WPForms analytics. It records WPForms starts, submissions, abandonments and failed submissions, with field analytics for every WPForms form.

= Does it work with Contact Form 7 tracking? =

Yes. LeadCatch gives you Contact Form 7 tracking. It records Contact Form 7 starts, submissions, abandonments and failed submissions, and works with any standard HTML form as well.

= Does it work with Elementor form tracking and Ninja Forms analytics? =

Yes. LeadCatch gives you Elementor form tracking and Ninja Forms analytics. It records Elementor Pro Forms and Ninja Forms starts, submissions, abandonments and failed submissions, with the same dashboard and field analytics.

= How to track form submissions in Google Analytics 4? =

Use the optional Pro add-on. It sends form start, abandon, submit, recovery and error events to Google Analytics 4, so you can track form submissions in Google Analytics 4 next to your other reports. This covers Contact Form 7 Google Analytics tracking, and the same events for WPForms, Gravity Forms and Elementor forms. The free plugin does not send data to Google Analytics. To track form submissions in Google Analytics without Pro, use the LeadCatch Dashboard, CSV export or REST API instead.


= How do I recover abandoned forms? =

LeadCatch saves the values a visitor typed before leaving a form without submitting, with consent, so you can follow up with the lead. For Gravity Forms, this is Gravity Forms partial entries. The visitor can also resume the form later with draft recovery.


= How do I track form submissions in Google Tag Manager? =

LeadCatch Pro sends form start, abandon, submit, recovery and error events to Google Analytics 4. If you load Google Analytics 4 through Google Tag Manager, those events appear in Google Analytics 4, and you can use them there for form tracking in Google Tag Manager reports. The free plugin records the same form submissions on its own Dashboard, with CSV export and a read-only REST API.

= How do I create a form submission event in GA4? =

You do not need to create it by hand. LeadCatch Pro sends a form submit event to Google Analytics 4 automatically, along with form start, abandon, recovery and error events. Turn on the Google Analytics 4 option in the Pro add-on, and the form submission event in GA4 appears with your other events.

= What are my form abandonment statistics? =

Your form abandonment statistics are on the LeadCatch Dashboard: starts, submissions, abandonment rate, recovery rate, average completion time and conversion rate per form, with comparison to the previous period. The Analytics screen adds campaign attribution and a field-by-field funnel, so you can see where visitors drop off.

= How can I reduce form abandonment? =

Reduce form abandonment by fixing the fields where visitors leave. LeadCatch shows which fields people reach and how long they spend on each one, so you can shorten long forms, remove or simplify the slowest fields, and fix repeated validation errors. This is the fastest way to improve your form abandonment rate with real data.

= Does LeadCatch send form abandonment emails? =

The optional Pro add-on sends email alerts for abandoned forms, and can also notify you by Slack, Discord, Microsoft Teams or Telegram. The free plugin does not send form abandonment emails by itself. It records the abandoned entries, so you can follow up with the lead from the Entries list.

= How do I track UTM parameters in Elementor forms? =

LeadCatch stores the campaign parameters from the page address with each entry, and the Analytics screen shows campaign attribution. So when a visitor arrives on an Elementor form with UTM parameters in the link, you can see which campaign the form start, submission or abandonment came from.


== Screenshots ==

1. Dashboard - starts, submissions, abandonment and recovery rate, with the forms overview chart and outcomes.
2. Dashboard - consent decisions, top landing pages and top forms, recent activity and performance summary.
3. Analytics - campaign attribution, field-by-field funnel and field friction.
4. Entries - form entries list with lead, status, progress, device and page.
5. Settings - General - tracking, autosave, inactivity timeout, retention and enabled integrations.
6. Settings - Privacy & Consent - consent banner, encryption, IP and country storage, and sensitive field exclusions.
7. Notifications (Pro) - email alerts and instant notifications by Email, Slack, Discord, Microsoft Teams and Telegram.
8. Google Analytics 4 (Pro) - send form start, abandon, submit and error events to GA4.
9. Session Intelligence (Pro) - session recording, mouse movement, typed text in replays, sample rate and rage click threshold.


== Third party libraries ==

* [Chart.js](https://www.chartjs.org/) 4.6.1, MIT License. Bundled unmodified as `assets/js/vendor/chart.umd.min.js` and used only on admin screens. Source: https://github.com/chartjs/Chart.js/tree/v4.6.1

== External services ==

This plugin does not connect to any external service, does not send any data to any server, and does not load remote scripts, fonts or images. The locked Notifications preview screen (Email, Slack, Discord, Microsoft Teams, Telegram) is static: it has no working form and makes no requests to those services. The "Get Pro" and "Visit our website" links point to https://shopifywpplugins.online/ and only open when you click them.

== Privacy ==

When a visitor types in a tracked form, and has consented where consent is required, the plugin stores: the field values they typed (encrypted, excluding sensitive fields), an identifier in a first-party cookie (`ldct_session_id`, one day), the page address, referrer and campaign parameters, device type and browser, and optionally their IP address and country. The consent choice is stored in the visitor's browser (localStorage) for 180 days. An anonymous count of accept and decline clicks is kept without any visitor identifier. See the plugin's Settings page to control each item.

== Changelog ==

= 1.18.1 (2026-11-11) =
* Renamed to "Leadcatch Form Abandonment Tracker" and moved every function, class, option, table, hook, REST namespace and script handle to the distinctive `ldct_` prefix.
* Updated bundled Chart.js to 4.6.1.
* Removed directory assets from the plugin package and URL-style placeholders from the locked previews.

= 1.18.0 (2026-11-05) =
* New: Notifications, Google Analytics and Session Replay now appear as locked previews with "Get Pro" and website links. They unlock automatically when the Pro add-on is licensed.
* New: Pro Features overview page.
* The Session Intelligence settings are locked until Pro is active, and saving Settings no longer resets them.
* The "Get Pro" boxes are hidden once Pro is active.

= 1.17.0 (2026-11-05) =
* Security: rate limiting and size limits on the public tracking endpoints.
* Security: session identifiers are now generated with the browser's secure random source and validated on the server.
* Security: stored values are now encrypted with authenticated encryption. Existing data is still readable.
* Security: visitor IP is taken only from the server connection unless you opt in to a proxy header.
* Security: CSV export neutralizes spreadsheet formulas; capability checks run before nonce checks.
* Security: stricter validation of filters, sort order, URLs and field values.
* Removed the file integrity self-lock so the plugin can be freely modified, as the GPL allows.
* Complete uninstall cleanup, including multisite.
* Readme, privacy and third-party library documentation for the WordPress.org directory.

= 1.16.0 =
* Previous release.

== Upgrade Notice ==

= 1.18.1 =
Renamed plugin with a new `ldct_` prefix for all stored data and hooks. Settings and data from earlier test builds are not carried over. If you use the Pro add-on, update it to match.

= 1.18.0 =
Adds locked Pro previews. If you use the Pro add-on, update it to 1.0.2 too.

= 1.17.0 =
Security hardening release. Behind a CDN or proxy, add the `ldct_trusted_ip_header` filter if you want visitor IP addresses stored.
