{"id":358280,"date":"2026-08-31T20:41:17","date_gmt":"2026-08-31T20:41:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/formhawk\/"},"modified":"2026-09-07T16:43:38","modified_gmt":"2026-09-07T16:43:38","slug":"formhawk","status":"publish","type":"plugin","link":"https:\/\/szl.wordpress.org\/plugins\/formhawk\/","author":15334520,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.4.0","stable_tag":"0.4.0","tested":"7.1","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"Formhawk","header_author":"al5dy","header_description":"Privacy-first form conversion analytics and health monitoring for Contact Form 7 and standard HTML forms.","assets_banners_color":"647187","last_updated":"2026-09-07 16:43:38","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/formhawk\/","header_author_uri":"https:\/\/profiles.wordpress.org\/al5dy\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":95,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.1":{"tag":"0.1.1","author":"al5dy","date":"2026-08-31 20:40:55","revision":3674940},"0.4.0":{"tag":"0.4.0","author":"al5dy","date":"2026-09-07 16:43:38","revision":3685292}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3674948,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3674948,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3674948,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3674948,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.1","0.4.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"See every tracked form at a glance with conversion metrics and clear health status.","2":"Analyze views, starts, submissions, abandonment, conversion rates and health for an individual form.","3":"Find fields associated with abandonment and validation friction.","4":"Monitor WordPress email health and run a manual mail diagnostic test.","5":"Control analytics retention and whether data is removed when Formhawk is uninstalled."}},"plugin_section":[],"plugin_tags":[1152,161151,191189,41471,130711],"plugin_category":[42,54,55],"plugin_contributors":[154666],"plugin_business_model":[],"class_list":["post-358280","plugin","type-plugin","status-publish","hentry","plugin_tags-contact-form-7","plugin_tags-elementor-forms","plugin_tags-form-abandonment","plugin_tags-form-analytics","plugin_tags-wpforms","plugin_category-contact-forms","plugin_category-security-and-spam-protection","plugin_category-seo-and-marketing","plugin_contributors-al5dy","plugin_committers-al5dy"],"banners":{"banner":"https:\/\/ps.w.org\/formhawk\/assets\/banner-772x250.png?rev=3674948","banner_2x":"https:\/\/ps.w.org\/formhawk\/assets\/banner-1544x500.png?rev=3674948","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/formhawk\/assets\/icon-128x128.png?rev=3674948","icon_2x":"https:\/\/ps.w.org\/formhawk\/assets\/icon-256x256.png?rev=3674948","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<h4>Stop guessing what happens to your WordPress forms<\/h4>\n\n<p>A form can look perfectly fine while quietly losing leads.<\/p>\n\n<p>Visitors may:<\/p>\n\n<ul>\n<li>See the form but never start it.<\/li>\n<li>Start filling it out and abandon it.<\/li>\n<li>Get stuck on a specific field.<\/li>\n<li>Hit repeated validation errors.<\/li>\n<li>Submit the form while email sending fails.<\/li>\n<li>Stop converting as well as they did before.<\/li>\n<\/ul>\n\n<p><strong>Formhawk shows you what happens between a form view and a successful submission.<\/strong><\/p>\n\n<p>Track form conversions, discover where visitors abandon forms, find problematic fields, monitor Contact Form 7 failures, and see the health of every tracked form from your WordPress dashboard.<\/p>\n\n<p>No external analytics account. No tracking cookies. No visitor profiles.<\/p>\n\n<p>Just actionable form analytics stored inside WordPress.<\/p>\n\n<h4>See where your forms are losing conversions<\/h4>\n\n<p>Formhawk tracks separate aggregate signals:<\/p>\n\n<p><strong>Views \u2192 Starts \u2192 Browser submit attempts<\/strong>, plus provider-confirmed successes where available.<\/p>\n\n<p>For every tracked form you can see:<\/p>\n\n<ul>\n<li>Form views.<\/li>\n<li>Form starts.<\/li>\n<li>Browser submit attempts.<\/li>\n<li>Abandonments.<\/li>\n<li>Provider-confirmed successes and confirmed conversion where supported; otherwise N\/A.<\/li>\n<li>Abandonment rate.<\/li>\n<li>Browser validation friction and separate provider validation rejections.<\/li>\n<li>Submission failures.<\/li>\n<li>Average completion time.<\/li>\n<li>Last confirmed success.<\/li>\n<li>Last detected failure.<\/li>\n<li>Conversion changes compared with the previous comparable period.<\/li>\n<\/ul>\n\n<p>Instead of knowing only how many submissions you received, you can see <strong>where potential conversions are being lost.<\/strong><\/p>\n\n<h4>Find the fields that make visitors leave<\/h4>\n\n<p>A form may have traffic and still convert poorly because one field creates unnecessary friction.<\/p>\n\n<p>Formhawk tracks field-level interactions without reading the values visitors enter.<\/p>\n\n<p>See:<\/p>\n\n<ul>\n<li>Which field was interacted with last before abandonment.<\/li>\n<li>Which fields generate validation errors.<\/li>\n<li>How often individual fields create friction.<\/li>\n<\/ul>\n\n<p>This helps you identify fields that may be confusing, unnecessary, incorrectly configured, or hurting conversion.<\/p>\n\n<h4>Know when a form stops working<\/h4>\n\n<p>A broken form can cost leads without producing an obvious WordPress error.<\/p>\n\n<p>Formhawk continuously evaluates tracked forms and assigns a clear health state:<\/p>\n\n<ul>\n<li><strong>Collecting<\/strong> \u2014 not enough data yet.<\/li>\n<li><strong>Healthy<\/strong> \u2014 the form is receiving normal successful activity.<\/li>\n<li><strong>Warning<\/strong> \u2014 suspicious behavior has been detected.<\/li>\n<li><strong>Critical<\/strong> \u2014 a newer failure exists after the last confirmed success.<\/li>\n<\/ul>\n\n<p>Formhawk can also warn about situations such as:<\/p>\n\n<ul>\n<li>Visitors starting a form but no submissions being recorded.<\/li>\n<li>Forms being viewed but never started.<\/li>\n<li>Conversion dropping compared with the previous comparable period.<\/li>\n<li>Provider-confirmed outcomes and submit attempts that receive no matching success signal.<\/li>\n<li>WordPress mail failures.<\/li>\n<\/ul>\n\n<p>You do not need to manually test every form on your website just to know whether it still appears to be working.<\/p>\n\n<h4>First-class supported form providers<\/h4>\n\n<p>Formhawk automatically distinguishes these providers before the standard HTML fallback:<\/p>\n\n<ul>\n<li>Contact Form 7.<\/li>\n<li>WPForms Lite and WPForms Pro.<\/li>\n<li>Elementor Pro Forms.<\/li>\n<li>Standard HTML forms.<\/li>\n<\/ul>\n\n<p>Contact Form 7, WPForms and Elementor Pro Forms combine frontend behavior analytics with provider lifecycle hooks. A browser submit is an attempt; Formhawk records a confirmed successful submission only when the provider reaches its accepted\/success lifecycle.<\/p>\n\n<h4>Contact Form 7 analytics<\/h4>\n\n<p>Formhawk combines frontend behavior analytics with Contact Form 7 server-side hooks to track:<\/p>\n\n<ul>\n<li>Confirmed successful submissions.<\/li>\n<li>Mail sending failures.<\/li>\n<li>Validation failures.<\/li>\n<li>Validation errors by field.<\/li>\n<li>Aborted submissions.<\/li>\n<li>Form abandonment.<\/li>\n<li>Field-level friction.<\/li>\n<li>Conversion rates.<\/li>\n<li>Form health.<\/li>\n<\/ul>\n\n<p>This allows Formhawk to distinguish between a visitor merely attempting to submit a Contact Form 7 form and WordPress actually reporting a successful submission.<\/p>\n\n<h4>WPForms Lite and Pro analytics<\/h4>\n\n<p>Formhawk uses WPForms' successful processing lifecycle to confirm accepted submissions. This works when WPForms Lite supplies an entry ID of zero and does not require entry storage.<\/p>\n\n<p>WPForms analytics include:<\/p>\n\n<ul>\n<li>Stable WPForms form and field IDs.<\/li>\n<li>AJAX and non-AJAX submit attempts.<\/li>\n<li>Provider-confirmed successful processing.<\/li>\n<li>Validation failures and affected fields.<\/li>\n<li>Compound field normalization.<\/li>\n<li>Multiple and dynamically inserted forms.<\/li>\n<\/ul>\n\n<h4>Elementor Pro Forms analytics<\/h4>\n\n<p>Elementor Pro Forms are identified by their document context and stable form widget ID. Formhawk observes Elementor's validation and post-action record lifecycle without modifying the form record, AJAX response or Actions After Submit. A post-action record is confirmed only when Elementor's handler still reports a successful outcome.<\/p>\n\n<p>Elementor's <code>mail_sent<\/code> hook is treated as evidence about the Email action and becomes a separate mail-action success metric only after the overall action pipeline succeeds. It is not the universal definition of a successful form, because an Elementor form may use other actions or no Email action at all.<\/p>\n\n<h4>Works with standard HTML forms too<\/h4>\n\n<p>Formhawk also automatically discovers eligible standard HTML <code>&lt;form&gt;<\/code> elements.<\/p>\n\n<p>This includes forms that are:<\/p>\n\n<ul>\n<li>Present when the page loads.<\/li>\n<li>Added dynamically with JavaScript.<\/li>\n<li>Loaded through AJAX.<\/li>\n<li>Opened inside popups or modals.<\/li>\n<\/ul>\n\n<p>For generic HTML forms, Formhawk records the browser submission event as an observed submission attempt.<\/p>\n\n<p>Because arbitrary custom form handlers cannot universally be verified from the browser, Formhawk does not claim a server-confirmed success where one cannot actually be verified.<\/p>\n\n<h4>Zero complicated setup<\/h4>\n\n<p>Install Formhawk and activate it.<\/p>\n\n<p>That's it.<\/p>\n\n<p>There is:<\/p>\n\n<ul>\n<li>No tracking snippet to install.<\/li>\n<li>No external Formhawk account to create.<\/li>\n<li>No analytics service to connect.<\/li>\n<li>No JavaScript configuration.<\/li>\n<li>No cookie banner integration required specifically for Formhawk analytics.<\/li>\n<li>No form-by-form setup for supported forms.<\/li>\n<\/ul>\n\n<p>Formhawk automatically discovers supported frontend forms and starts collecting aggregate analytics when visitors interact with them.<\/p>\n\n<p>Open <strong>Formhawk<\/strong> in your WordPress dashboard to see the results.<\/p>\n\n<h4>Autopilot CRO \u2014 self-optimizing forms<\/h4>\n\n<p>Enable Autopilot once. Formhawk uses existing aggregate analytics to find a\nhigh-confidence opportunity, creates one reversible runtime variant, measures it,\nprotects the form with guardrails, promotes a credible winner and monitors it for\nregression before continuing.<\/p>\n\n<p>Autopilot is not a manual A\/B-test builder. Its standard loop is automatic:<\/p>\n\n<p><strong>Observe \u2192 find friction \u2192 create hypothesis \u2192 experiment \u2192 measure \u2192 protect \u2192 promote or reject \u2192 continue.<\/strong><\/p>\n\n<p>Safety remains the first constraint:<\/p>\n\n<ul>\n<li>The original CF7, WPForms or Elementor form definition is never rewritten.<\/li>\n<li>Required, conditional, legal, consent, payment, password, CAPTCHA, security and upload fields fail closed from structural experiments.<\/li>\n<li>Contact Form 7, WPForms and Elementor winners use provider-confirmed conversions.<\/li>\n<li>Generic HTML uses clearly labelled observed submit rate, not fake confirmation.<\/li>\n<li>Low-traffic experiments remain collecting; minimum sample, conversions and runtime all apply.<\/li>\n<li>Harmful variants return new traffic to control automatically.<\/li>\n<li>Promoted winners are monitored and can be rolled back automatically.<\/li>\n<li>Assignment exists only for the current page lifecycle, with no cookie or browser storage.<\/li>\n<\/ul>\n\n<p>Choose Observe, Approve or Full Autopilot mode. Approve is the safe default. The\nform detail screen explains the opportunity, live result, evidence, optimization\nhistory and compounded measured impact. Optional average lead value enables a\ntransparent additional-value estimate.<\/p>\n\n<h4>Privacy-first form analytics<\/h4>\n\n<p>Form analytics should not require building profiles of your visitors.<\/p>\n\n<p>Formhawk is intentionally designed without visitor-level analytics.<\/p>\n\n<p><strong>Formhawk does not intentionally store:<\/strong><\/p>\n\n<ul>\n<li>Form field values.<\/li>\n<li>Names entered into forms.<\/li>\n<li>Email addresses entered into forms.<\/li>\n<li>Phone numbers entered into forms.<\/li>\n<li>Message contents.<\/li>\n<li>IP addresses.<\/li>\n<li>Visitor IDs.<\/li>\n<li>Session IDs.<\/li>\n<li>User agents.<\/li>\n<li>Email recipients.<\/li>\n<li>Email subjects.<\/li>\n<li>Email message bodies.<\/li>\n<\/ul>\n\n<p>Formhawk also creates:<\/p>\n\n<ul>\n<li>No analytics cookies.<\/li>\n<li>No <code>localStorage<\/code> tracking.<\/li>\n<li>No <code>sessionStorage<\/code> tracking.<\/li>\n<li>No persistent browser identifier.<\/li>\n<\/ul>\n\n<p>Temporary per-form state exists only in JavaScript memory for the current page.<\/p>\n\n<p>Analytics are stored locally in your WordPress database as aggregate statistics.<\/p>\n\n<p><strong>No Formhawk analytics data is sent to an external Formhawk analytics service.<\/strong><\/p>\n\n<h4>Your analytics stay in WordPress<\/h4>\n\n<p>Formhawk stores daily aggregate analytics locally in WordPress.<\/p>\n\n<p>You control how long analytics are retained:<\/p>\n\n<ul>\n<li>30 days.<\/li>\n<li>90 days.<\/li>\n<li>180 days.<\/li>\n<li>365 days.<\/li>\n<\/ul>\n\n<p>Expired analytics are cleaned automatically.<\/p>\n\n<p>You can also choose whether Formhawk data should be completely removed when the plugin is uninstalled.<\/p>\n\n<h4>Monitor WordPress email health<\/h4>\n\n<p>Forms often depend on WordPress email.<\/p>\n\n<p>Formhawk monitors the WordPress <code>wp_mail_failed<\/code> and <code>wp_mail_succeeded<\/code> hooks without storing recipients or email contents.<\/p>\n\n<p>You can:<\/p>\n\n<ul>\n<li>See WordPress mail success and failure health signals.<\/li>\n<li>See recent mail failures.<\/li>\n<li>Run a manual <code>wp_mail()<\/code> diagnostic test.<\/li>\n<\/ul>\n\n<p>A successful <code>wp_mail()<\/code> event means WordPress\/PHPMailer accepted the message for sending without an immediate error.<\/p>\n\n<p>It does <strong>not<\/strong> guarantee that the message ultimately reached the recipient's inbox.<\/p>\n\n<h4>Designed for useful data, not visitor surveillance<\/h4>\n\n<p>Formhawk uses:<\/p>\n\n<ul>\n<li>Local daily aggregate storage.<\/li>\n<li>Batched frontend event delivery.<\/li>\n<li>A dependency-free frontend tracker.<\/li>\n<li>Same-origin REST event ingestion.<\/li>\n<li>A public, site-bound routing token. It is not authentication or a secret.<\/li>\n<li>Atomic site-wide request, event-cost and structural cardinality budgets without visitor identifiers.<\/li>\n<li><code>IntersectionObserver<\/code> for actual form-view detection.<\/li>\n<li><code>MutationObserver<\/code> for dynamically inserted forms.<\/li>\n<\/ul>\n\n<p>The goal is simple:<\/p>\n\n<p><strong>Show you whether your forms work and where they lose conversions \u2014 without collecting the contents of your visitors' submissions.<\/strong><\/p>\n\n<h4>What Formhawk tracks<\/h4>\n\n<p><strong>Form analytics<\/strong><\/p>\n\n<ul>\n<li>Views.<\/li>\n<li>Starts.<\/li>\n<li>Interactions.<\/li>\n<li>Submissions.<\/li>\n<li>Abandonments.<\/li>\n<li>Failures.<\/li>\n<li>Conversion rates.<\/li>\n<li>Abandonment rates.<\/li>\n<li>Average completion time.<\/li>\n<\/ul>\n\n<p><strong>Field analytics<\/strong><\/p>\n\n<ul>\n<li>Last interacted field before abandonment.<\/li>\n<li>Validation errors by field.<\/li>\n<li>Field interaction signals.<\/li>\n<\/ul>\n\n<p><strong>Form health<\/strong><\/p>\n\n<ul>\n<li>Collecting, Healthy, Warning and Critical states.<\/li>\n<li>Last confirmed success.<\/li>\n<li>Last failure.<\/li>\n<li>Conversion-drop detection.<\/li>\n<li>Started forms with no submissions.<\/li>\n<li>Viewed forms with no starts.<\/li>\n<\/ul>\n\n<p><strong>Contact Form 7<\/strong><\/p>\n\n<ul>\n<li>Confirmed submission success.<\/li>\n<li>Mail failures.<\/li>\n<li>Validation failures.<\/li>\n<li>Aborted submissions.<\/li>\n<li>Field validation errors.<\/li>\n<\/ul>\n\n<p><strong>WPForms Lite \/ Pro<\/strong><\/p>\n\n<ul>\n<li>Provider-confirmed successful processing.<\/li>\n<li>Validation failures and fields.<\/li>\n<li>Stable form and compound-field identity.<\/li>\n<li>Dynamic and multiple-form discovery.<\/li>\n<\/ul>\n\n<p><strong>Elementor Pro Forms<\/strong><\/p>\n\n<ul>\n<li>Provider-confirmed accepted records after form actions.<\/li>\n<li>Validation failures and fields.<\/li>\n<li>Separate Email-action success signals.<\/li>\n<li>Popup, dynamic and multi-step form discovery.<\/li>\n<\/ul>\n\n<p><strong>WordPress mail<\/strong><\/p>\n\n<ul>\n<li><code>wp_mail()<\/code> success signals.<\/li>\n<li><code>wp_mail()<\/code> failure signals.<\/li>\n<li>Manual mail diagnostic test.<\/li>\n<\/ul>\n\n<p><strong>Privacy<\/strong><\/p>\n\n<ul>\n<li>No analytics cookies.<\/li>\n<li>No persistent browser storage.<\/li>\n<li>No visitor IDs.<\/li>\n<li>No IP address storage.<\/li>\n<li>No user-agent storage.<\/li>\n<li>No submitted field values.<\/li>\n<li>No external Formhawk analytics service.<\/li>\n<\/ul>\n\n<h4>Developer controls<\/h4>\n\n<p>Individual forms can be excluded with:<\/p>\n\n<pre><code>data-formhawk-ignore\n<\/code><\/pre>\n\n<p>Generic forms can receive readable identifiers using:<\/p>\n\n<pre><code>data-formhawk-title\n<\/code><\/pre>\n\n<p>and:<\/p>\n\n<pre><code>data-formhawk-id\n<\/code><\/pre>\n\n<p>Tracking can be disabled programmatically with the:<\/p>\n\n<pre><code>formhawk_tracking_disabled\n<\/code><\/pre>\n\n<p>filter.<\/p>\n\n<p>Developers can integrate with recorded aggregate events using the:<\/p>\n\n<pre><code>formhawk_event_recorded\n<\/code><\/pre>\n\n<p>action.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install <strong>Formhawk<\/strong> from Plugins &gt; Add New, or upload the plugin ZIP.<\/li>\n<li>Activate Formhawk.<\/li>\n<li>Open <strong>Formhawk<\/strong> in your WordPress admin menu.<\/li>\n<li>Visit a frontend page containing Contact Form 7, WPForms, Elementor Pro Forms or a standard HTML form.<\/li>\n<li>Formhawk automatically starts collecting aggregate analytics as visitors use your forms.<\/li>\n<li>Return to <strong>Formhawk<\/strong> to review conversions, abandonment, field friction and form health.<\/li>\n<\/ol>\n\n<p><strong>No tracking snippet, external account or additional analytics configuration is required.<\/strong><\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20does%20formhawk%20do%3F\"><h3>What does Formhawk do?<\/h3><\/dt>\n<dd><p>Formhawk tracks how visitors interact with WordPress forms and helps identify conversion problems and form failures.<\/p>\n\n<p>It shows views, starts, browser submit attempts, provider-confirmed successes where available, abandonment, field friction and evidence-aware form health. Confirmed conversion excludes generic HTML forms. Browser validation is a friction count, not a failure rate; provider rejection share uses only observed provider rejections and accepted submissions as its denominator.<\/p><\/dd>\n<dt id=\"does%20formhawk%20work%20with%20contact%20form%207%3F\"><h3>Does Formhawk work with Contact Form 7?<\/h3><\/dt>\n<dd><p>Yes.<\/p>\n\n<p>Yes. Contact Form 7 includes server-confirmed success tracking, mail failures, validation failures and aborted submissions.<\/p><\/dd>\n<dt id=\"does%20formhawk%20work%20with%20wpforms%20lite%20and%20wpforms%20pro%3F\"><h3>Does Formhawk work with WPForms Lite and WPForms Pro?<\/h3><\/dt>\n<dd><p>Yes. WPForms forms are detected automatically and successful processing is confirmed server-side. WPForms Lite does not need to create a stored entry for Formhawk to confirm success.<\/p><\/dd>\n<dt id=\"does%20formhawk%20work%20with%20elementor%20forms%3F\"><h3>Does Formhawk work with Elementor forms?<\/h3><\/dt>\n<dd><p>Yes, when Elementor Pro Forms is active. Elementor Free alone does not include the Form widget, so the server integration remains safely inactive. Formhawk tracks Elementor popup and dynamically inserted forms from the frontend.<\/p><\/dd>\n<dt id=\"does%20formhawk%20work%20with%20normal%20html%20forms%3F\"><h3>Does Formhawk work with normal HTML forms?<\/h3><\/dt>\n<dd><p>Yes.<\/p>\n\n<p>Formhawk automatically detects eligible standard HTML <code>&lt;form&gt;<\/code> elements, including forms inserted dynamically after page load.<\/p>\n\n<p>Generic HTML form submissions are recorded as observed browser submission attempts because arbitrary custom server-side handlers cannot universally be verified.<\/p><\/dd>\n<dt id=\"can%20formhawk%20show%20where%20visitors%20abandon%20a%20form%3F\"><h3>Can Formhawk show where visitors abandon a form?<\/h3><\/dt>\n<dd><p>Yes.<\/p>\n\n<p>Formhawk tracks started forms that are left without completion and records the last interacted field before abandonment.<\/p>\n\n<p>It does this without storing the value entered into that field.<\/p><\/dd>\n<dt id=\"can%20formhawk%20show%20which%20fields%20have%20validation%20problems%3F\"><h3>Can Formhawk show which fields have validation problems?<\/h3><\/dt>\n<dd><p>Yes.<\/p>\n\n<p>For Contact Form 7, WPForms and Elementor Pro Forms, Formhawk records aggregate validation failure counts by field when the provider exposes stable error keys.<\/p><\/dd>\n<dt id=\"does%20formhawk%20store%20submitted%20form%20values%3F\"><h3>Does Formhawk store submitted form values?<\/h3><\/dt>\n<dd><p>No.<\/p>\n\n<p>The frontend tracker does not read or transmit visitor field values.<\/p>\n\n<p>Only static metadata required for aggregate reporting, such as field names and labels, is used.<\/p><\/dd>\n<dt id=\"does%20formhawk%20store%20names%20or%20email%20addresses%20entered%20by%20visitors%3F\"><h3>Does Formhawk store names or email addresses entered by visitors?<\/h3><\/dt>\n<dd><p>No.<\/p>\n\n<p>Formhawk does not intentionally store names, email addresses, phone numbers, message contents or other submitted field values.<\/p><\/dd>\n<dt id=\"does%20formhawk%20use%20cookies%3F\"><h3>Does Formhawk use cookies?<\/h3><\/dt>\n<dd><p>No.<\/p>\n\n<p>Formhawk creates no analytics cookies.<\/p><\/dd>\n<dt id=\"does%20formhawk%20use%20localstorage%20or%20sessionstorage%3F\"><h3>Does Formhawk use localStorage or sessionStorage?<\/h3><\/dt>\n<dd><p>No.<\/p>\n\n<p>Formhawk does not create analytics entries in <code>localStorage<\/code> or <code>sessionStorage<\/code>.<\/p><\/dd>\n<dt id=\"does%20formhawk%20store%20ip%20addresses%20or%20visitor%20ids%3F\"><h3>Does Formhawk store IP addresses or visitor IDs?<\/h3><\/dt>\n<dd><p>No.<\/p>\n\n<p>Formhawk does not intentionally store IP addresses, visitor IDs, session IDs or user agents for its analytics.<\/p><\/dd>\n<dt id=\"does%20formhawk%20send%20analytics%20to%20an%20external%20service%3F\"><h3>Does Formhawk send analytics to an external service?<\/h3><\/dt>\n<dd><p>No.<\/p>\n\n<p>Current Formhawk analytics are stored locally in your WordPress database.<\/p>\n\n<p>No external Formhawk analytics account is required.<\/p><\/dd>\n<dt id=\"do%20i%20need%20to%20add%20tracking%20code%20to%20my%20website%3F\"><h3>Do I need to add tracking code to my website?<\/h3><\/dt>\n<dd><p>No.<\/p>\n\n<p>Formhawk automatically discovers supported forms after activation.<\/p><\/dd>\n<dt id=\"does%20formhawk%20detect%20dynamically%20loaded%20forms%3F\"><h3>Does Formhawk detect dynamically loaded forms?<\/h3><\/dt>\n<dd><p>Yes.<\/p>\n\n<p>Formhawk can discover forms inserted after page load, including forms loaded with AJAX or displayed in popups.<\/p><\/dd>\n<dt id=\"can%20formhawk%20detect%20contact%20form%207%20mail%20failures%3F\"><h3>Can Formhawk detect Contact Form 7 mail failures?<\/h3><\/dt>\n<dd><p>Yes.<\/p>\n\n<p>Formhawk uses Contact Form 7 server-side hooks to record mail failures associated with Contact Form 7 submissions.<\/p><\/dd>\n<dt id=\"can%20formhawk%20monitor%20wp_mail%28%29%3F\"><h3>Can Formhawk monitor wp_mail()?<\/h3><\/dt>\n<dd><p>Yes.<\/p>\n\n<p>Formhawk monitors WordPress <code>wp_mail_failed<\/code> and <code>wp_mail_succeeded<\/code> events without storing the email recipient, subject or message body.<\/p>\n\n<p>It also includes a manual <code>wp_mail()<\/code> diagnostic test.<\/p><\/dd>\n<dt id=\"does%20wp_mail_succeeded%20mean%20the%20email%20reached%20the%20inbox%3F\"><h3>Does wp_mail_succeeded mean the email reached the inbox?<\/h3><\/dt>\n<dd><p>No.<\/p>\n\n<p>It means WordPress\/PHPMailer completed the send operation without reporting an immediate error.<\/p>\n\n<p>Final delivery can still fail later at another point in the email delivery chain.<\/p><\/dd>\n<dt id=\"can%20formhawk%20confirm%20every%20form%20submission%3F\"><h3>Can Formhawk confirm every form submission?<\/h3><\/dt>\n<dd><p>No plugin can universally verify every arbitrary custom server-side form handler from the browser.<\/p>\n\n<p>Contact Form 7, WPForms and Elementor Pro outcomes are confirmed through their server-side lifecycle hooks.<\/p>\n\n<p>Generic HTML forms are therefore recorded as observed browser submission attempts rather than falsely reported as confirmed successes.<\/p><\/dd>\n<dt id=\"how%20do%20i%20exclude%20a%20form%20from%20formhawk%3F\"><h3>How do I exclude a form from Formhawk?<\/h3><\/dt>\n<dd><p>Add <code>data-formhawk-ignore<\/code> to the <code>&lt;form&gt;<\/code> element:<\/p>\n\n<pre><code>&lt;form data-formhawk-ignore&gt;\n<\/code><\/pre><\/dd>\n<dt id=\"how%20do%20i%20give%20a%20generic%20form%20a%20readable%20name%3F\"><h3>How do I give a generic form a readable name?<\/h3><\/dt>\n<dd><p>Use <code>data-formhawk-title<\/code> and optionally <code>data-formhawk-id<\/code>:<\/p>\n\n<pre><code>&lt;form data-formhawk-title=\"Request a Quote\" data-formhawk-id=\"request-quote\"&gt;\n<\/code><\/pre><\/dd>\n<dt id=\"can%20developers%20disable%20tracking%20programmatically%3F\"><h3>Can developers disable tracking programmatically?<\/h3><\/dt>\n<dd><p>Yes.<\/p>\n\n<p>Return <code>true<\/code> from the <code>formhawk_tracking_disabled<\/code> filter.<\/p><\/dd>\n<dt id=\"is%20there%20a%20developer%20hook%20after%20an%20event%20is%20recorded%3F\"><h3>Is there a developer hook after an event is recorded?<\/h3><\/dt>\n<dd><p>Yes.<\/p>\n\n<p>The <code>formhawk_event_recorded<\/code> action fires after an aggregate event is recorded.<\/p><\/dd>\n<dt id=\"how%20long%20does%20formhawk%20keep%20analytics%3F\"><h3>How long does Formhawk keep analytics?<\/h3><\/dt>\n<dd><p>You can choose a retention period of:<\/p>\n\n<ul>\n<li>30 days.<\/li>\n<li>90 days.<\/li>\n<li>180 days.<\/li>\n<li>365 days.<\/li>\n<\/ul>\n\n<p>Expired daily aggregate analytics are cleaned automatically.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20the%20data%20when%20formhawk%20is%20uninstalled%3F\"><h3>What happens to the data when Formhawk is uninstalled?<\/h3><\/dt>\n<dd><p>Analytics can be preserved by default.<\/p>\n\n<p>Enable the uninstall cleanup setting if you want Formhawk data removed when the plugin is deleted.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Added Formhawk Autopilot CRO: an autonomous opportunity, hypothesis, safe runtime experiment, decision, promotion, monitoring and next-optimization loop.<\/li>\n<li>Added reversible field-order, progressive-disclosure, accessible multi-step, CTA, label and placeholder mutation strategies without editing provider form definitions.<\/li>\n<li>Added privacy-safe signed experiment attribution through CF7, WPForms and Elementor provider-confirmed outcomes; Generic remains observed-only.<\/li>\n<li>Added Bayesian Beta-Binomial sequential decisions with sample, conversion, runtime, expected-loss, minimum-effect and posterior-probability gates.<\/li>\n<li>Added global and desktop\/mobile guardrails for confirmed-conversion harm, provider\/mail failures, separate provider\/client validation, JS application errors and latency.<\/li>\n<li>Added transactional automatic promotion, post-promotion regression rollback, immutable versioned history and per-form race-safe hourly evaluation.<\/li>\n<li>Added Observe, Approve and Full Autopilot modes, real optimization budgets, deterministic CRO score, opportunity explanations, diagnostics and optional lead-value estimates.<\/li>\n<li>Added normalized migration v5 and aggregate-only experiment tables without fabricating historical assignment evidence.<\/li>\n<li>Added cache-neutral page-lifecycle assignment, conditional asset loading, dynamic\/AJAX form handling and WP Rocket\/LiteSpeed invalidation hooks.<\/li>\n<li>Added strict bounded CRO REST schemas, atomic site-wide budgets and fixed diagnostic counters without IP or visitor identifiers.<\/li>\n<li>Added statistical, guardrail, migration, attribution, REST abuse, runtime mutation, accessibility and failure-safety tests.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Hardened public ingestion with strict JSON\/event schemas, bounded nesting and metadata, atomic request\/event\/cost limits, and site\/per-form dimension budgets.<\/li>\n<li>Added configurable ingestion limits, CF7\/WPForms form-ID existence checks, rejection diagnostics and HTTP throttling feedback without IP addresses or visitor identifiers.<\/li>\n<li>Removed mixed-evidence conversion: generic HTML exposes observed attempts and N\/A confirmations; confirmed dashboard conversion includes supported providers only.<\/li>\n<li>Separated browser validation friction from provider validation evidence and introduced a paired denominator for provider rejection share.<\/li>\n<li>Preserved legacy submissions and validation counters without reclassifying historical evidence; migration v4 registers existing dimensions in restart-safe batches.<\/li>\n<li>Fixed empty WPForms error collections being counted as validation failures.<\/li>\n<li>Hardened label extraction against nested control contents and later personalized labels; retained native form behavior and optional API fallbacks.<\/li>\n<li>Expanded abuse, concurrency, migration, evidence and tracker privacy regression coverage. Build instructions, defaults and recovery details are in docs\/HARDENING.md.<\/li>\n<li>Added first-class WPForms Lite and Pro discovery, stable identity, server-confirmed success and validation analytics.<\/li>\n<li>Added first-class Elementor Pro Forms discovery, stable document\/widget identity, validation, post-action outcome checks and separate Email-action signals.<\/li>\n<li>Added provider registry and capability contracts for future form integrations.<\/li>\n<li>Separated browser submit attempts from provider-confirmed submissions to prevent double counting.<\/li>\n<li>Added placement-specific aggregate analytics without visitor identifiers or raw event storage.<\/li>\n<li>Improved Contact Form 7 terminal-event deduplication and validation aggregation.<\/li>\n<li>Added dynamic\/popup lifecycle deduplication, compound field normalization and privacy regression coverage.<\/li>\n<li>Added bounded dashboard pagination and restart-safe chunked retention cleanup for large sites.<\/li>\n<li>Added reproducible JS\/CSS build, PHPUnit, Vitest, ESLint, PHPStan and WPCS tooling.<\/li>\n<li>Hardened SQL preparation for aggregate counter upserts.<\/li>\n<li>Updated WordPress compatibility metadata for WordPress 7.1.<\/li>\n<li>Resolved Plugin Check release-blocking issues.<\/li>\n<li>Initial public MVP release.<\/li>\n<li>Added Contact Form 7 and standard HTML form discovery.<\/li>\n<li>Added views, starts, interactions, submissions and abandonment analytics.<\/li>\n<li>Added field-level abandonment and validation reporting.<\/li>\n<li>Added conversion, abandonment and timing metrics.<\/li>\n<li>Added server-side Contact Form 7 success, failure and validation monitoring.<\/li>\n<li>Added WordPress mail health monitoring and diagnostics.<\/li>\n<li>Added health states and conversion-drop detection.<\/li>\n<li>Added local aggregate storage, retention cleanup and privacy controls.<\/li>\n<li>Added dynamic form discovery and developer extension hooks.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Initial public release of Formhawk.<\/li>\n<\/ul>","raw_excerpt":"Privacy-first form analytics and Autopilot CRO with confirmed conversions \u2014 without cookies or external tracking.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/szl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/358280","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/szl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/szl.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/szl.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=358280"}],"author":[{"embeddable":true,"href":"https:\/\/szl.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/al5dy"}],"wp:attachment":[{"href":"https:\/\/szl.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=358280"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/szl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=358280"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/szl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=358280"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/szl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=358280"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/szl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=358280"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/szl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=358280"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}