{"id":358280,"date":"2026-08-31T20:41:17","date_gmt":"2026-08-31T20:41:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/formhawk\/"},"modified":"2026-08-31T20:40:55","modified_gmt":"2026-08-31T20:40:55","slug":"formhawk","status":"publish","type":"plugin","link":"https:\/\/mfe.wordpress.org\/plugins\/formhawk\/","author":15334520,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.1","stable_tag":"0.1.1","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-08-31 20:40:55","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":44,"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}},"upgrade_notice":{"0.1.1":"<p>Plugin Check hardening and WordPress 7.1 compatibility metadata.<\/p>","0.1.0":"<p>Initial public release of Formhawk.<\/p>"},"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"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Forms overview with conversion and health status.","2":"Detailed per-form conversion and health analytics.","3":"Field-level abandonment and validation friction reporting.","4":"WordPress mail health diagnostics and manual mail test.","5":"Retention and uninstall data settings."}},"plugin_section":[],"plugin_tags":[984,41471,30680,601,396],"plugin_category":[42,54,55],"plugin_contributors":[154666],"plugin_business_model":[],"class_list":["post-358280","plugin","type-plugin","status-publish","hentry","plugin_tags-conversion","plugin_tags-form-analytics","plugin_tags-form-tracking","plugin_tags-forms","plugin_tags-privacy","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<p>Formhawk is a privacy-first form conversion analytics and health monitoring plugin for WordPress.<\/p>\n\n<p>It helps answer two practical questions:<\/p>\n\n<ul>\n<li>Are my forms working?<\/li>\n<li>Where do visitors abandon them before submitting?<\/li>\n<\/ul>\n\n<p>Formhawk automatically discovers eligible frontend forms, measures conversion and friction, monitors form health, and stores analytics locally in WordPress as aggregate statistics.<\/p>\n\n<p>No external Formhawk account or cloud analytics service is required.<\/p>\n\n<h4>Current features<\/h4>\n\n<ul>\n<li>Automatic detection of Contact Form 7 forms.<\/li>\n<li>Automatic detection of standard HTML <code>&lt;form&gt;<\/code> elements.<\/li>\n<li>Detection of forms inserted dynamically after page load, including AJAX and popup forms.<\/li>\n<li>Form view tracking when a form enters the viewport.<\/li>\n<li>Form start tracking on first interaction.<\/li>\n<li>Field interaction tracking without reading field values.<\/li>\n<li>Observed form submission tracking.<\/li>\n<li>Server-confirmed Contact Form 7 success tracking.<\/li>\n<li>Contact Form 7 mail failure tracking through server-side hooks.<\/li>\n<li>Contact Form 7 validation failures by field.<\/li>\n<li>Contact Form 7 aborted submission failures.<\/li>\n<li>Form abandonment tracking for started forms left without completion.<\/li>\n<li>Last interacted field before abandonment.<\/li>\n<li>Validation error counts by field.<\/li>\n<li>Views, starts, submissions, abandonments and failures.<\/li>\n<li>Conversion and abandonment rates.<\/li>\n<li>Average time from form start to a terminal event.<\/li>\n<li>Last confirmed success and last failure timestamps.<\/li>\n<li>Per-form health states: Collecting, Healthy, Warning and Critical.<\/li>\n<li>Warnings for started forms with no submissions and viewed forms with no starts.<\/li>\n<li>Critical state when a newer failure exists after the last confirmed success.<\/li>\n<li>Conversion-drop detection against the previous comparable period.<\/li>\n<li>7-day, 30-day and 90-day analytics views.<\/li>\n<li>Forms overview dashboard and detailed per-form analytics.<\/li>\n<li>Field-level abandonment and validation friction reports.<\/li>\n<li>Global WordPress <code>wp_mail()<\/code> success\/failure health signals.<\/li>\n<li>Manual <code>wp_mail()<\/code> diagnostic test.<\/li>\n<li>Local daily aggregate analytics storage with no raw visitor event log.<\/li>\n<li>Automatic daily retention cleanup.<\/li>\n<li>Configurable retention: 30, 90, 180 or 365 days.<\/li>\n<li>Optional complete data removal on uninstall.<\/li>\n<li>WordPress Privacy Policy helper text integration.<\/li>\n<li>No cookies, <code>localStorage<\/code> or <code>sessionStorage<\/code> tracking.<\/li>\n<li>No visitor IDs, session IDs, IP addresses or user-agent storage.<\/li>\n<li>No form field values, entered email addresses, names or message contents stored.<\/li>\n<li>No email recipient, subject or message body storage.<\/li>\n<li>Same-origin REST event ingestion with a signed site token.<\/li>\n<li>Batched frontend event delivery.<\/li>\n<li>Dependency-free frontend tracker.<\/li>\n<li><code>MutationObserver<\/code> support for dynamically inserted forms.<\/li>\n<li><code>IntersectionObserver<\/code> support for actual form-view detection.<\/li>\n<li><code>data-formhawk-ignore<\/code> to exclude individual forms.<\/li>\n<li><code>data-formhawk-title<\/code> and <code>data-formhawk-id<\/code> for generic form identification.<\/li>\n<li><code>formhawk_tracking_disabled<\/code> filter to disable tracking programmatically.<\/li>\n<li><code>formhawk_event_recorded<\/code> action for integrations and extensions.<\/li>\n<\/ul>\n\n<h4>Privacy by design<\/h4>\n\n<p>Formhawk is intentionally built without visitor-level analytics.<\/p>\n\n<p>Temporary per-form state exists only in JavaScript memory for the current page. Formhawk creates no analytics cookies or persistent browser identifiers.<\/p>\n\n<p>The local WordPress database stores aggregate counts and static metadata needed for reports, such as form identifiers, page paths, field names and field labels.<\/p>\n\n<p>Formhawk does not intentionally store visitor responses, names, email addresses, phone numbers, message contents, IP addresses, visitor IDs, session IDs, user agents, email recipients, email subjects or email message bodies.<\/p>\n\n<p>No Formhawk analytics data is sent to an external Formhawk service.<\/p>\n\n<h4>Contact Form 7 integration<\/h4>\n\n<p>Contact Form 7 receives the deepest integration in the current release. Formhawk combines frontend behavior analytics with server-side Contact Form 7 hooks for confirmed mail success, mail failures, validation failures and aborted submissions.<\/p>\n\n<h4>Standard HTML forms<\/h4>\n\n<p>Formhawk automatically monitors eligible standard HTML forms. For generic forms, the browser submit event is recorded as an observed submission attempt.<\/p>\n\n<p>There is no universal browser API that can verify whether every custom server-side handler ultimately saved or delivered a lead, so Formhawk does not claim a confirmed success where it cannot verify one.<\/p>\n\n<h4>Mail health<\/h4>\n\n<p>Formhawk monitors WordPress <code>wp_mail_failed<\/code> and <code>wp_mail_succeeded<\/code> events without storing message contents or recipients.<\/p>\n\n<p>A successful <code>wp_mail()<\/code> event means WordPress\/PHPMailer accepted the message for sending without an immediate error. It does not guarantee final inbox delivery.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>formhawk<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the ZIP through Plugins &gt; Add New Plugin &gt; Upload Plugin.<\/li>\n<li>Activate Formhawk.<\/li>\n<li>Open Formhawk in the WordPress admin menu.<\/li>\n<li>Visit a frontend page containing a Contact Form 7 or standard HTML form.<\/li>\n<li>Once the form enters the viewport, Formhawk starts collecting aggregate analytics automatically.<\/li>\n<li>Return to Formhawk in wp-admin to review conversion, abandonment, friction and health information.<\/li>\n<\/ol>\n\n<p>No tracking snippet, external account or cookie configuration is required.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20formhawk%20store%20submitted%20form%20values%3F\"><h3>Does Formhawk store submitted form values?<\/h3><\/dt>\n<dd><p>No. The frontend tracker does not read or transmit visitor field values. Only static field metadata, such as names or labels, is used for aggregate friction reports.<\/p><\/dd>\n<dt id=\"does%20formhawk%20use%20cookies%20or%20browser%20storage%3F\"><h3>Does Formhawk use cookies or browser storage?<\/h3><\/dt>\n<dd><p>No. Formhawk creates no analytics cookies, localStorage entries or sessionStorage entries.<\/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. Current Formhawk analytics are stored locally in the WordPress database.<\/p><\/dd>\n<dt id=\"which%20forms%20are%20supported%3F\"><h3>Which forms are supported?<\/h3><\/dt>\n<dd><p>The current release supports Contact Form 7 and eligible standard HTML forms, including forms inserted dynamically after page load.<\/p><\/dd>\n<dt id=\"can%20formhawk%20confirm%20every%20submission%3F\"><h3>Can Formhawk confirm every submission?<\/h3><\/dt>\n<dd><p>Contact Form 7 outcomes are confirmed through server-side hooks. Generic HTML forms are recorded as observed browser submission attempts because arbitrary server-side handlers cannot be verified universally.<\/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. It means WordPress\/PHPMailer completed the send operation without an immediate error. Final delivery can still fail later.<\/p><\/dd>\n<dt id=\"how%20do%20i%20exclude%20a%20form%3F\"><h3>How do I exclude a form?<\/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%20better%20name%3F\"><h3>How do I give a generic form a better 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. Return <code>true<\/code> from the <code>formhawk_tracking_disabled<\/code> filter.<\/p><\/dd>\n<dt id=\"is%20there%20an%20extension%20hook%20after%20an%20event%20is%20recorded%3F\"><h3>Is there an extension hook after an event is recorded?<\/h3><\/dt>\n<dd><p>Yes. The <code>formhawk_event_recorded<\/code> action fires after an aggregate event is recorded.<\/p><\/dd>\n<dt id=\"how%20long%20is%20analytics%20data%20retained%3F\"><h3>How long is analytics data retained?<\/h3><\/dt>\n<dd><p>Choose 30, 90, 180 or 365 days in Formhawk settings. Expired daily aggregate data is cleaned automatically.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20formhawk%20is%20uninstalled%3F\"><h3>What happens when Formhawk is uninstalled?<\/h3><\/dt>\n<dd><p>Analytics can be preserved by default. 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.1.1<\/h4>\n\n<ul>\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<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\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>","raw_excerpt":"Privacy-first form conversion analytics and health monitoring for Contact Form 7 and standard HTML forms.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mfe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/358280","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mfe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/mfe.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/mfe.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=358280"}],"author":[{"embeddable":true,"href":"https:\/\/mfe.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/al5dy"}],"wp:attachment":[{"href":"https:\/\/mfe.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=358280"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/mfe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=358280"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/mfe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=358280"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/mfe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=358280"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/mfe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=358280"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/mfe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=358280"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}