{"id":349797,"date":"2026-09-25T22:09:49","date_gmt":"2026-09-25T22:09:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/quantely-lite\/"},"modified":"2026-10-04T19:19:06","modified_gmt":"2026-10-04T19:19:06","slug":"quantely-lite","status":"publish","type":"plugin","link":"https:\/\/ast.wordpress.org\/plugins\/quantely-lite\/","author":23434912,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.3","stable_tag":"1.1.3","tested":"7.1.2","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Quantely \u2013 Privacy-first WordPress Analytics","header_author":"Erravi","header_description":"First-party web analytics for traffic attribution, qualified sessions, page statistics, journeys, conversions, and historical metrics.","assets_banners_color":"","last_updated":"2026-10-04 19:19:06","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.erravi.com\/quantely\/","header_author_uri":"https:\/\/www.erravi.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":358,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.18":{"tag":"1.0.18","author":"erravi","date":"2026-09-25 22:09:33","revision":3713644},"1.0.19":{"tag":"1.0.19","author":"erravi","date":"2026-09-26 20:20:07","revision":3714706},"1.0.20":{"tag":"1.0.20","author":"erravi","date":"2026-09-27 08:12:48","revision":3715137},"1.0.30":{"tag":"1.0.30","author":"erravi","date":"2026-09-28 20:07:49","revision":3717866},"1.1.0":{"tag":"1.1.0","author":"erravi","date":"2026-09-30 15:59:29","revision":3721630},"1.1.1":{"tag":"1.1.1","author":"erravi","date":"2026-10-01 16:43:02","revision":3723505},"1.1.2":{"tag":"1.1.2","author":"erravi","date":"2026-10-03 19:23:53","revision":3726645},"1.1.3":{"tag":"1.1.3","author":"erravi","date":"2026-10-04 19:19:06","revision":3727737}},"upgrade_notice":{"1.1.3":"<p>Adds permanent dismissal of the first-session guide, a bar-chart menu icon and retention-aware Pages and Journeys windows up to 365 days. Existing settings, collected data and Overview calculations are preserved; no database migration is required.<\/p>","1.1.2":"<p>Adds an Overview chart aligned with the monthly table, using blue for sessions and sand for solid conversion-rate lines with subtle outlines, no monthly point markers and hover details limited to visible session and conversion-rate values. A vertical legend uses the space above the first two table columns; compact scales beside it keep the graph aligned with the monthly table. Totals keep their normal colors. Active shared filters add lighter blue for selected sessions and a thinner, lighter sand-colored line for the selected conversion rate. The Converted sessions table gives each visible type and the Sessions with conversion total a separate conversion-rate row. Existing settings, analytics data and filtered report calculations are preserved; no database migration is required.<\/p>","1.1.1":"<p>Adds first-run setup, filtered CSV exports and clearer report controls and Traffic actors without changing the database schema or existing report calculations.<\/p>","1.1.0":"<p>Adds page-level active time to Traffic, blocks speculative page captures, presents effective bot status consistently and improves shared-filter and report navigation cues without requiring a database migration.<\/p>","1.0.30":"<p>Adds first-install conversion guidance, the Data tab, reorganized Settings tabs and shared Analytics and Traffic filters. Existing analytics data, settings and report calculations are preserved.<\/p>","1.0.20":"<p>Enables three conversion types, adds the extension points required by Quantely XT and rebuilds retained conversion state. Previously stored definitions in the second and third slots become active again; Lite behavior remains unchanged when no extension is active.<\/p>","1.0.19":"<p>Updates the WordPress.org descriptions and screenshot captions. Analytics data and report calculations are unchanged.<\/p>","1.0.18":"<p>New installations enable browser fallback, time qualification, engagement and session fingerprinting. Existing saved settings are preserved.<\/p>","1.0.17":"<p>Improves Overview table spacing and prepares screenshot captions. Analytics data and calculations are unchanged.<\/p>","1.0.16":"<p>Improves code checks for the WordPress.org release. Analytics data and report calculations are unchanged.<\/p>","1.0.15":"<p>Removes a duplicate Overview row when one conversion type is configured. Conversion data and reporting calculations are unchanged.<\/p>","1.0.14":"<p>Displays the Quantely name and updated product information. Existing settings and analytics data remain intact.<\/p>","1.0.13":"<p>Adds a clearer system Status view and simplifies conversion presentation without changing retained analytics data or the database schema.<\/p>","1.0.12":"<p>Makes Organic selectable as a combined Search, Referral, Social and AI report filter without changing stored attribution data.<\/p>","1.0.11":"<p>Refines the shared Filter and Overview Metrics controls without changing report behavior or stored data.<\/p>","1.0.10":"<p>Shares saved acquisition filters across analytics tabs and separates temporary Pages and Journeys controls without changing stored analytics data.<\/p>","1.0.9":"<p>Corrects the empty conversion-rate Average and makes the hourly purge callback registration independent of collector initialization.<\/p>","1.0.8":"<p>Moves Traffic and Channels to dedicated pages, disables Journey removal by default and limits active conversion reporting to one type with three alternatives. Hidden type definitions remain stored.<\/p>","1.0.7":"<p>Removes redundant conversion internals and obsolete labels without changing the database schema, conversion results or report behavior.<\/p>","1.0.6":"<p>Adds five named conversion types, per-type Overview metrics and Conversion filtering in Journeys. The existing single conversion rule is migrated into the first type within the new five-alternative and three-part limits.<\/p>","1.0.5":"<p>Adds cross-channel Campaign filtering and repairs UTC grouping, purge scheduling and retained non-human session state.<\/p>","1.0.4":"<p>Adds grouped channel selection and dependent source filtering without changing stored analytics data.<\/p>","1.0.3":"<p>Prevents concurrent requests from creating duplicate session positions and repairs retained session integrity.<\/p>","1.0.2":"<p>Corrects automated-traffic filtering for scanner sessions and rapid site enumeration.<\/p>","1.0.1":"<p>Security hardening for administration requests and the first-party browser-capture endpoint.<\/p>","1.0.0":"<p>Initial public release. Existing Quantely settings and analytics data remain intact when updating.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3727766,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3727766,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3727775,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"landingPage\":\"\\\/wp-admin\\\/admin.php?page=quantely-lite&tab=overview\",\"preferredVersions\":{\"php\":\"8.3\",\"wp\":\"latest\"},\"plugins\":[{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"quantely-lite\"}],\"siteOptions\":{\"blogname\":\"Quantely Demo\"},\"login\":true,\"steps\":[{\"step\":\"runPHP\",\"code\":\"<?php\\nrequire_once 'wordpress\\\/wp-load.php';\\nrequire_once ABSPATH . 'wp-admin\\\/includes\\\/plugin.php';\\n\\nif (!is_plugin_active('quantely-lite\\\/quantely-lite.php')) {\\n    activate_plugin('quantely-lite\\\/quantely-lite.php');\\n}\\n\\nif (!class_exists('Flow_Install') || !class_exists('Flow_Settings')) {\\n    return;\\n}\\n\\nFlow_Install::ensure_schema();\\n\\nFlow_Settings::update([\\n    'retention_hours' => 48,\\n    'history_days' => 365,\\n    'beacon_fallback_enabled' => 1,\\n    'pings_enabled' => 1,\\n    'page_qualification_enabled' => 1,\\n    'engagement_enabled' => 1,\\n    'fingerprint_enabled' => 1,\\n    'minimum_pages' => 2,\\n    'qualification_seconds' => 3,\\n    'conversion_types' => [\\n        [\\n            'label' => 'Contact',\\n            'groups' => [\\n                ['\\\/contact\\\/', '\\\/thank-you\\\/'],\\n                ['\\\/demo-request\\\/', '\\\/demo-confirmed\\\/'],\\n            ],\\n        ],\\n        [\\n            'label' => 'Newsletter',\\n            'groups' => [\\n                ['\\\/newsletter\\\/confirmed\\\/'],\\n            ],\\n        ],\\n        [\\n            'label' => 'Guide download',\\n            'groups' => [\\n                ['\\\/resources\\\/', '\\\/download\\\/'],\\n            ],\\n        ],\\n    ],\\n]);\\n\\ndelete_option(Flow_Install::OPT_INSTALL_NOTICE);\\nupdate_option(Flow_Install::OPT_ONBOARDING_STATE, 'complete', false);\\n\\nif ((int) get_option('quantely_playground_demo_v1', 0) === 1) {\\n    return;\\n}\\n\\nglobal $wpdb;\\n\\n$sessions_table = Flow_Install::table_sessions();\\n$pages_table = Flow_Install::table_session_pages();\\n$stream_table = Flow_Install::table_stream();\\n\\n$user_agents = [\\n    'desktop' => 'Mozilla\\\/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit\\\/537.36 (KHTML, like Gecko) Chrome\\\/154.0.0.0 Safari\\\/537.36',\\n    'mobile' => 'Mozilla\\\/5.0 (iPhone; CPU iPhone OS 18_0 like Mac OS X) AppleWebKit\\\/605.1.15 (KHTML, like Gecko) Version\\\/18.0 Mobile\\\/15E148 Safari\\\/604.1',\\n    'tablet' => 'Mozilla\\\/5.0 (iPad; CPU OS 18_0 like Mac OS X) AppleWebKit\\\/605.1.15 (KHTML, like Gecko) Version\\\/18.0 Mobile\\\/15E148 Safari\\\/604.1',\\n];\\n\\n$profiles = [\\n    ['channel' => 'direct', 'ref_host' => '', 'utm_source' => '', 'utm_medium' => '', 'utm_campaign' => '', 'device' => 'desktop', 'browser' => 'Chrome'],\\n    ['channel' => 'search', 'ref_host' => 'google.com', 'utm_source' => '', 'utm_medium' => '', 'utm_campaign' => '', 'device' => 'mobile', 'browser' => 'Safari'],\\n    ['channel' => 'social', 'ref_host' => 'linkedin.com', 'utm_source' => '', 'utm_medium' => '', 'utm_campaign' => '', 'device' => 'desktop', 'browser' => 'Chrome'],\\n    ['channel' => 'referral', 'ref_host' => 'wordpress.org', 'utm_source' => '', 'utm_medium' => '', 'utm_campaign' => 'autumn-launch', 'device' => 'tablet', 'browser' => 'Safari'],\\n    ['channel' => 'ai', 'ref_host' => 'chatgpt.com', 'utm_source' => '', 'utm_medium' => '', 'utm_campaign' => '', 'device' => 'desktop', 'browser' => 'Chrome'],\\n    ['channel' => 'paid', 'ref_host' => '', 'utm_source' => 'google', 'utm_medium' => 'cpc', 'utm_campaign' => 'autumn-launch', 'device' => 'mobile', 'browser' => 'Chrome'],\\n    ['channel' => 'email', 'ref_host' => '', 'utm_source' => 'mailchimp', 'utm_medium' => 'email', 'utm_campaign' => 'autumn-launch', 'device' => 'desktop', 'browser' => 'Firefox'],\\n    ['channel' => 'paid', 'ref_host' => '', 'utm_source' => 'bing', 'utm_medium' => 'cpc', 'utm_campaign' => 'wordpress-analytics', 'device' => 'desktop', 'browser' => 'Edge'],\\n    ['channel' => 'email', 'ref_host' => '', 'utm_source' => 'mailchimp', 'utm_medium' => 'email', 'utm_campaign' => 'monthly-insights', 'device' => 'mobile', 'browser' => 'Safari'],\\n];\\n\\n$journeys = [\\n    ['\\\/', '\\\/features\\\/', '\\\/pricing\\\/'],\\n    ['\\\/blog\\\/privacy-first-analytics\\\/', '\\\/features\\\/'],\\n    ['\\\/resources\\\/analytics-guide\\\/', '\\\/download\\\/analytics-guide\\\/'],\\n    ['\\\/newsletter\\\/', '\\\/newsletter\\\/confirmed\\\/'],\\n    ['\\\/contact\\\/', '\\\/thank-you\\\/'],\\n    ['\\\/', '\\\/product\\\/', '\\\/pricing\\\/', '\\\/contact\\\/'],\\n    ['\\\/blog\\\/cookieless-analytics\\\/', '\\\/product\\\/', '\\\/contact\\\/'],\\n    ['\\\/about\\\/', '\\\/contact\\\/'],\\n    ['\\\/demo-request\\\/', '\\\/demo-confirmed\\\/'],\\n];\\n\\n$milestones = [8, 13, 21, 34, 55];\\n$last_session_id = 0;\\n\\nfor ($month_offset = 5; $month_offset >= 0; $month_offset--) {\\n    $month_start = strtotime('first day of -' . $month_offset . ' month 08:00 UTC');\\n\\n    for ($index = 0; $index < 10; $index++) {\\n        $profile = $profiles[($month_offset * 10 + $index) % count($profiles)];\\n        $paths = $index === 0\\n            ? ['\\\/blog\\\/privacy-first-analytics\\\/']\\n            : $journeys[($month_offset * 10 + $index) % count($journeys)];\\n\\n        $started_ts = $month_offset === 0\\n            ? time() - ((10 - $index) * 7200)\\n            : $month_start + (($index * 2 + 1) * DAY_IN_SECONDS) + ($index * 317);\\n\\n        $active_seconds = 0;\\n        $page_times = [];\\n        foreach ($paths as $position => $path) {\\n            $page_times[$position] = count($paths) > 1\\n                ? $milestones[($month_offset + $index + $position) % count($milestones)]\\n                : 0;\\n            $active_seconds += $page_times[$position];\\n        }\\n\\n        $has_path = static function ($needle) use ($paths) {\\n            foreach ($paths as $path) {\\n                if (strpos($path, $needle) !== false) {\\n                    return true;\\n                }\\n            }\\n            return false;\\n        };\\n\\n        $conversion_1 = (($has_path('\\\/contact\\\/') && $has_path('\\\/thank-you\\\/')) || ($has_path('\\\/demo-request\\\/') && $has_path('\\\/demo-confirmed\\\/'))) ? 1 : 0;\\n        $conversion_2 = $has_path('\\\/newsletter\\\/confirmed\\\/') ? 1 : 0;\\n        $conversion_3 = ($has_path('\\\/resources\\\/') && $has_path('\\\/download\\\/')) ? 1 : 0;\\n        $converted = ($conversion_1 || $conversion_2 || $conversion_3) ? 1 : 0;\\n        $qualified = count($paths) > 1 || $converted ? 1 : 0;\\n        $ended_ts = $started_ts + max(0, count($paths) - 1) * 75;\\n        $session_key = 'd' . substr(hash('sha256', 'quantely-demo-session-' . $month_offset . '-' . $index), 0, 23);\\n        $journey_text = implode(' \\u2192 ', $paths);\\n\\n        $wpdb->insert($sessions_table, [\\n            'session_key' => $session_key,\\n            'started_ts' => $started_ts,\\n            'ended_ts' => $ended_ts,\\n            'pageviews' => count($paths),\\n            'active_seconds' => $active_seconds,\\n            'qualified' => $qualified,\\n            'qualified_by' => $qualified ? 'pages' : '',\\n            'converted' => $converted,\\n            'conversion_1' => $conversion_1,\\n            'conversion_2' => $conversion_2,\\n            'conversion_3' => $conversion_3,\\n            'conversion_4' => 0,\\n            'conversion_5' => 0,\\n            'landing_path' => $paths[0],\\n            'exit_path' => $paths[count($paths) - 1],\\n            'ref_host' => $profile['ref_host'],\\n            'channel' => $profile['channel'],\\n            'utm_source' => $profile['utm_source'],\\n            'utm_medium' => $profile['utm_medium'],\\n            'utm_campaign' => $profile['utm_campaign'],\\n            'device' => $profile['device'],\\n            'country' => '',\\n            'is_excluded' => 0,\\n            'is_nonhuman' => 0,\\n            'journey_hash' => md5(wp_json_encode($paths)),\\n            'journey_text' => $journey_text,\\n        ]);\\n\\n        $session_id = (int) $wpdb->insert_id;\\n        if ($session_id <= 0) {\\n            continue;\\n        }\\n        $last_session_id = $session_id;\\n\\n        foreach ($paths as $position => $path) {\\n            $hit_ts = $started_ts + ($position * 75);\\n            $pv_id = md5('quantely-demo-hit-' . $month_offset . '-' . $index . '-' . $position);\\n            $ip_hash = substr(hash('sha256', 'quantely-demo-ip-' . $month_offset . '-' . $index), 0, 16);\\n\\n            $wpdb->insert($stream_table, [\\n                'ts_utc' => $hit_ts,\\n                'collector' => $position % 2 === 0 ? 'server' : 'browser',\\n                'path' => $path,\\n                'ref_host' => $position === 0 ? $profile['ref_host'] : '',\\n                'channel' => $position === 0 ? $profile['channel'] : 'internal',\\n                'utm_source' => $position === 0 ? $profile['utm_source'] : '',\\n                'utm_medium' => $position === 0 ? $profile['utm_medium'] : '',\\n                'utm_campaign' => $position === 0 ? $profile['utm_campaign'] : '',\\n                'ua' => $user_agents[$profile['device']],\\n                'browser' => $profile['browser'],\\n                'country' => '',\\n                'ip_hash' => $ip_hash,\\n                'session_key' => $session_key,\\n                'session_id' => $session_id,\\n                'is_excluded' => 0,\\n                'pv_id' => $pv_id,\\n                'active_seconds' => $page_times[$position],\\n                'is_nonhuman' => 0,\\n                'bot_label' => '',\\n                'bot_score' => 0,\\n                'bot_method' => '',\\n                'bot_reason' => '',\\n            ]);\\n\\n            $hit_id = (int) $wpdb->insert_id;\\n            if ($hit_id <= 0) {\\n                continue;\\n            }\\n\\n            $wpdb->insert($pages_table, [\\n                'session_id' => $session_id,\\n                'hit_id' => $hit_id,\\n                'position' => $position + 1,\\n                'ts_utc' => $hit_ts,\\n                'path' => $path,\\n                'active_seconds' => $page_times[$position],\\n            ]);\\n        }\\n    }\\n}\\n\\n$traffic_examples = [\\n    [\\n        'ts_utc' => time() - 30,\\n        'path' => '\\\/pricing\\\/',\\n        'ua' => $user_agents['desktop'],\\n        'browser' => 'Chrome',\\n        'ip_hash' => 'd111111111111111',\\n        'is_excluded' => 0,\\n        'is_nonhuman' => 0,\\n        'bot_label' => '',\\n        'bot_score' => 0,\\n        'bot_method' => '',\\n        'bot_reason' => '',\\n    ],\\n    [\\n        'ts_utc' => time() - 60,\\n        'path' => '\\\/wp-admin\\\/',\\n        'ua' => $user_agents['desktop'],\\n        'browser' => 'Chrome',\\n        'ip_hash' => 'd222222222222222',\\n        'is_excluded' => 1,\\n        'is_nonhuman' => 0,\\n        'bot_label' => '',\\n        'bot_score' => 0,\\n        'bot_method' => '',\\n        'bot_reason' => '',\\n    ],\\n    [\\n        'ts_utc' => time() - 90,\\n        'path' => '\\\/robots.txt',\\n        'ua' => 'Mozilla\\\/5.0 (compatible; DemoBot\\\/1.0)',\\n        'browser' => 'Bot',\\n        'ip_hash' => 'd333333333333333',\\n        'is_excluded' => 0,\\n        'is_nonhuman' => 1,\\n        'bot_label' => 'crawler',\\n        'bot_score' => 98,\\n        'bot_method' => 'signature',\\n        'bot_reason' => 'Known automated user agent',\\n    ],\\n];\\n\\nforeach ($traffic_examples as $example_index => $example) {\\n    $wpdb->insert($stream_table, array_merge([\\n        'collector' => 'server',\\n        'ref_host' => '',\\n        'channel' => 'direct',\\n        'utm_source' => '',\\n        'utm_medium' => '',\\n        'utm_campaign' => '',\\n        'ua' => '',\\n        'browser' => '',\\n        'country' => '',\\n        'ip_hash' => '',\\n        'session_key' => '',\\n        'session_id' => 0,\\n        'is_excluded' => 0,\\n        'pv_id' => md5('quantely-demo-traffic-' . $example_index),\\n        'active_seconds' => 0,\\n        'is_nonhuman' => 0,\\n        'bot_label' => '',\\n        'bot_score' => 0,\\n        'bot_method' => '',\\n        'bot_reason' => '',\\n    ], $example));\\n}\\n\\nupdate_option('quantely_playground_demo_v1', 1, false);\\n\",\"progress\":{\"weight\":2,\"caption\":\"Preparing Quantely demo analytics\"}},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"quantely-lite\"},\"options\":{\"activate\":true}}]}"}},"all_blocks":[],"tagged_versions":["1.0.18","1.0.19","1.0.20","1.0.30","1.1.0","1.1.1","1.1.2","1.1.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3726642,"resolution":"1","location":"assets","locale":"","width":2858,"height":1582},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3714704,"resolution":"2","location":"assets","locale":"","width":2868,"height":1580},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3714704,"resolution":"3","location":"assets","locale":"","width":2868,"height":1580},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3714704,"resolution":"4","location":"assets","locale":"","width":2868,"height":1580},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3714704,"resolution":"5","location":"assets","locale":"","width":2868,"height":1580},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3714704,"resolution":"6","location":"assets","locale":"","width":2868,"height":1580},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3714704,"resolution":"7","location":"assets","locale":"","width":2868,"height":1580},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3714704,"resolution":"8","location":"assets","locale":"","width":2868,"height":1580}},"screenshots":{"1":"<strong>Overview<\/strong> \u2014 View monthly qualified sessions, pageviews and conversions with shared filters and selectable metrics.","2":"<strong>Pages<\/strong> \u2014 Compare pageviews, active time, sessions, entry rates and exit rates for qualified sessions.","3":"<strong>Journeys<\/strong> \u2014 Explore grouped page sequences and filter sessions by path or conversion type.","4":"<strong>Traffic<\/strong> \u2014 Review recent requests, page-level active time, attribution, capture details and bot assessment.","5":"<strong>Collection<\/strong> \u2014 Configure qualification, engagement, capture, privacy and data retention.","6":"<strong>Conversions<\/strong> \u2014 Name up to three conversion types and define their URL-path matching rules.","7":"<strong>Language<\/strong> \u2014 Select an interface language and optionally override individual labels.","8":"<strong>Exclusions<\/strong> \u2014 Exclude selected user roles, IP addresses, IP ranges and path fragments."}},"plugin_section":[262246],"plugin_tags":[232,1005,396,521,179653],"plugin_category":[36,54],"plugin_contributors":[259476],"plugin_business_model":[],"class_list":["post-349797","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-analytics","plugin_tags-google-analytics","plugin_tags-privacy","plugin_tags-statistics","plugin_tags-website-statistics","plugin_category-analytics","plugin_category-security-and-spam-protection","plugin_contributors-erravi","plugin_committers-erravi"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/quantely-lite\/assets\/icon-128x128.png?rev=3727766","icon_2x":"https:\/\/ps.w.org\/quantely-lite\/assets\/icon-256x256.png?rev=3727766","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/quantely-lite\/assets\/screenshot-1.png?rev=3726642","caption":"<strong>Overview<\/strong> \u2014 View monthly qualified sessions, pageviews and conversions with shared filters and selectable metrics."},{"src":"https:\/\/ps.w.org\/quantely-lite\/assets\/screenshot-2.png?rev=3714704","caption":"<strong>Pages<\/strong> \u2014 Compare pageviews, active time, sessions, entry rates and exit rates for qualified sessions."},{"src":"https:\/\/ps.w.org\/quantely-lite\/assets\/screenshot-3.png?rev=3714704","caption":"<strong>Journeys<\/strong> \u2014 Explore grouped page sequences and filter sessions by path or conversion type."},{"src":"https:\/\/ps.w.org\/quantely-lite\/assets\/screenshot-4.png?rev=3714704","caption":"<strong>Traffic<\/strong> \u2014 Review recent requests, page-level active time, attribution, capture details and bot assessment."},{"src":"https:\/\/ps.w.org\/quantely-lite\/assets\/screenshot-5.png?rev=3714704","caption":"<strong>Collection<\/strong> \u2014 Configure qualification, engagement, capture, privacy and data retention."},{"src":"https:\/\/ps.w.org\/quantely-lite\/assets\/screenshot-6.png?rev=3714704","caption":"<strong>Conversions<\/strong> \u2014 Name up to three conversion types and define their URL-path matching rules."},{"src":"https:\/\/ps.w.org\/quantely-lite\/assets\/screenshot-7.png?rev=3714704","caption":"<strong>Language<\/strong> \u2014 Select an interface language and optionally override individual labels."},{"src":"https:\/\/ps.w.org\/quantely-lite\/assets\/screenshot-8.png?rev=3714704","caption":"<strong>Exclusions<\/strong> \u2014 Exclude selected user roles, IP addresses, IP ranges and path fragments."}],"raw_content":"<!--section=description-->\n<p>See which sources bring meaningful visits, which pages people view, the paths they take and where they convert\u2014without cookies, visitor profiles or third-party connections. Quantely runs entirely inside WordPress and starts collecting immediately.<\/p>\n\n<p>Reports can be broken down by source, channel, campaign (UTM) and device. Traffic from bots, administrator-selected logged-in user roles and user-defined IP addresses or ranges is excluded.<\/p>\n\n<p>Quantely does not set analytics cookies, count or profile visitors, expose a public integration API or send analytics data to a third party.<\/p>\n\n<h4>Analytics<\/h4>\n\n<p>The Analytics page contains three reports:<\/p>\n\n<ul>\n<li><strong>Overview<\/strong> \u2014 a monthly sessions and conversion-rate chart, qualified, converted and all-session metrics, filters, a year selector and a rolling twelve-month Average.<\/li>\n<li><strong>Pages<\/strong> \u2014 pageviews, median active time, sessions, entry rate and exit rate for qualified sessions.<\/li>\n<li><strong>Journeys<\/strong> \u2014 grouped page sequences for qualified sessions, sortable by sessions or journey length.<\/li>\n<\/ul>\n\n<p>Device, Channel, Source and Campaign are shared across the three Analytics reports and Traffic, and saved per administrator. Applying them on any of these pages updates the same selection everywhere. Year is saved with them but only applies to Overview. Pages, Journeys and Traffic keep their report-specific controls local and temporary. Pages and Journeys offer 7- and 30-day time windows, plus 90, 180 and 365 days when supported by the configured history retention.<\/p>\n\n<p>Overview can be exported as a UTF-8 CSV file using the filters currently applied.<\/p>\n\n<p>The Overview chart shares its month labels with the first table and always shows qualified sessions for the selected year across all devices, channels, sources and campaigns. Blue bars show sessions, and a solid sand-colored line shows the total conversion rate. The total series keep their normal colors with or without shared filters. When any Device, Channel, Source or Campaign filter is active, alone or in combination, a lighter blue area marks the selected-session portion inside each bar and a thinner, lighter sand-colored line shows the selected conversion rate. Both conversion lines are solid, with subtle outlines and no monthly point markers. The vertical legend sits to the left of the plot, above the first two table columns. Qualified sessions and Conversion rate each have Totals and Selected controls underneath; both numeric scales sit close together beside the legend without repeated scale titles. Both conversion rates share the same percentage scale. Each rate uses its own qualified-session denominator and counts each converted session once, even when it completes multiple types. Conversion lines appear when at least one conversion type is configured. The tables and CSV export follow the active filters, and the rolling Average stays outside the graph. Hovering a month shows only the visible graph values: qualified sessions and conversion rate, including the selection when filters are active. Use the legend to show or hide each series and the monthly tables for the full report.<\/p>\n\n<p>Traffic has its own <strong>Quantely &gt; Traffic<\/strong> page with recent raw captures, page-level active-time milestones, capture method, actor, browser, device, hashed IP, attribution, UTMs and bot assessment. Actor pills distinguish excluded, human and automatic traffic. Actor and Path or IP contains are applied separately inside the Traffic panel. When a retained session is classified as nonhuman, every Traffic row linked to that session is displayed as automatic traffic while the raw request evidence remains unchanged.<\/p>\n\n<p>Configured conversion snippets are used for conversion matching. The WordPress Dashboard widget shows qualified sessions for the current and previous five months and, when configured, the conversion rate.<\/p>\n\n<h4>Sessions and qualification<\/h4>\n\n<p>An optional daily rotating first-party fingerprint connects pageviews into sessions. The session gap determines when a new session starts.<\/p>\n\n<p>A session qualifies when it reaches two or three pageviews, reaches an enabled visible-time threshold of 2, 3, 5 or 8 seconds, or converts. Pageview and time qualification can be enabled independently; conversion qualification is automatic.<\/p>\n\n<h4>Engagement<\/h4>\n\n<p>Optional engagement measurement records the highest visible-time milestone reached per pageview: 2, 3, 5, 8, 13, 21, 34, 55 or 89 seconds. Hidden-tab time is ignored and no continuous heartbeat is sent.<\/p>\n\n<p>Pages reports median active time. Overview can show active time and session duration. These metrics remain hidden when engagement measurement is disabled.<\/p>\n\n<h4>Conversions and attribution<\/h4>\n\n<p>Up to three conversion types can be defined and named by the administrator. Each type has up to three alternatives joined with <strong>OR<\/strong>. Within each alternative, up to three case-insensitive URL-path snippets are joined with <strong>AND<\/strong>. Every filled snippet in one alternative must occur in the session; matching any alternative completes that type.<\/p>\n\n<p>The configured names are used in the separate <strong>Converted sessions<\/strong> table on Overview and in the Journeys conversion filter. Overview shows newly defined conversions by default. Each visible type has a session-count row followed by its own conversion-rate row, including the rolling Average. When multiple types are configured, Sessions with conversion has the same two-row layout for the deduplicated total. Journeys can show all sessions, sessions with any conversion or sessions with a specific configured type; the Any conversion option appears only when multiple types are active. Completing any active type automatically qualifies the session.<\/p>\n\n<p>Acquisition attribution is stored at session level. The Channel filter offers Organic as a combined selection for Search, Referral, Social and AI, while retaining each channel as an individual choice. Organic sources use referrer domains; Paid and Email sources prefer captured <code>utm_source<\/code> values. Campaign is an independent filter based only on captured <code>utm_campaign<\/code>, so one campaign can span multiple channels. Ordered rules under <strong>Quantely &gt; Settings &gt; Channels<\/strong> can override classification using referrer hosts or UTM values.<\/p>\n\n<h4>Capture, bots and privacy<\/h4>\n\n<p>Server-side capture and the JavaScript pageview fallback are enabled by default. The browser fallback can recover pageviews when full-page caching bypasses WordPress; server and browser captures are deduplicated. Browser prefetch and prerender requests are ignored until a page is actually activated.<\/p>\n\n<p>Deterministic user-agent signatures plus request- and session-level heuristics classify traffic. Bot sessions are excluded from analytical reports. Administrators can optionally enable Journey review controls and mark retained Journey groups as bots, immediately correcting Overview, Pages and Journeys without altering Traffic.<\/p>\n\n<ul>\n<li>Analytics data remains in the WordPress database.<\/li>\n<li>No analytics cookies or third-party analytics endpoints are used.<\/li>\n<li>Plain IP addresses, WordPress user IDs and roles are not retained in Traffic.<\/li>\n<li>IP hashes are shortened with the plugin's local secret.<\/li>\n<li>No persistent visitor history or visitor count is produced.<\/li>\n<li>Global Privacy Control and Do Not Track are honored by default.<\/li>\n<\/ul>\n\n<h3>Configuration<\/h3>\n\n<h4>Publication defaults<\/h4>\n\n<p>New installations enable the JavaScript pageview fallback, time qualification at 3 seconds, engagement measurement and daily rotating session fingerprinting. Pageview qualification uses a two-page threshold. Journey removal remains disabled, and GPC and DNT headers are honored.<\/p>\n\n<p>Disabling session fingerprinting makes every pageview a separate session, so multi-page qualification and Journeys cannot connect pageviews across a visit.<\/p>\n\n<h4>Retention, exclusions and languages<\/h4>\n\n<ul>\n<li>Raw Traffic retention: 6, 12, 24 or 48 hours.<\/li>\n<li>Session, Page and Journey retention: 30, 90, 180 or 365 days.<\/li>\n<li>Exclusions can match logged-in roles, IP addresses, CIDR ranges and path fragments.<\/li>\n<li>The interface includes English, Dutch, German, French, Italian, Spanish and Portuguese, with optional label overrides.<\/li>\n<\/ul>\n\n<h3>Data storage<\/h3>\n\n<p>Quantely uses three WordPress database tables: the short-retention traffic stream, retained sessions and their ordered pages. Reports are calculated directly from retained session data. Status summarizes collection, database readiness, data integrity and automatic cleanup; technical storage and bot details remain available under Advanced diagnostics.<\/p>\n\n<p>The Data tab can purge retained page and Journey detail while preserving session summaries, or reset all Quantely Analytics data and settings. By default, uninstalling preserves stored data and settings; enable the uninstall cleanup option on the Data tab to remove all dedicated tables and settings without leaving a trace. Deactivation preserves data.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin zip through <strong>Plugins &gt; Add New &gt; Upload Plugin<\/strong>, or copy the <code>quantely-lite<\/code> directory to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate <strong>Quantely<\/strong>. Collection starts immediately with privacy-first recommended defaults.<\/li>\n<li>Select <strong>Start setup<\/strong> in the welcome notice to confirm collection, choose role and IP exclusions, optionally define a first conversion and select the interface language.<\/li>\n<li>Generate one logged-out test session. Quantely shows collection progress until the first qualified session is available. Administrators can also close this progress guide permanently for their own account.<\/li>\n<li>Review the complete configuration later under <strong>Quantely &gt; Settings<\/strong>.<\/li>\n<\/ol>\n\n<p>Updates preserve the existing <code>flow_*<\/code> settings and retained analytics data.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20quantely%20use%20cookies%3F\"><h3>Does Quantely use cookies?<\/h3><\/dt>\n<dd><p>No. Quantely does not set analytics cookies.<\/p><\/dd>\n<dt id=\"does%20quantely%20count%20visitors%3F\"><h3>Does Quantely count visitors?<\/h3><\/dt>\n<dd><p>No. It deliberately reports requests, sessions, page statistics and journeys without creating visitor statistics or persistent visitor histories.<\/p><\/dd>\n<dt id=\"why%20can%20a%20request%20appear%20in%20traffic%20but%20not%20in%20pages%20or%20journeys%3F\"><h3>Why can a request appear in Traffic but not in Pages or Journeys?<\/h3><\/dt>\n<dd><p>Traffic is the short-retention request log. A request may be excluded, classified as a bot or belong to an unqualified session. Pages and Journeys only use qualified, non-excluded human sessions.<\/p><\/dd>\n<dt id=\"why%20is%20journeys%20empty%3F\"><h3>Why is Journeys empty?<\/h3><\/dt>\n<dd><p>Check that session fingerprinting is enabled, at least one qualification method is enabled, the selected device and channel filters match, and the test request is not excluded by role, path or IP. Test while logged out or in a private browser window.<\/p><\/dd>\n<dt id=\"can%20quantely%20measure%20a%20single-page%20session%20duration%20without%20browser%20signals%3F\"><h3>Can Quantely measure a single-page session duration without browser signals?<\/h3><\/dt>\n<dd><p>No. Server timestamps alone cannot establish how long a visitor viewed a single page. Enable engagement measurement when active-time and duration metrics are needed.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Added a permanent, per-administrator close button to the first-qualified-session guide. The preference survives plugin updates and requires an authorized, nonce-protected request.<\/li>\n<li>Replaced the eye icon in the WordPress admin menu with the standard bar-chart icon.<\/li>\n<li>Added 180- and 365-day windows to Pages and Journeys when the configured history retention supports them. Report and Journey-review windows cannot exceed retained history.<\/li>\n<li>Localized report-window labels and the close-button label in all bundled languages.<\/li>\n<li>Preserved analytics data, settings, the Overview chart, conversion calculations and the separate conversion-rate rows; no database migration is required.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Added a monthly Overview chart using Quantely's favicon colors, with qualified-session bars and deduplicated conversion-rate lines when conversions are configured.<\/li>\n<li>Kept total qualified sessions and conversion rate visible across all traffic for the selected year; active Device, Channel, Source and Campaign filters add a selected-session portion inside the bars and a selected conversion-rate line, including combinations of filters.<\/li>\n<li>Used blue for session bars and sand for solid conversion-rate lines, with subtle outlines and no monthly point markers. Totals keep their normal colors with or without shared filters. Selected sessions use a lighter blue area inside the bars, and the selected conversion rate uses a thinner, lighter sand-colored line. Placed a vertical legend to the left of the plot, with Totals and Selected controls underneath Qualified sessions and Conversion rate. Kept both scales compact on the left and removed repeated scale titles.<\/li>\n<li>Aligned the graph to the first table's month columns, sharing one set of month labels and keeping the rolling Average outside the graph.<\/li>\n<li>Preserved filtered tables, rolling averages and CSV export calculations. Each conversion rate uses its own qualified-session denominator; the chart comparison uses one additional monthly query only while a shared filter is active and requires no external chart libraries.<\/li>\n<li>Added responsive column alignment, independent keyboard-accessible legend controls and all bundled translations. Monthly values remain available to screen readers. Hover details contain only visible session and conversion-rate values.<\/li>\n<li>Preserved missing months and undefined conversion rates as gaps instead of displaying fabricated zeroes.<\/li>\n<li>Placed conversion rates on separate rows below each visible conversion type and the Sessions with conversion total, for every month and the rolling Average.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Repositioned the WordPress.org listing around privacy-first WordPress analytics, clearer search terms and the core Sources, Pages, Journeys and Conversions outcomes.<\/li>\n<li>Added a four-step first-run setup guide for collection defaults, logged-in role exclusions, optional current-IP exclusion, an optional first conversion and interface language.<\/li>\n<li>Added a first-success panel that confirms collection and explains exactly how to create the first qualified session.<\/li>\n<li>Added a nonce-protected UTF-8 CSV export beside the Overview Metrics control, using the shared filters currently applied.<\/li>\n<li>Protected exported text cells against spreadsheet-formula execution.<\/li>\n<li>Preserved existing settings and analytics data; the setup guide is shown only on new installations or when opened manually from Collection.<\/li>\n<li>Removed the unintended space between the Overview Metrics and Export CSV buttons.<\/li>\n<li>Simplified the report period selector so the active period is plain text while the alternatives remain links.<\/li>\n<li>Right-aligned the Journeys period selector to match Pages.<\/li>\n<li>Added blue, green and red Actor pills for excluded, human and automatic Traffic, with matching Actor filters.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added page-level Active time (s) to Traffic when engagement measurement is enabled; each row shows its highest retained milestone or a dash before the first signal.<\/li>\n<li>Prevented browser prefetch, prerender and other non-navigation HTML requests from being recorded as pageviews, and delayed browser capture until a prerendered document is activated.<\/li>\n<li>Made Traffic display and filter by the effective session actor, including a clear assessment when bot status is inherited from the retained session.<\/li>\n<li>Gave active shared filters a subtle light-blue state across Analytics and Traffic while filters set to Any remain neutral.<\/li>\n<li>Moved the Overview Metrics control below the visible tables and made the Overview, Pages and Journeys tabs equally wide.<\/li>\n<li>Preserved all existing analytics data, report calculations and saved selections; no database migration is required.<\/li>\n<\/ul>\n\n<h4>1.0.30<\/h4>\n\n<ul>\n<li>Added a one-time first-install notice confirming that collection has started and linking directly to conversion setup.<\/li>\n<li>Added practical confirmation-page and multi-page conversion examples to the notice.<\/li>\n<li>Shortened the WordPress.org Short Description to stay within the 150-character limit.<\/li>\n<li>Added a Data settings tab for purging retained session detail, resetting Quantely Analytics and controlling uninstall cleanup.<\/li>\n<li>Added explicit confirmation prompts and protected all destructive data actions with administrator permissions and nonces.<\/li>\n<li>Renamed the first Settings tab to Collection and reordered the tabs to Collection, Exclusions, Conversions, Channels, Language, Data and Status.<\/li>\n<li>Shared the saved Device, Channel, Source and Campaign filters between Analytics and Traffic so applying them on either page updates the other reports.<\/li>\n<li>Kept Traffic's Path or IP contains and Actor controls local and temporary under their own blue Apply action.<\/li>\n<\/ul>\n\n<h4>1.0.20<\/h4>\n\n<ul>\n<li>Expanded the active conversion configuration from one to three independently named types while retaining three OR alternatives of up to three AND snippets per type.<\/li>\n<li>Added extension hooks for Quantely add-ons without changing the default Lite interface.<\/li>\n<li>Added reserved country-code storage and report filtering support for optional extensions.<\/li>\n<li>Made the number of exposed conversion slots extensible while Lite continues to expose three by default.<\/li>\n<li>Rebuilt retained conversion state during the schema 19 upgrade so newly active and extension-provided types appear consistently in Overview and Journeys.<\/li>\n<\/ul>\n\n<h4>1.0.19<\/h4>\n\n<ul>\n<li>Reworked the short and detailed plugin descriptions to explain visit metrics, breakdowns and exclusions more clearly.<\/li>\n<li>Updated captions for the eight WordPress.org screenshots.<\/li>\n<\/ul>\n\n<h4>1.0.18<\/h4>\n\n<ul>\n<li>Enabled browser fallback, three-second time qualification, engagement measurement and session fingerprinting by default for new installations.<\/li>\n<li>Marked session fingerprinting as highly recommended in Settings. Existing saved settings remain unchanged.<\/li>\n<\/ul>\n\n<h4>1.0.17<\/h4>\n\n<ul>\n<li>Kept conversion counts and whole-number rates on one line in Overview and tightened metric-table spacing.<\/li>\n<li>Added eight screenshot captions for future WordPress.org assets.<\/li>\n<\/ul>\n\n<h4>1.0.16<\/h4>\n\n<ul>\n<li>Clarified plural translations and explicit output escaping for Overview metrics.<\/li>\n<li>Documented the verified nonce boundary for Channel settings and shortened a historical upgrade notice.<\/li>\n<\/ul>\n\n<h4>1.0.15<\/h4>\n\n<ul>\n<li>Hid the redundant Sessions with conversion total on Overview when exactly one conversion type is configured.<\/li>\n<\/ul>\n\n<h4>1.0.14<\/h4>\n\n<ul>\n<li>Published under the Quantely product name, with product information at https:\/\/www.erravi.com\/quantely\/.<\/li>\n<li>Updated the plugin listing and documentation; tracking, reports, settings and stored data are unchanged.<\/li>\n<\/ul>\n\n<h4>1.0.13<\/h4>\n\n<ul>\n<li>Replaced the technical-first Diagnostics tab with a reassurance-first Status view and collapsed Advanced diagnostics.<\/li>\n<li>Compared the installed and required schemas, added duplicate-pageview-ID checks and summarized collection, integrity, cleanup and retention health.<\/li>\n<li>Made newly defined conversion metrics visible on Overview by default while preserving later user choices.<\/li>\n<li>Hid the redundant Any conversion Journey option when only one conversion type is active.<\/li>\n<li>Removed conversion-path highlighting from Pages and Journeys without changing conversion matching or filtering.<\/li>\n<\/ul>\n\n<h4>1.0.12<\/h4>\n\n<ul>\n<li>Added a selectable Organic aggregate across analytics reports, combining Search, Referral, Social and AI while retaining the four individual channel filters.<\/li>\n<\/ul>\n\n<h4>1.0.11<\/h4>\n\n<ul>\n<li>Restyled the shared analytics action as a quieter Filter button.<\/li>\n<li>Moved the Overview metric Apply action into the Metrics flyout.<\/li>\n<\/ul>\n\n<h4>1.0.10<\/h4>\n\n<ul>\n<li>Moved the saved Device, Channel, Source and Campaign controls above the report panels and shared them across Overview, Pages and Journeys; Year remains Overview-only.<\/li>\n<li>Kept Pages and Journeys report-specific controls inside their panels with independent, temporary Apply actions.<\/li>\n<li>Shortened the Pages entry\/exit basis and Campaign defaults while retaining qualified-session-only rate calculations.<\/li>\n<li>Gave every numeric Pages metric column an equal width.<\/li>\n<\/ul>\n\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>Kept the rolling conversion rate empty when no conversion type is configured instead of reporting zero.<\/li>\n<li>Registered the purge callback directly during plugin bootstrap so hourly retention cleanup always has its handler.<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Moved Traffic from the Analytics tabs to its own Quantely administration page while redirecting old Traffic-tab links.<\/li>\n<li>Moved channel override rules to a dedicated Channels settings tab.<\/li>\n<li>Added a default-disabled setting that controls Journey selection and manual session removal, with server-side enforcement.<\/li>\n<li>Limited the interface to one active conversion type with three OR alternatives while preserving the four hidden type definitions for a future release.<\/li>\n<li>Rebuilt retained conversion state during the schema 17 upgrade so hidden types and alternatives no longer affect reports.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Centralized conversion slot limits, column names and Journey filter validation in the settings model.<\/li>\n<li>Removed duplicate filter normalizers and obsolete single-rule conversion labels without changing stored data, schema or report behavior.<\/li>\n<li>Retained automatic migration of earlier conversion settings and grouped-rule path highlighting.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Added five independently named conversion types, each with five OR alternatives of up to three AND URL snippets.<\/li>\n<li>Added a separate Overview table with counts and qualified-session conversion rates for each configured type and a deduplicated any-conversion total.<\/li>\n<li>Added Journeys filtering for all sessions, any conversion or a specific user-named conversion type.<\/li>\n<li>Preserved the configured conversion labels across settings, Overview and Journey filters.<\/li>\n<li>Migrated the previous single conversion rule into the first named type and retained compatibility for companion tools using the legacy flattened rule interface.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Added an independent Campaign filter based strictly on captured <code>utm_campaign<\/code> values.<\/li>\n<li>Applied Campaign filtering to Traffic, Overview, Pages, Journeys and Journey bot review.<\/li>\n<li>Made Overview calendar-month grouping independent of the database session timezone.<\/li>\n<li>Restored a missing hourly purge schedule automatically while retaining a single registered callback.<\/li>\n<li>Cleared derived qualification, conversion and Journey state whenever a session is excluded or classified as non-human.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Grouped Search, Referral, Social and AI under Organic in report filters.<\/li>\n<li>Added source filtering from captured referrer domains and UTM sources for Organic, Email and Paid channels.<\/li>\n<li>Recognized common email providers from captured source and referrer signals.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Made session assembly atomic under concurrent page requests.<\/li>\n<li>Added unique pageview-ID and session-position constraints with idempotent retry handling.<\/li>\n<li>Added a one-time repair of retained duplicate IDs, overlapping sessions, page positions and session counters.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Propagated scanner evidence from any request to its complete session.<\/li>\n<li>Added deterministic detection of rapid unique-path enumeration by disguised crawlers.<\/li>\n<li>Added a one-time reclassification of retained scanner and crawler sessions.<\/li>\n<li>Expanded common automation user-agent detection while preserving standard WordPress PHP endpoints.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Centralized nonce and administrator capability checks before processing settings and Journey review requests.<\/li>\n<li>Added explicit nonce and capability validation when saving Overview metric preferences.<\/li>\n<li>Restricted the anonymous browser-capture REST route to validated first-party requests and added strict payload validation.<\/li>\n<li>Removed the unavailable Plugin URI from the plugin header.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release of Quantely.<\/li>\n<li>Added first-party Traffic, Overview, Pages and Journeys reports.<\/li>\n<li>Added qualified sessions, conversions, attribution, exclusions and deterministic bot analysis.<\/li>\n<li>Added optional browser capture, visible-time qualification, engagement milestones and session fingerprinting.<\/li>\n<li>Added manual Journey bot classification and WordPress Dashboard reporting.<\/li>\n<li>Added multilingual administration and configurable label overrides.<\/li>\n<li>Removed unused daily aggregate tables and six unconsumed Traffic fields to reduce writes and storage.<\/li>\n<\/ul>","raw_excerpt":"Privacy-first WordPress analytics for sources, pages, journeys and conversions. Cookieless, lightweight and fully self-hosted.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/349797","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=349797"}],"author":[{"embeddable":true,"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/erravi"}],"wp:attachment":[{"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=349797"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=349797"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=349797"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=349797"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=349797"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=349797"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}