{"id":300810,"date":"2026-04-30T13:04:37","date_gmt":"2026-04-30T13:04:37","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/pulse-analytics\/"},"modified":"2026-09-16T10:46:31","modified_gmt":"2026-09-16T10:46:31","slug":"pulse-analytics","status":"publish","type":"plugin","link":"https:\/\/ps.wordpress.org\/plugins\/pulse-analytics\/","author":23481532,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4.0","stable_tag":"1.4.0","tested":"6.9.8","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Pulse Analytics","header_author":"Ciphera","header_description":"Privacy-first analytics for your WordPress site. No cookies, fully GDPR compliant.","assets_banners_color":"","last_updated":"2026-09-16 10:46:31","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/pulse.ciphera.net","header_author_uri":"https:\/\/ciphera.net","rating":0,"author_block_rating":0,"active_installs":0,"downloads":377,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"ciphera","date":"2026-04-30 13:04:43","revision":3519542},"1.0.1":{"tag":"1.0.1","author":"ciphera","date":"2026-07-21 08:19:09","revision":3616685},"1.2.0":{"tag":"1.2.0","author":"ciphera","date":"2026-09-14 21:31:27","revision":3695960},"1.3.0":{"tag":"1.3.0","author":"ciphera","date":"2026-09-16 10:26:56","revision":3698360},"1.4.0":{"tag":"1.4.0","author":"ciphera","date":"2026-09-16 10:46:31","revision":3698389}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3695960,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3695960,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3519543,"resolution":false,"location":"assets","locale":false}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.2.0","1.3.0","1.4.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3695960,"resolution":"1","location":"assets","locale":"","width":2560,"height":1800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3695960,"resolution":"2","location":"assets","locale":"","width":400,"height":1800}},"screenshots":{"1":"Settings page with domain and admin tracking options.","2":"Pulse menu item in the WordPress admin sidebar."}},"plugin_section":[],"plugin_tags":[232,131785,396,521,550],"plugin_category":[36],"plugin_contributors":[261550],"plugin_business_model":[],"class_list":["post-300810","plugin","type-plugin","status-publish","hentry","plugin_tags-analytics","plugin_tags-gdpr","plugin_tags-privacy","plugin_tags-statistics","plugin_tags-tracking","plugin_category-analytics","plugin_contributors-ciphera","plugin_committers-ciphera"],"banners":[],"icons":{"svg":"https:\/\/ps.w.org\/pulse-analytics\/assets\/icon.svg?rev=3519543","icon":"https:\/\/ps.w.org\/pulse-analytics\/assets\/icon.svg?rev=3519543","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/pulse-analytics\/assets\/screenshot-1.png?rev=3695960","caption":"Settings page with domain and admin tracking options."},{"src":"https:\/\/ps.w.org\/pulse-analytics\/assets\/screenshot-2.png?rev=3695960","caption":"Pulse menu item in the WordPress admin sidebar."}],"raw_content":"<!--section=description-->\n<p>Pulse Analytics is built by <a href=\"https:\/\/ciphera.net\">Ciphera<\/a>, a Belgian privacy-software company. Pulse is a lightweight, privacy-first analytics platform that gives you valuable insights about your website visitors without compromising their privacy.<\/p>\n\n<p><strong>Features:<\/strong><\/p>\n\n<ul>\n<li>No cookies \u2014 fully GDPR, CCPA, and PECR compliant out of the box<\/li>\n<li>Lightweight \u2014 under 3 KB tracking script, no impact on page speed<\/li>\n<li>Simple setup \u2014 just enter your domain and you're tracking<\/li>\n<\/ul>\n\n<p><strong>Privacy by design:<\/strong><\/p>\n\n<p>Pulse uses a server-side daily-rotating hash for session identification. No cookies, no localStorage, no client-side identifiers. Your visitors' privacy is respected by default.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>pulse-analytics<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the Plugins menu<\/li>\n<li>Click <strong>Pulse<\/strong> in the WordPress admin sidebar<\/li>\n<li>Enter your domain (as registered in your Pulse dashboard)<\/li>\n<li>Done \u2014 analytics will start flowing immediately<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20pulse%20account%3F\"><h3>Do I need a Pulse account?<\/h3><\/dt>\n<dd><p>Yes. Sign up at <a href=\"https:\/\/pulse.ciphera.net\">pulse.ciphera.net<\/a> to create your dashboard and register your domain.<\/p><\/dd>\n<dt id=\"what%20happened%20to%20proxy%20mode%3F\"><h3>What happened to proxy mode?<\/h3><\/dt>\n<dd><p>It was removed in 1.4.0. It could not work: Pulse rejects a request forwarded by your server, because such a request carries no Origin or Referer header, so a site running proxy mode recorded nothing at all. It also never got around ad blockers, which was the reason it existed \u2014 the filter rules that block analytics match on the request path and ignore the domain, so they applied to your own domain exactly as they do to ours. Nothing replaces it, and nothing needs to: the tracking script loads from our CDN and reports directly.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20use%20cookies%3F\"><h3>Does this plugin use cookies?<\/h3><\/dt>\n<dd><p>No. Pulse does not use cookies, localStorage, or any client-side storage for tracking.<\/p><\/dd>\n<dt id=\"is%20this%20gdpr%20compliant%3F\"><h3>Is this GDPR compliant?<\/h3><\/dt>\n<dd><p>Yes. Pulse is designed to be GDPR compliant without requiring cookie consent banners.<\/p><\/dd>\n<dt id=\"who%20builds%20pulse%20analytics%3F\"><h3>Who builds Pulse Analytics?<\/h3><\/dt>\n<dd><p>Pulse Analytics is built by <a href=\"https:\/\/ciphera.net\">Ciphera<\/a>, a Belgian privacy-software company. Sign up and manage your dashboard at <a href=\"https:\/\/pulse.ciphera.net\">pulse.ciphera.net<\/a>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Removed proxy mode. It never worked, and it could not be made to work from inside a plugin: Pulse rejects a request forwarded by your server, so a site running it recorded nothing at all. 1.3.0 switched it off; this release takes the setting, the route and the cached script away, and clears what they left behind.<\/li>\n<li>Nothing to do, and nothing lost. Sites that were already on 1.3.0 see no change in what is collected. Sites coming from 1.2.0 or earlier start collecting again.<\/li>\n<li>The settings page is now three fields: domain, admin tracking, and the two advanced URLs for self-hosted instances.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Proxy mode is now off by default, and is switched off on upgrade for any site that still has it on. Leaving it on cost you every pageview: Pulse rejects a request forwarded by your server, and the tracking script reports nothing when that happens, so the dashboard stayed empty with no error shown anywhere.<\/li>\n<li>Corrected what the plugin claims about proxy mode. It never got around ad blockers. The filter lists that block analytics match on the request path and ignore the domain, so routing through your own domain changes nothing for them.<\/li>\n<li>No action needed. If your dashboard was empty while proxy mode was on, data starts arriving again as soon as the update lands. Nothing that was already recorded changes.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Proxy mode forwards the new engagement endpoint. The tracking script now sends time-on-page and scroll depth to \/api\/v1\/engagement instead of \/api\/v1\/metrics, because a widely used ad-blocker filter list blocks the old path by name \u2014 on any domain, including your own, so proxy mode did not get around it.<\/li>\n<li>The old endpoint keeps working. Proxy mode refreshes its cached copy of the tracking script once a day, so both paths stay available while that catches up.<\/li>\n<li>Update the plugin before your cached script refreshes. On 1.1.0 and earlier, proxy mode has no route for the new endpoint, and engagement data stops arriving once the newer script is cached. Pageviews are unaffected either way.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Removed frustration tracking (rage clicks and dead clicks). Pulse now ships a single tracking script.<\/li>\n<li>The setting is gone and the add-on script is no longer enqueued.<\/li>\n<li>Proxy mode now deletes any previously self-hosted copy of the add-on script from wp-content on its next daily refresh \u2014 no manual cleanup needed.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Readme: brand and company links.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Script injection with domain configuration<\/li>\n<li>Proxy mode with randomized endpoints<\/li>\n<li>Frustration tracking support (optional)<\/li>\n<li>Admin tracking toggle<\/li>\n<li>Self-hosted instance support<\/li>\n<\/ul>","raw_excerpt":"Privacy-first web analytics for your WordPress site. No cookies, fully GDPR compliant.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ps.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/300810","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ps.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ps.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ps.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=300810"}],"author":[{"embeddable":true,"href":"https:\/\/ps.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ciphera"}],"wp:attachment":[{"href":"https:\/\/ps.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=300810"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ps.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=300810"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ps.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=300810"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ps.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=300810"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ps.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=300810"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ps.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=300810"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}