{"id":323883,"date":"2026-06-25T22:56:18","date_gmt":"2026-06-25T22:56:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/hapiguard-invalid-click-protection-for-adsense-ad-manager-auto-ads\/"},"modified":"2026-06-26T08:43:49","modified_gmt":"2026-06-26T08:43:49","slug":"hapiguard-invalid-click-protection-for-adsense-ad-manager-auto-ads","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/hapiguard-invalid-click-protection-for-adsense-ad-manager-auto-ads\/","author":23501859,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.4","stable_tag":"trunk","tested":"7.0","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"HapiGuard \u2013 Invalid Click Protection for AdSense, Ad Manager & Auto Ads","header_author":"Waldroid","header_description":"Protect your AdSense and Ad Manager account from invalid clicks and click bombing in real time. Works on desktop and mobile, supports Auto Ads and GPT. Optionally connect to RevHapi for geo-blocking, email alerts, and live analytics.","assets_banners_color":"ff9a66","last_updated":"2026-06-26 08:43:49","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/revhapi.com\/hapiguard.html","header_author_uri":"https:\/\/revhapi.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":68,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0..4":{"tag":"1.0..4","author":"waldroid","date":"2026-06-26 08:52:23"},"1.0.3":{"tag":"1.0.3","author":"waldroid","date":"2026-06-25 22:57:10"}},"upgrade_notice":{"1.0.4":"<p>Connected sites now read rule settings (enable, click limit, window, ban duration) from the RevHapi cloud dashboard, with the local form rendered read-only. Disconnected sites are unaffected.<\/p>","1.0.3":"<p>Activation fix and Guideline 5\/6 compliance pass: clarified that the external RevHapi service is optional and that all in-plugin features are fully functional without it.<\/p>","1.0.2":"<p>Important update: local stats now visible without any account. All existing settings preserved.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3586631,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3586631,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3586631,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3586631,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0..4","1.0.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3586631,"resolution":"1","location":"assets","locale":"","width":1153,"height":825},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3586631,"resolution":"2","location":"assets","locale":"","width":1106,"height":794}},"screenshots":{"1":"HapiGuard settings page showing local protection stats and settings","2":"Protection Summary with 7-day blocked click count (no account needed)","3":"RevHapi Cloud Analytics section shown when connected"}},"plugin_section":[262246],"plugin_tags":[259366,148,2654,4270,268921],"plugin_category":[35],"plugin_contributors":[268922],"plugin_business_model":[],"class_list":["post-323883","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-ad-protection","plugin_tags-adsense","plugin_tags-click-bombing","plugin_tags-click-fraud","plugin_tags-invalid-clicks","plugin_category-advertising","plugin_contributors-waldroid","plugin_committers-waldroid"],"banners":{"banner":"https:\/\/ps.w.org\/hapiguard-invalid-click-protection-for-adsense-ad-manager-auto-ads\/assets\/banner-772x250.jpg?rev=3586631","banner_2x":"https:\/\/ps.w.org\/hapiguard-invalid-click-protection-for-adsense-ad-manager-auto-ads\/assets\/banner-1544x500.jpg?rev=3586631","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/hapiguard-invalid-click-protection-for-adsense-ad-manager-auto-ads\/assets\/icon-128x128.png?rev=3586631","icon_2x":"https:\/\/ps.w.org\/hapiguard-invalid-click-protection-for-adsense-ad-manager-auto-ads\/assets\/icon-256x256.png?rev=3586631","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/hapiguard-invalid-click-protection-for-adsense-ad-manager-auto-ads\/assets\/screenshot-1.png?rev=3586631","caption":"HapiGuard settings page showing local protection stats and settings"},{"src":"https:\/\/ps.w.org\/hapiguard-invalid-click-protection-for-adsense-ad-manager-auto-ads\/assets\/screenshot-2.png?rev=3586631","caption":"Protection Summary with 7-day blocked click count (no account needed)"}],"raw_content":"<!--section=description-->\n<p>HapiGuard detects and blocks invalid ad clicks in real-time, protecting your AdSense and Ad Manager account from policy violations caused by click bombing, bot traffic, and accidental repeated clicks.<\/p>\n\n<p><strong>All core protection features are free and fully functional with no account required.<\/strong> The plugin stores blocked click data locally in your WordPress database and shows you a 7-day summary right in the admin dashboard \u2014 no external service needed.<\/p>\n\n<p>Optionally, you can connect a free RevHapi account to add cloud-powered features such as geo-blocking, email alerts, and advanced analytics. These are provided by an external service that processes data on RevHapi servers. The core plugin works entirely without it.<\/p>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li>Install and activate the plugin<\/li>\n<li>HapiGuard immediately begins monitoring ad clicks on your pages<\/li>\n<li>When a visitor exceeds your configured click limit within the time window, they are blocked from seeing ads<\/li>\n<li>The plugin records each blocked click in your local WordPress database<\/li>\n<li>Your Protection Summary shows blocked clicks and total click counts from the last 7 days \u2014 no account needed<\/li>\n<\/ol>\n\n<h4>Core features (free, no account needed)<\/h4>\n\n<ul>\n<li>Real-time click detection and blocking<\/li>\n<li>Works with AdSense, Auto Ads, and Google Publisher Tag (GPT \/ Ad Manager)<\/li>\n<li>Preemptive CSS hiding \u2014 ads are hidden synchronously for blocked visitors before any network request<\/li>\n<li>Vignette and interstitial ad blocking \u2014 blocked visitors cannot see overlay ads<\/li>\n<li>Configurable click limit, time window, and ban duration<\/li>\n<li>Local 7-day stats: blocked clicks and total click count shown in admin without any external service<\/li>\n<li>Client-side fingerprinting using canvas, screen resolution, and timezone \u2014 no server round-trip required for blocking decisions<\/li>\n<\/ul>\n\n<h4>Optional cloud features \u2014 external RevHapi service<\/h4>\n\n<p>The RevHapi cloud service is a separate, optional offering. Connecting a free RevHapi account at <a href=\"https:\/\/app.revhapi.com\">app.revhapi.com<\/a> adds:<\/p>\n\n<ul>\n<li>Server-side page view and session tracking<\/li>\n<li>Geo-blocking \u2014 block or allow specific countries<\/li>\n<li>Email alerts when a click spike is detected<\/li>\n<li>Anomaly detection across visitors<\/li>\n<li>Advanced analytics: page views, sessions, avg time-to-click<\/li>\n<\/ul>\n\n<p>These features require server-side processing (cross-site fingerprint correlation, email delivery, geo IP lookups) that cannot be performed by the WordPress plugin alone, so they are provided as an external service under <a href=\"https:\/\/developer.wordpress.org\/plugins\/wordpress-org\/detailed-plugin-guidelines\/\">Guideline 6<\/a>. The plugin's local click protection is fully functional without them.<\/p>\n\n<h4>Third-party service disclosure<\/h4>\n\n<p>When you enter a RevHapi API key, the plugin sends anonymised click event data (fingerprint hash, page URL, click count \u2014 no IP addresses or personal data) to <code>app.revhapi.com<\/code>.<\/p>\n\n<ul>\n<li><a href=\"https:\/\/revhapi.com\/privacy\">RevHapi Privacy Policy<\/a><\/li>\n<li><a href=\"https:\/\/revhapi.com\/terms\">RevHapi Terms of Service<\/a><\/li>\n<\/ul>\n\n<p>RevHapi is operated by Waldroid Digital Ltd. The core plugin functionality works entirely without connecting to any external service.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress<\/li>\n<li>Go to <strong>HapiGuard<\/strong> in the WordPress admin sidebar<\/li>\n<li>You will immediately see local protection stats \u2014 no configuration needed<\/li>\n<li>Set your preferred click limit, time window, and ban duration in the Settings card<\/li>\n<li>Optional: enter a RevHapi API key to also send anonymised click data to the external RevHapi cloud service for cross-site analytics, geo-blocking and email alerts. The plugin works fully without this.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20work%20without%20a%20revhapi%20account%3F\"><h3>Does it work without a RevHapi account?<\/h3><\/dt>\n<dd><p>Yes. All click detection, blocking, and local stats work without any account. The 7-day blocked click count and total clicks are shown in the admin dashboard using your local WordPress database. No external service is required.<\/p><\/dd>\n<dt id=\"what%20stats%20are%20shown%20without%20an%20account%3F\"><h3>What stats are shown without an account?<\/h3><\/dt>\n<dd><p>Blocked clicks (7 days) and Total clicks (7 days) \u2014 both queried directly from the plugin's own WordPress database table. No external service is needed to see these.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20auto%20ads%3F\"><h3>Does it work with Auto Ads?<\/h3><\/dt>\n<dd><p>Yes. HapiGuard automatically detects and protects AdSense, Auto Ads, and Google Publisher Tag (GPT) ad containers.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20down%20my%20site%3F\"><h3>Will it slow down my site?<\/h3><\/dt>\n<dd><p>No. The protection script is small and loads asynchronously. All blocking decisions use browser localStorage \u2014 there are no render-blocking network requests for the core protection.<\/p><\/dd>\n<dt id=\"does%20it%20send%20personal%20visitor%20data%20anywhere%3F\"><h3>Does it send personal visitor data anywhere?<\/h3><\/dt>\n<dd><p>No personal data is sent. When connected to RevHapi, the plugin sends an anonymised fingerprint hash, page URL, and click count. No IP addresses, names, or emails are transmitted.<\/p><\/dd>\n<dt id=\"is%20this%20affiliated%20with%20google%3F\"><h3>Is this affiliated with Google?<\/h3><\/dt>\n<dd><p>No. HapiGuard is developed by Waldroid Digital Ltd and is not affiliated with or endorsed by Google.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>When a site is connected to the optional external RevHapi cloud service, rule settings (enable, click limit, window, ban duration) are now pulled from there and the local form is rendered read-only, with a notice linking back to the cloud dashboard. This removes the silent drift that could happen when the same setting was edited in both places.<\/li>\n<li>Local fallback values stay in lock-step with the cloud (refreshed every minute), so the in-WP local-mode counters continue to use the correct thresholds.<\/li>\n<li>No change in behaviour when the plugin runs disconnected from the cloud \u2014 every field stays fully editable in the WordPress admin.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Fixed: PHP parse error on the Protection Summary heading caused by an unescaped apostrophe \u2014 the plugin could not be activated.<\/li>\n<li>Reworded all UI copy that referenced \"unlocking\" features to make clear that the external RevHapi service is optional and that every feature shipped in the plugin code is fully functional without any account, license, or API key.<\/li>\n<li>Replaced the \ud83d\udd12 padlock icon next to the cloud-only features list with \u2601\ufe0f so it reads as \"cloud service\" rather than \"locked\".<\/li>\n<li>Added an explicit \"External cloud service \u2014 separate from this plugin\" label above the RevHapi promo card.<\/li>\n<li>Dashboard widget CTA renamed from \"Unlock Advanced Protection\" to \"Learn about RevHapi Cloud\".<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Local stats now shown without any account \u2014 blocked clicks and total clicks from the local database<\/li>\n<li>RevHapi cloud analytics (page views, sessions, geo) clearly separated and labelled<\/li>\n<li>Plugin URI updated<\/li>\n<li>Text domain aligned with plugin slug<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Security and escaping improvements<\/li>\n<li>Improved readme documentation<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial public release<\/li>\n<li>Real-time click detection and blocking<\/li>\n<li>AdSense, Auto Ads, and Google Publisher Tag support<\/li>\n<li>Preemptive CSS hiding and vignette ad blocking<\/li>\n<li>Optional RevHapi integration for geo-blocking, email alerts, and analytics<\/li>\n<\/ul>","raw_excerpt":"Protect your AdSense account from invalid clicks and click bombing in real time. Works without any account needed.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/323883","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=323883"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/waldroid"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=323883"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=323883"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=323883"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=323883"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=323883"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=323883"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}