{"id":301292,"date":"2026-05-15T11:21:16","date_gmt":"2026-05-15T11:21:16","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/member-analytics\/"},"modified":"2026-05-15T11:06:11","modified_gmt":"2026-05-15T11:06:11","slug":"memberbehavior-insights","status":"publish","type":"plugin","link":"https:\/\/es-uy.wordpress.org\/plugins\/memberbehavior-insights\/","author":23482141,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.7","stable_tag":"trunk","tested":"6.9.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"MemberBehavior Insights","header_author":"Nicolas Cervantes","header_description":"Advanced member-centric analytics for membership and affiliation sites. Track behavior, segments, geography, and conversions.","assets_banners_color":"","last_updated":"2026-05-15 11:06:11","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/memberanalyticspro.appskey.ca","header_author_uri":"https:\/\/appskey.ca","rating":0,"author_block_rating":0,"active_installs":0,"downloads":22,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":[],"upgrade_notice":{"1.0.2":"<p>Adds a License page for premium support key management and improves admin notices.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3533143,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":[],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Overview dashboard with KPIs, views chart, and heatmap","2":"Members list with per-member stats","3":"Individual member timeline","4":"Geographic distribution and tier breakdown","5":"Cohort retention matrix","6":"Settings page"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[232,1919,1932,521,550],"plugin_category":[36,58],"plugin_contributors":[263046],"plugin_business_model":[],"class_list":["post-301292","plugin","type-plugin","status-publish","hentry","plugin_tags-analytics","plugin_tags-members","plugin_tags-membership","plugin_tags-statistics","plugin_tags-tracking","plugin_category-analytics","plugin_category-user-management","plugin_contributors-nicolasrobertocervantes","plugin_committers-nicolasrobertocervantes"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/memberbehavior-insights\/assets\/icon-256x256.png?rev=3533143","icon_2x":"https:\/\/ps.w.org\/memberbehavior-insights\/assets\/icon-256x256.png?rev=3533143","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>MemberBehavior Insights gives membership site owners a full-featured analytics dashboard built specifically for their members \u2014 not anonymous visitors.<\/p>\n\n<p><strong>What it tracks:<\/strong><\/p>\n\n<ul>\n<li>Page views, scroll depth, and time-on-page per member<\/li>\n<li>Sessions with device type, browser, and geographic location<\/li>\n<li>Membership tier segmentation (MemberPress, Paid Memberships Pro, WooCommerce Memberships, or WordPress roles)<\/li>\n<li>Custom events and WooCommerce \/ MemberPress conversions<\/li>\n<\/ul>\n\n<p><strong>Dashboard features:<\/strong><\/p>\n\n<ul>\n<li>Overview KPIs \u2014 total sessions, unique members, top pages, average session time<\/li>\n<li>Views over time chart (daily)<\/li>\n<li>Activity heatmap \u2014 discover when members are most active by hour and day<\/li>\n<li>Geographic distribution map<\/li>\n<li>Cohort retention matrix \u2014 see who keeps coming back month over month<\/li>\n<li>Scroll drop-off report \u2014 where members stop reading<\/li>\n<li>Individual member timeline \u2014 full page-by-page history per user<\/li>\n<li>Members list with sortable stats<\/li>\n<\/ul>\n\n<p><strong>Privacy &amp; GDPR:<\/strong><\/p>\n\n<ul>\n<li>Optional opt-in consent banner before any tracking begins<\/li>\n<li>IP anonymization (last octet stripped from IPv4 by default)<\/li>\n<li>Per-user data export (JSON)<\/li>\n<li>Right-to-erasure: delete all data for a single member<\/li>\n<li>Configurable data retention period (default: 365 days, auto-pruned daily)<\/li>\n<li>Excludes administrators and configurable roles by default<\/li>\n<\/ul>\n\n<p><strong>Membership plugin integrations:<\/strong><\/p>\n\n<ul>\n<li>MemberPress \u2014 active subscription name<\/li>\n<li>Paid Memberships Pro \u2014 membership level name<\/li>\n<li>WooCommerce Memberships \u2014 plan name<\/li>\n<li>Fallback: WordPress user role<\/li>\n<\/ul>\n\n<h4>Premium Support<\/h4>\n\n<p>MemberBehavior Insights is free and fully functional. A premium license from <a href=\"https:\/\/appskey.ca\">appskey.ca<\/a> provides priority support and early access to new features.<\/p>\n\n<h4>External Services<\/h4>\n\n<p>This plugin connects to two external services:<\/p>\n\n<p><strong>1. ip-api.com (Geolocation)<\/strong>\nWhen geolocation is enabled (default: off), the server-side IP address of each visitor is sent to ip-api.com to determine their city, region, and country. No personal data beyond the IP address is transmitted. This service is free and requires no API key, but is rate-limited.\n* Service URL: http:\/\/ip-api.com\n* Privacy policy: https:\/\/ip-api.com\/docs\/legal\n* Data sent: visitor IP address\n* When: on each new page view when enabled (results are cached for 24 hours)\n* Can be enabled: Yes \u2014 Settings \u2192 Geolocation<\/p>\n\n<p><strong>2. memberanalyticspro.appskey.ca (License Management)<\/strong>\nWhen a license key is activated, the plugin sends the key and your site URL to the licensing server to validate the license. This call is made on activation and then throttled to at most once every 6 hours thereafter.\n* Service URL: https:\/\/memberanalyticspro.appskey.ca\n* Privacy policy: https:\/\/appskey.ca\/privacy\n* Data sent: license key, site URL (scheme + host only), site name (on activation only)\n* When: on license activation and periodically to re-validate\n* Can be disabled: No \u2014 required for license validation only; geolocation can be disabled independently<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>memberbehavior-insights<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through <strong>Plugins \u2192 Installed Plugins<\/strong> in WordPress.<\/li>\n<li>Navigate to <strong>MemberBehavior Insights<\/strong> in your WordPress admin sidebar.<\/li>\n<\/ol>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 5.8 or higher<\/li>\n<li>PHP 7.4 or higher<\/li>\n<li>MySQL 5.7 or higher (or MariaDB 10.3+)<\/li>\n<li>At least one membership plugin is recommended (MemberPress, Paid Memberships Pro, or WooCommerce Memberships), but not required<\/li>\n<\/ul>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20track%20all%20users%20or%20just%20members%3F\"><h3>Does this track all users or just members?<\/h3><\/dt>\n<dd><p>By default the plugin tracks all logged-in users except administrators. You can configure which roles to exclude under Settings. Anonymous (logged-out) tracking is disabled by default but can be enabled.<\/p><\/dd>\n<dt id=\"is%20it%20gdpr%20compliant%3F\"><h3>Is it GDPR compliant?<\/h3><\/dt>\n<dd><p>The plugin provides the tools needed to operate in a GDPR-compliant way: opt-in consent banner, IP anonymization, data export, and data deletion. Compliance depends on how you configure and use these tools on your site.<\/p><\/dd>\n<dt id=\"can%20i%20enable%20geolocation%3F\"><h3>Can I enable geolocation?<\/h3><\/dt>\n<dd><p>Yes. Go to <strong>MemberBehavior Insights \u2192 Settings<\/strong> and toggle on Geolocation. When disabled (the default), no data is sent to ip-api.com.<\/p><\/dd>\n<dt id=\"what%20data%20is%20stored%20and%20for%20how%20long%3F\"><h3>What data is stored and for how long?<\/h3><\/dt>\n<dd><p>Page views, session data, events, consent records, and daily summaries are stored in your WordPress database in five custom tables. Data older than the configured retention period (default: 365 days) is automatically pruned daily.<\/p><\/dd>\n<dt id=\"will%20deleting%20the%20plugin%20remove%20my%20data%3F\"><h3>Will deleting the plugin remove my data?<\/h3><\/dt>\n<dd><p>Yes. The plugin includes an uninstall routine that drops all custom database tables and removes all plugin settings when you delete the plugin via the WordPress admin.<\/p><\/dd>\n<dt id=\"where%20can%20i%20get%20premium%20support%3F\"><h3>Where can I get premium support?<\/h3><\/dt>\n<dd><p>Premium support and early access to new features are available at <a href=\"https:\/\/appskey.ca\">appskey.ca<\/a>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Fix: Renamed all plugin identifiers from the mema prefix to memabeh (MEMABEH_) to comply with WordPress.org uniqueness requirements \u2014 covers all PHP classes, constants, option names, database table names, AJAX hooks, cron events, transients, JS globals, and CSS class names.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Fix: Renamed main plugin class from Member_Analytics to MEMA_Plugin to comply with WordPress.org naming requirements \u2014 all plugin classes now consistently use the mema prefix.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Security: AJAX handlers (track_view, update_session, track_event) now enforce nonce validation for all users via check_ajax_referer(), removing the bypass that allowed logged-in users to skip the nonce check.<\/li>\n<li>Security: Session ownership is now verified for logged-in users on update_session and track_event \u2014 a user can only update their own session records.<\/li>\n<li>Security: view_id updates in update_session now confirm the view belongs to the supplied session_id before writing, preventing cross-session data tampering.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Fix: Corrected phpcs:ignore annotations placed inside SQL strings that caused MySQL syntax errors on all multi-line queries (views-over-time, top-content, geo, tiers, heatmap, cohort, members, scroll-dropoff, session update).<\/li>\n<li>Fix: Session heartbeat AJAX handler now correctly updates total_time_spent, enabling Avg Session Duration to display.<\/li>\n<li>Fix: Member list now shows display name and email separately; membership tier values are properly capitalized.<\/li>\n<li>Fix: Role label lookup uses wp_roles() function for reliable role name resolution.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Fix: Corrected external service URL in readme (licensing server is memberanalyticspro.appskey.ca).<\/li>\n<li>Fix: Removed misleading phpcs suppress comment; meta_data is fully sanitized recursively.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Add: License page for managing premium support key activation and deactivation.<\/li>\n<li>Add: Admin notices when a premium support license is not present.<\/li>\n<li>Fix: Version constant now matches plugin header.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Add: Remote license key activation and validation against the licensing server.<\/li>\n<li>Add: Per-user data export and deletion (GDPR right-to-erasure).<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Page-level and member-level tracking with session management.<\/li>\n<li>Geographic distribution via IP geolocation.<\/li>\n<li>Membership tier segmentation for MemberPress, Paid Memberships Pro, and WooCommerce Memberships.<\/li>\n<li>Cohort retention analysis.<\/li>\n<li>Activity heatmap.<\/li>\n<li>Individual member timelines.<\/li>\n<li>GDPR\/CCPA compliance tools: consent banner, IP anonymization, data export and deletion.<\/li>\n<li>React dashboard with interactive charts.<\/li>\n<\/ul>","raw_excerpt":"Advanced member-centric analytics for WordPress membership sites. Track behavior, geography, cohort retention, and conversions.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/es-uy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/301292","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/es-uy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/es-uy.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/es-uy.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=301292"}],"author":[{"embeddable":true,"href":"https:\/\/es-uy.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/nicolasrobertocervantes"}],"wp:attachment":[{"href":"https:\/\/es-uy.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=301292"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/es-uy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=301292"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/es-uy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=301292"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/es-uy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=301292"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/es-uy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=301292"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/es-uy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=301292"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}