{"id":278911,"date":"2026-02-13T19:28:56","date_gmt":"2026-02-13T19:28:56","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/trustlens\/"},"modified":"2026-04-17T23:40:55","modified_gmt":"2026-04-17T23:40:55","slug":"trustlens","status":"publish","type":"plugin","link":"https:\/\/roh.wordpress.org\/plugins\/trustlens\/","author":23405775,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.2.2","stable_tag":"1.2.2","tested":"6.9.4","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"TrustLens \u2013 Customer Risk Intelligence & Abuse Detection for WooCommerce","header_author":"Webstepper","header_description":"Customer Trust Intelligence for WooCommerce. See your customers clearly.","assets_banners_color":"303748","last_updated":"2026-04-17 23:40:55","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/webstepper.io\/wordpress\/plugins\/trustlens","header_author_uri":"https:\/\/webstepper.io","rating":5,"author_block_rating":0,"active_installs":0,"downloads":693,"num_ratings":3,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"webstepper","date":"2026-02-13 19:28:20"},"1.0.3":{"tag":"1.0.3","author":"webstepper","date":"2026-02-15 22:19:02"},"1.0.4":{"tag":"1.0.4","author":"webstepper","date":"2026-02-16 12:56:14"},"1.0.5":{"tag":"1.0.5","author":"webstepper","date":"2026-02-16 12:56:14"},"1.0.6":{"tag":"1.0.6","author":"webstepper","date":"2026-02-16 14:06:36"},"1.1.0":{"tag":"1.1.0","author":"webstepper","date":"2026-02-16 16:11:21"},"1.1.1":{"tag":"1.1.1","author":"webstepper","date":"2026-02-23 22:55:15"},"1.1.2":{"tag":"1.1.2","author":"webstepper","date":"2026-02-23 23:20:39"},"1.1.3":{"tag":"1.1.3","author":"webstepper","date":"2026-02-23 23:44:16"},"1.1.4":{"tag":"1.1.4","author":"webstepper","date":"2026-02-24 00:13:38"},"1.1.5":{"tag":"1.1.5","author":"webstepper","date":"2026-03-09 21:06:00"},"1.1.6":{"tag":"1.1.6","author":"webstepper","date":"2026-03-21 21:15:54"},"1.1.7":{"tag":"1.1.7","author":"webstepper","date":"2026-03-21 23:29:44"},"1.1.8":{"tag":"1.1.8","author":"webstepper","date":"2026-03-31 18:27:36"},"1.2.0":{"tag":"1.2.0","author":"webstepper","date":"2026-04-11 01:33:02"},"1.2.1":{"tag":"1.2.1","author":"webstepper","date":"2026-04-14 23:32:42"},"1.2.2":{"tag":"1.2.2","author":"webstepper","date":"2026-04-17 23:40:55"}},"upgrade_notice":{"1.2.2":"<p>Automation Rules reliability rewrite and capability expansion \u2014 5 new fraud-signal triggers, 14 new condition fields, 2 new actions, save-time validation that blocks rules which can never fire, async HMAC-signed webhooks with auto-retry, and inline skip logging that answers &quot;why didn&#039;t my rule fire?&quot;. Plus Card-Testing Defense consolidated to a single live view and a persistent plugin-wide admin header with \u2318K palette. Safe additive upgrade.<\/p>","1.5.0":"<p>Card-Testing Defense Pro features: auto-escalation, geographic-diversity flash-sale safeguard, fingerprint + IP allowlists, advanced fingerprint signals, per-fingerprint threshold overrides, attack history analytics with CSV export, Slack\/email alerts. No changes to Free behavior.<\/p>","1.4.0":"<p>Free card-testing defense \u2014 detects and blocks stolen-card attack traffic before it reaches Stripe \/ WooPayments. Protects your gateway account from suspension caused by high decline ratios. Enable in TrustLens \u2192 Card-Testing Defense. Sensible defaults; takes 30 seconds to switch on.<\/p>","1.3.0":"<p>Infrastructure release. Email blocklist now covers Blocks \/ Store API checkout in addition to Classic. Browser fingerprint collection added on checkout pages (pseudonymous hash only; privacy-preserving). Sets the foundation for card-testing defense in 1.4.0.<\/p>","1.2.1":"<p>Chargeback Ratio Monitor + bulk-action fix. Free: dashboard chargeback-ratio speedometer, dispute ingestion from Stripe\/WooPayments, per-customer tracking, manual entry form. Pro: per-brand ratios, email alerts before Visa\/Mastercard\/Amex thresholds, Chargeback Monitor page. Recommended for stores accepting card payments.<\/p>","1.2.0":"<p>Major feature + reliability release: new Shipping Address Anomalies module, redesigned Customer Detail page (trust score gauge, signal impact bars, return rate trend), and a critical fix for ActionScheduler runaway loops that could otherwise bloat the scheduler table on admin-heavy sites. All existing sites should upgrade.<\/p>","1.1.8":"<p>Performance fix: prevents ActionScheduler table bloat from order meta saves and adds daily cleanup of old completed actions.<\/p>","1.1.7":"<p>Dispute evidence release: Pro one-click behavioral risk report for payment processor disputes \u2014 trust score, return patterns, linked accounts, and event timeline in a print-ready format.<\/p>","1.1.6":"<p>Trust visibility release: color-coded trust segment badges on the WooCommerce orders list with filtering and sorting \u2014 see customer risk at a glance while processing orders.<\/p>","1.1.5":"<p>Mail, privacy, reporting, and customer-risk reliability release: shared email sending, keyed customer\/fingerprint hashing, corrected automation analytics, accurate scheduled reports, customer-state consistency, cron cleanup, and refreshed WordPress.org copy.<\/p>","1.1.4":"<p>Dashboard UX and sync consistency release: adds chart empty states and improves historical sync completion\/reporting accuracy.<\/p>","1.1.3":"<p>Historical sync accuracy release: backfills coupon\/category\/linked-account behavior metrics and reconstructs historical events for improved scoring and reporting.<\/p>","1.1.2":"<p>Sync stability and UX release: fixes refund-related sync crashes, improves empty-state progress behavior, and adds reliable post-activation dashboard redirect.<\/p>","1.1.1":"<p>Sync reliability release: clearer sync errors, more robust batch processing, and cleanup of unused sync code paths.<\/p>","1.1.0":"<p>New Payment Controls tab with advanced Pro gateway restrictions (risk segment, velocity, and linked-account protection).<\/p>","1.0.6":"<p>Professional upsell redesign and clearer dashboard sync onboarding.<\/p>","1.0.5":"<p>UI Improvements.<\/p>","1.0.4":"<p>Automation is now its own menu (TrustLens \u2192 Automation). API and Data tabs fixes, modal styling, notification improvements, and test email timeout.<\/p>","1.0.3":"<p>Bug fixes.<\/p>","1.0.2":"<p>UI\/UX refinement release with modular CSS organization and improved test-data seeding.<\/p>","1.0.1":"<p>Maintenance release. No functional changes.<\/p>","1.0.0":"<p>First release. Install TrustLens and run the historical sync to start building customer trust profiles immediately.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":3},"assets_icons":{"icon.svg":{"filename":"icon.svg","revision":3461127,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3461149,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3461149,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1","1.0.3","1.0.4","1.0.5","1.0.6","1.1.0","1.1.1","1.1.2","1.1.3","1.1.4","1.1.5","1.1.6","1.1.7","1.1.8","1.2.0","1.2.1","1.2.2"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"<strong>Command Center Dashboard<\/strong> \u2014 Full analytics overview with health score, KPI cards, trust score trends, and segment distribution","2":"<strong>Customer List<\/strong> \u2014 Searchable, sortable list with segment badges, trust scores, return rates, and quick actions","3":"<strong>Customer Detail Page<\/strong> \u2014 Complete customer profile with score history, event timeline, linked accounts, and all behavioral signals","4":"<strong>Trust Score Trends Chart<\/strong> \u2014 30-day trend line showing average trust score movement across your customer base","5":"<strong>Revenue Protection Overview<\/strong> \u2014 ROI scorecard showing money protected, money at risk, protection rate, and actions taken","6":"<strong>Detection Overview<\/strong> \u2014 Coupon abuse stats and chargeback tracking at a glance","7":"<strong>Settings Page<\/strong> \u2014 Configure scoring thresholds, checkout blocking message, and notification preferences","8":"<strong>Order Integration<\/strong> \u2014 Customer trust score and segment displayed on the WooCommerce order edit screen","9":"<strong>Linked Accounts View<\/strong> \u2014 Multi-account detection showing matched fingerprints and risk indicators"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[76320,7619,12891,600,286],"plugin_category":[45],"plugin_contributors":[78154,254395],"plugin_business_model":[],"class_list":["post-278911","plugin","type-plugin","status-publish","hentry","plugin_tags-chargeback","plugin_tags-customers","plugin_tags-fraud","plugin_tags-security","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-freemius","plugin_contributors-webstepper","plugin_committers-webstepper"],"banners":{"banner":"https:\/\/ps.w.org\/trustlens\/assets\/banner-772x250.png?rev=3461149","banner_2x":"https:\/\/ps.w.org\/trustlens\/assets\/banner-1544x500.png?rev=3461149","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/trustlens\/assets\/icon.svg?rev=3461127","icon":"https:\/\/ps.w.org\/trustlens\/assets\/icon.svg?rev=3461127","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>TrustLens<\/strong> is a WooCommerce fraud prevention and chargeback monitoring plugin that assigns every shopper a behavior-based trust score from 0 to 100 and tracks your store's chargeback ratio against card-network thresholds.<\/p>\n\n<p>Instead of guessing which customers are risky, TrustLens analyzes real store behavior \u2014 refunds, order patterns, coupon usage, category risk, linked accounts, chargebacks, and dispute history \u2014 to help you identify high-risk customers early and avoid Visa, Mastercard, Amex, and Discover monitoring programs.<\/p>\n\n<p>At a glance, you can see each customer's trust score, risk segment, and the exact signals that changed it, so you can make confident decisions about refunds, store policies, customer management, and payment risk.<\/p>\n\n<p>TrustLens focuses on behavioral fraud detection for WooCommerce \u2014 identifying risky customer behavior that traditional payment fraud tools often miss.<\/p>\n\n<p>It helps surface the abuse patterns many stores struggle to spot early:<\/p>\n\n<ul>\n<li>serial returners<\/li>\n<li>coupon exploitation<\/li>\n<li>multi-account shoppers<\/li>\n<li>refund abuse<\/li>\n<li>risky customers linked across multiple accounts<\/li>\n<li>chargeback ratios approaching Visa, Mastercard, or Amex monitoring thresholds<\/li>\n<li>dispute and chargeback risk per customer<\/li>\n<\/ul>\n\n<p>The free version is manual by default, giving you the visibility and control to review customers before you take action. Pro adds optional automation, payment controls, dispute tracking, and advanced alerts for stores that need stricter workflows.<\/p>\n\n<h4>Problems TrustLens Solves<\/h4>\n\n<p>Many WooCommerce stores lose revenue from abuse patterns that stay hidden until the damage is already done.<\/p>\n\n<p>Common examples include:<\/p>\n\n<ul>\n<li>customers repeatedly ordering items and returning them after use<\/li>\n<li>shoppers creating multiple accounts to reuse first-order coupons<\/li>\n<li>high refund rates hidden across hundreds of orders<\/li>\n<li>linked customer accounts bypassing store policies<\/li>\n<li>risky customers who later trigger disputes or chargebacks<\/li>\n<\/ul>\n\n<p>Most store owners only notice these issues after they escalate. TrustLens helps you detect these patterns earlier, monitor behavior trends, and take action before abuse grows.<\/p>\n\n<h4>What TrustLens Does<\/h4>\n\n<p>TrustLens turns complex customer behavior into clear, actionable signals store owners can understand.<\/p>\n\n<p><strong>Assigns every customer a trust score.<\/strong> TrustLens calculates a 0-100 trust score for every customer using six detection modules running in the background. Customers are automatically grouped into six segments: <strong>VIP<\/strong>, <strong>Trusted<\/strong>, <strong>Normal<\/strong>, <strong>Caution<\/strong>, <strong>Risk<\/strong>, and <strong>Critical<\/strong>.<\/p>\n\n<p><strong>Tracks the patterns that matter.<\/strong> TrustLens analyzes refund rates, refund value, order completion and cancellation patterns, coupon abuse patterns, category-specific return behavior, and linked accounts across customer identifiers including addresses, phone numbers, IPs, payment methods, and device identifiers (user agent signals).<\/p>\n\n<p><strong>Gives you actionable control.<\/strong> Review detailed customer profiles, block abusive customers from checkout, allowlist trusted buyers, monitor store-wide risk trends, and export data for deeper analysis. The free version focuses on visibility and manual control; Pro adds optional automation, advanced notifications, webhooks, scheduled reports, and payment method risk controls.<\/p>\n\n<p><strong>Watches your chargeback ratio.<\/strong> The dashboard Chargeback Ratio speedometer shows your blended calendar-month ratio at a glance, with a Healthy \/ Approaching threshold \/ Action needed status so you know where you stand against card-network monitoring programs. Pro adds per-brand breakdown (Visa VDMP\/VFMP, Mastercard ECP, Amex, Discover), a 12-month trend chart, and email alerts before you cross a threshold.<\/p>\n\n<h4>What's included in Free<\/h4>\n\n<p>The WordPress.org download is the <strong>fully functional free version<\/strong> \u2014 no trial limits, no disabled scoring, no locked detection modules. Everything you need for visibility and manual control:<\/p>\n\n<ul>\n<li><strong>Complete trust scoring engine<\/strong> (0\u2013100 score with six risk segments)<\/li>\n<li><strong>All six detection modules<\/strong> \u2014 returns, orders, coupons, category risk, linked accounts, shipping address anomalies<\/li>\n<li><strong>Chargeback tracking<\/strong> \u2014 automatic dispute ingestion from Stripe and WooPayments, per-customer dispute counters, manual entry form for other gateways<\/li>\n<li><strong>Dashboard Chargeback Ratio speedometer<\/strong> with Healthy \/ Approaching \/ Action-needed status<\/li>\n<li><strong>Command Center dashboard<\/strong> \u2014 trust score trends, segment distribution, refund activity, high-risk customer list, revenue protection KPIs<\/li>\n<li><strong>Customer management<\/strong> \u2014 search, filter, bulk block \/ unblock \/ allowlist \/ recalculate \/ delete, checkout enforcement<\/li>\n<li><strong>Historical Sync<\/strong> \u2014 build trust profiles from past WooCommerce orders in the background<\/li>\n<li><strong>REST API<\/strong> (8 endpoints), <strong>WooCommerce HPOS compatibility<\/strong>, <strong>GDPR privacy tools<\/strong>, <strong>order-screen integration<\/strong><\/li>\n<li><strong>Core email notifications<\/strong> \u2014 blocked-checkout alerts, activation summary, weekly protection report<\/li>\n<\/ul>\n\n<h4>What Pro adds<\/h4>\n\n<p>For stores that need automation, advanced alerts, and payment-risk workflows:<\/p>\n\n<ul>\n<li><strong>Advanced Chargeback Monitor<\/strong> \u2014 dedicated page with per-brand ratio breakdown (Visa VDMP \/ VFMP, Mastercard ECP, Amex, Discover), 12-month trend chart, trailing-30-day window, recent-disputes activity feed, top-disputed customers with one-click Dispute Evidence Report<\/li>\n<li><strong>Chargeback Ratio Email Alerts<\/strong> \u2014 daily check that emails you before any brand crosses its network threshold, deduplicated per brand per month<\/li>\n<li><strong>Auto-Block After N Lost Disputes<\/strong> \u2014 automatically block customers whose chargebacks hit a configurable threshold<\/li>\n<li><strong>Automation Rules<\/strong> \u2014 trigger-based actions when customer risk changes (block, hold, notify, tag)<\/li>\n<li><strong>Webhooks<\/strong> \u2014 real-time trust events to external systems (score updates, blocks, high-risk orders)<\/li>\n<li><strong>Scheduled Reports<\/strong> \u2014 daily, weekly, or monthly email summaries of store risk activity<\/li>\n<li><strong>Payment Method Risk Controls<\/strong> \u2014 hide specific gateways for high-risk segments, linked accounts, or velocity spikes<\/li>\n<li><strong>10 Advanced Email Notifications<\/strong> \u2014 high-risk orders, repeat refunders, segment changes, velocity spikes, new customer risk, score recovery, dispute events, and more<\/li>\n<li><strong>Advanced Address Analysis<\/strong> \u2014 diversity-trend detection and enhanced country-mismatch severity<\/li>\n<\/ul>\n\n<p><strong>Bottom line:<\/strong> Free surfaces the risk. Pro acts on it.<\/p>\n\n<p>If you need chargeback prevention for WooCommerce, TrustLens Pro helps you track disputes, watch your ratio against Visa, Mastercard, Amex, and Discover monitoring programs, identify repeat high-risk customers earlier, and respond with better data before payment problems escalate.<\/p>\n\n<h4>Free Features<\/h4>\n\n<ul>\n<li><strong>Trust Score Engine<\/strong> \u2014 Every customer receives a 0-100 trust score calculated from weighted behavioral signals<\/li>\n<li><strong>Customer Risk Segments<\/strong> \u2014 Customers are automatically classified into VIP, Trusted, Normal, Caution, Risk, and Critical<\/li>\n<li><strong>Return Abuse Detection<\/strong> \u2014 Detect serial returners by analyzing refund rates, refund frequency, and refund value<\/li>\n<li><strong>Order Pattern Analysis<\/strong> \u2014 Monitor completion rates, cancellation patterns, and unusual order velocity<\/li>\n<li><strong>Coupon Abuse Detection<\/strong> \u2014 Identify repeat first-order coupon use and coupon-then-refund patterns<\/li>\n<li><strong>Category-Aware Risk Scoring<\/strong> \u2014 Apply extra risk when customers show high return rates in specific product categories<\/li>\n<li><strong>Linked Accounts Detection<\/strong> \u2014 Identify customers operating multiple accounts using shared addresses, phone numbers, IPs, payment methods, and device identifiers (user agent signals)<\/li>\n<li><strong>Shipping Address Anomalies<\/strong> \u2014 Detect address hopping, billing\/shipping country mismatches, and rapid address changes that indicate fraud or abuse<\/li>\n<li><strong>Command Center Dashboard<\/strong> \u2014 View store-wide risk analytics including trust score trends, segment distribution, refund activity, high-risk customers, and revenue protection insights<\/li>\n<li><strong>Customer Risk Profiles<\/strong> \u2014 See detailed customer history, trust score signals, linked accounts, and event timelines<\/li>\n<li><strong>Customer Management Tools<\/strong> \u2014 Search, filter, and manage customers using segments, scores, and risk indicators<\/li>\n<li><strong>Bulk Actions<\/strong> \u2014 Block, unblock, allowlist, recalculate scores, or delete customers in bulk<\/li>\n<li><strong>Allowlist Protection<\/strong> \u2014 Protect trusted customers from false positives \u2014 allowlisted customers keep the maximum trust score<\/li>\n<li><strong>Checkout Enforcement<\/strong> \u2014 Blocked customers are prevented from adding items to cart or completing checkout<\/li>\n<li><strong>Historical Sync<\/strong> \u2014 Analyze existing WooCommerce orders to build trust profiles for past customers without affecting frontend performance<\/li>\n<li><strong>Email Notifications<\/strong> \u2014 Receive alerts for blocked checkout attempts, activation summaries, and weekly protection reports<\/li>\n<li><strong>REST API<\/strong> \u2014 Access TrustLens data through 8 REST API endpoints for integrations and external systems<\/li>\n<li><strong>Configurable Scoring Thresholds<\/strong> \u2014 Adjust minimum orders required for scoring, return risk levels, and checkout blocking settings<\/li>\n<li><strong>GDPR Compliance<\/strong> \u2014 Integrates with WordPress privacy tools for customer data export and erasure requests<\/li>\n<li><strong>WooCommerce HPOS Compatibility<\/strong> \u2014 Fully compatible with High-Performance Order Storage<\/li>\n<li><strong>Order Screen Integration<\/strong> \u2014 Customer trust scores and segments appear directly on WooCommerce order edit pages<\/li>\n<li><strong>Chargeback Tracking<\/strong> \u2014 Record disputes and chargebacks from Stripe, WooPayments, or manual entry; dispute history feeds into customer trust scores<\/li>\n<li><strong>Chargeback Ratio Speedometer<\/strong> \u2014 Dashboard shows your blended chargeback ratio this calendar month with a Healthy \/ Approaching threshold \/ Action needed status indicator<\/li>\n<li><strong>Automatic Card Brand Capture<\/strong> \u2014 Card brand recorded on every Stripe\/WooPayments paid order for accurate ratio tracking<\/li>\n<\/ul>\n\n<h4>Pro Features<\/h4>\n\n<ul>\n<li><strong>Automation Rules<\/strong> \u2014 Create trigger-based rules that automatically run actions when customer risk changes<\/li>\n<li><strong>Webhooks<\/strong> \u2014 Send real-time trust events and customer risk updates to external systems or custom endpoints<\/li>\n<li><strong>Scheduled Reports<\/strong> \u2014 Receive daily, weekly, or monthly reports summarizing store risk activity and customer trends<\/li>\n<li><strong>Advanced Chargeback Monitor<\/strong> \u2014 Per-brand ratio breakdown (Visa, Mastercard, Amex, Discover), 12-month trend chart, trailing-30-day window, daily email alerts when any brand approaches its network threshold, dedicated Chargeback Monitor page<\/li>\n<li><strong>Payment Method Risk Controls<\/strong> \u2014 Hide specific payment gateways for high-risk customers, linked accounts, or velocity spikes<\/li>\n<li><strong>Advanced Notifications<\/strong> \u2014 Receive alerts for high-risk orders, repeat refunders, segment changes, velocity spikes, and dispute events<\/li>\n<li><strong>Advanced Address Analysis<\/strong> \u2014 Diversity trend detection and enhanced country mismatch severity for deeper shipping fraud analysis<\/li>\n<\/ul>\n\n<h4>Who TrustLens Is For<\/h4>\n\n<ul>\n<li><strong>WooCommerce store owners<\/strong> dealing with serial returners, refund abuse, or risky customers<\/li>\n<li><strong>Operations managers<\/strong> who need data to manage customer policies with confidence<\/li>\n<li><strong>Fraud prevention teams<\/strong> looking beyond payment fraud signals<\/li>\n<li><strong>Stores with generous return policies<\/strong> that attract both loyal customers and abuse<\/li>\n<\/ul>\n\n<h4>How Trust Scoring Works<\/h4>\n\n<p>Every customer begins with a base score of <strong>50<\/strong>. TrustLens detection modules analyze behavior and apply positive or negative signals:<\/p>\n\n<ul>\n<li>completed orders increase trust<\/li>\n<li>refunds decrease trust based on frequency and value<\/li>\n<li>coupon abuse patterns apply penalties<\/li>\n<li>high return rates in specific categories add additional risk<\/li>\n<li>linked accounts with risky customers reduce scores<\/li>\n<li>account age adds a loyalty bonus (up to +15 for long-standing customers)<\/li>\n<\/ul>\n\n<p>Scores are always kept between 0 and 100. Customers below the configurable minimum order threshold (default: 3 orders) remain in the Normal segment until enough data exists for reliable scoring.<\/p>\n\n<p>All scoring signals are visible in the customer profile so you can see exactly how each score was calculated.<\/p>\n\n<h4>Built for Modern WooCommerce Stores<\/h4>\n\n<p>TrustLens is designed for production WooCommerce stores and growing order volume.<\/p>\n\n<p>Key architecture features include:<\/p>\n\n<ul>\n<li>asynchronous background processing via Action Scheduler<\/li>\n<li>WooCommerce HPOS compatibility<\/li>\n<li>REST API integration support<\/li>\n<li>batch-based historical order analysis<\/li>\n<li>lightweight checkout enforcement<\/li>\n<\/ul>\n\n<p>These design choices let TrustLens analyze customer behavior without slowing down your store.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin may connect to external services as described below.<\/p>\n\n<h4>Freemius SDK<\/h4>\n\n<p>This plugin uses the <a href=\"https:\/\/freemius.com\">Freemius<\/a> SDK for optional usage tracking, license management, and plugin updates.<\/p>\n\n<p><strong>When data is sent:<\/strong><\/p>\n\n<ul>\n<li>During plugin activation, only if the user explicitly opts in<\/li>\n<li>When checking for plugin updates<\/li>\n<li>When activating or deactivating a Pro license<\/li>\n<\/ul>\n\n<p><strong>What data is sent:<\/strong><\/p>\n\n<ul>\n<li>Site URL, WordPress version, and PHP version<\/li>\n<li>Plugin version and activation status<\/li>\n<li>Admin email (only if opted in)<\/li>\n<li>License key (Pro version only)<\/li>\n<\/ul>\n\n<p><strong>Important:<\/strong> No data is sent unless you explicitly opt in during plugin activation. You can skip the opt-in entirely and use the free version without sharing any data.<\/p>\n\n<ul>\n<li>Service: <a href=\"https:\/\/freemius.com\">Freemius<\/a><\/li>\n<li>Terms of Service: <a href=\"https:\/\/freemius.com\/terms\/\">https:\/\/freemius.com\/terms\/<\/a><\/li>\n<li>Privacy Policy: <a href=\"https:\/\/freemius.com\/privacy\/\">https:\/\/freemius.com\/privacy\/<\/a><\/li>\n<\/ul>\n\n<h4>Webhooks (Pro, Optional)<\/h4>\n\n<p>When webhooks are enabled in TrustLens settings (Pro feature), the plugin sends HTTP POST requests to URLs configured by the administrator.<\/p>\n\n<p><strong>When data is sent:<\/strong><\/p>\n\n<ul>\n<li>When a customer's trust score is updated (if enabled)<\/li>\n<li>When a customer is blocked (if enabled)<\/li>\n<li>When a checkout is blocked (if enabled)<\/li>\n<li>When a high-risk order is placed (if enabled)<\/li>\n<li>When testing webhook connectivity<\/li>\n<\/ul>\n\n<p><strong>What data is sent:<\/strong><\/p>\n\n<ul>\n<li>Customer email hash and, when available, the customer email stored in TrustLens<\/li>\n<li>Trust score and customer segment<\/li>\n<li>Event type and timestamp<\/li>\n<li>Order details for high-risk order events (order ID, total, status)<\/li>\n<li>Site URL and site name<\/li>\n<\/ul>\n\n<p><strong>Important:<\/strong> Webhook endpoints are entirely configured by you. No data is sent to any third-party service unless you explicitly add webhook URLs. The plugin does not send data to the plugin developer or any default external service.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>trustlens<\/code> folder to <code>\/wp-content\/plugins\/<\/code> or install directly from the WordPress plugin repository<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu<\/li>\n<li>Navigate to <strong>TrustLens &gt; Dashboard<\/strong> to see the command center<\/li>\n<li>Go to <strong>TrustLens &gt; Settings<\/strong> to configure scoring thresholds, blocking, and notifications<\/li>\n<li>Run <strong>Historical Sync<\/strong> from the dashboard to import existing customer data from WooCommerce orders<\/li>\n<\/ol>\n\n<p>The historical sync runs in the background and does not affect site performance.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20trustlens%20work%20with%20guest%20checkout%3F\"><h3>Does TrustLens work with guest checkout?<\/h3><\/dt>\n<dd><p>Yes. Customers are identified by a hash of their email address, so guest and registered customers are tracked equally. If a guest later registers, their history carries over.<\/p><\/dd>\n<dt id=\"will%20trustlens%20automatically%20block%20customers%3F\"><h3>Will TrustLens automatically block customers?<\/h3><\/dt>\n<dd><p>By default, no. The free version is manual: it surfaces customer risk data, and you decide when to block or allowlist someone. Pro can optionally automate specific actions, including alerts, order holds, verification requirements, and customer blocking if you configure automation rules or chargeback auto-blocking.<\/p><\/dd>\n<dt id=\"how%20does%20linked%20accounts%20detection%20work%3F\"><h3>How does linked accounts detection work?<\/h3><\/dt>\n<dd><p>TrustLens creates fingerprints from shipping addresses, billing addresses, phone numbers, IP addresses, payment methods, and device user agents. When multiple customer accounts share fingerprints, they are flagged as linked. This helps detect multi-account abuse like repeated first-order discounts.<\/p><\/dd>\n<dt id=\"can%20trustlens%20help%20reduce%20return%20abuse%20and%20refund%20abuse%20in%20woocommerce%3F\"><h3>Can TrustLens help reduce return abuse and refund abuse in WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. TrustLens tracks refund rate, refund value, refund frequency, category-specific return behavior, and related customer patterns over time. This helps you spot serial returners and high-risk refund behavior earlier instead of reviewing refunds one order at a time.<\/p><\/dd>\n<dt id=\"can%20trustlens%20help%20with%20chargebacks%20and%20disputes%3F\"><h3>Can TrustLens help with chargebacks and disputes?<\/h3><\/dt>\n<dd><p>Yes. TrustLens Pro includes chargeback and dispute tracking for Stripe and WooPayments, plus manual dispute recording. Dispute history can affect customer trust scores, and you can use that data to identify risky customers earlier and reduce payment risk in your store.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20block%20a%20customer%3F\"><h3>What happens when I block a customer?<\/h3><\/dt>\n<dd><p>Blocked customers see a customizable message when they try to add items to their cart or proceed to checkout. The block applies to both logged-in users and guest checkouts matching the blocked email. All blocked checkout attempts are logged.<\/p><\/dd>\n<dt id=\"can%20i%20undo%20a%20block%3F\"><h3>Can I undo a block?<\/h3><\/dt>\n<dd><p>Yes. You can unblock a customer at any time from their profile page or the customer list. You can also add customers to the allowlist, which locks their score at 100 and prevents any negative signals from affecting them.<\/p><\/dd>\n<dt id=\"what%20happens%20right%20after%20i%20install%20trustlens%3F\"><h3>What happens right after I install TrustLens?<\/h3><\/dt>\n<dd><p>New WooCommerce orders are analyzed automatically after activation. If you already have historical orders, you can run Historical Sync from the dashboard to build trust profiles from your existing store data without slowing down the frontend.<\/p><\/dd>\n<dt id=\"does%20this%20slow%20down%20my%20store%3F\"><h3>Does this slow down my store?<\/h3><\/dt>\n<dd><p>No. Score calculations run asynchronously via Action Scheduler (the same system WooCommerce uses). Checkout blocking uses a lightweight email-hash lookup. The historical sync processes orders in small batches in the background.<\/p><\/dd>\n<dt id=\"does%20trustlens%20send%20customer%20data%20to%20an%20external%20service%3F\"><h3>Does TrustLens send customer data to an external service?<\/h3><\/dt>\n<dd><p>No. TrustLens works inside your WordPress and WooCommerce installation. It does not send customer data to the plugin developer or to any default third-party service. External delivery only happens if you explicitly configure features like webhooks or email notifications.<\/p><\/dd>\n<dt id=\"is%20trustlens%20compatible%20with%20woocommerce%20hpos%3F\"><h3>Is TrustLens compatible with WooCommerce HPOS?<\/h3><\/dt>\n<dd><p>Yes. TrustLens declares full compatibility with High-Performance Order Storage and works with both legacy and HPOS-enabled stores.<\/p><\/dd>\n<dt id=\"does%20trustlens%20store%20personal%20data%3F\"><h3>Does TrustLens store personal data?<\/h3><\/dt>\n<dd><p>TrustLens stores customer email addresses and behavioral data (order counts, refund counts, trust scores) in custom database tables. Matching identifiers used for linked-account detection are pseudonymized using keyed HMAC-SHA256 hashes, preventing the raw values from being exposed or reused across sites. The plugin integrates with WordPress privacy tools \u2014 customers can request data export or erasure through the standard WordPress privacy workflow.<\/p><\/dd>\n<dt id=\"can%20i%20access%20trustlens%20data%20from%20external%20systems%3F\"><h3>Can I access TrustLens data from external systems?<\/h3><\/dt>\n<dd><p>Yes. TrustLens includes a REST API with 8 endpoints for looking up customers, retrieving scores, filtering by segment, and triggering recalculations. API access requires either the <code>manage_woocommerce<\/code> capability or a valid API key configured in settings.<\/p><\/dd>\n<dt id=\"can%20i%20get%20alerts%20and%20reports%20by%20email%3F\"><h3>Can I get alerts and reports by email?<\/h3><\/dt>\n<dd><p>Yes. The free version includes core email notifications such as blocked checkout alerts, a welcome summary, and a weekly summary. Pro adds advanced alerts, daily digests, monthly revenue protection reports, and scheduled email reports.<\/p><\/dd>\n<dt id=\"what%20is%20the%20minimum%20data%20needed%20for%20accurate%20scoring%3F\"><h3>What is the minimum data needed for accurate scoring?<\/h3><\/dt>\n<dd><p>By default, customers need at least 3 orders before they move out of the Normal segment. You can adjust this threshold in Settings &gt; General. Customers below the threshold still accumulate signals \u2014 they just aren't classified until enough data exists.<\/p><\/dd>\n<dt id=\"does%20the%20free%20version%20include%20all%20detection%20modules%3F\"><h3>Does the free version include all detection modules?<\/h3><\/dt>\n<dd><p>Yes. All six detection modules (returns, orders, coupons, categories, linked accounts, shipping address anomalies) are included in the free version. Pro adds automation, webhooks, scheduled reports, chargeback tracking, and advanced notifications.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.2<\/h4>\n\n<p><strong>Automation Rules \u2014 reliability rewrite + major capability expansion.<\/strong> Plus Card-Testing Defense admin UX consolidation.<\/p>\n\n<p><strong>Automation<\/strong><\/p>\n\n<ul>\n<li><strong>Added triggers:<\/strong> Chargeback Filed \u00b7 Dispute Recorded \u00b7 Linked Accounts Detected \u00b7 Card Testing Attack \u00b7 Shipping Anomaly.<\/li>\n<li><strong>Added condition fields:<\/strong> Total Order Value \u00b7 Total Disputes \u00b7 Linked Accounts \u00b7 Coupon Then Refund \u00b7 Cancelled Orders \u00b7 Customer Type \u00b7 Is Blocked \u00b7 Customer Age \u00b7 Days Since Last Order \u00b7 Payment Method \u00b7 Shipping Country \u00b7 Billing Country \u00b7 Country Mismatch \u00b7 Coupon Total.<\/li>\n<li><strong>Added actions:<\/strong> Allowlist Customer \u00b7 Cancel Order.<\/li>\n<li><strong>Added:<\/strong> Save-time validator blocks rules that can never fire \u2014 unsatisfiable conditions, schema-bound violations, trigger-state contradictions, invalid operators for the field type, incomplete actions \u2014 each with a specific inline reason.<\/li>\n<li><strong>Added:<\/strong> Inspector shows <code>SKIP<\/code> status on evaluations that didn't execute, with the reason (\"Cooldown active\" \/ \"Condition not met: trust_score &gt; 50\"). Directly answers \"why didn't my rule fire?\".<\/li>\n<li><strong>Changed:<\/strong> Webhooks now dispatch async with automatic retry (60s\/120s\/240s backoff) and are HMAC-SHA256 signed by default.<\/li>\n<li><strong>Changed:<\/strong> Rule editor no longer full-page-reloads on save or delete; errors appear inline inside the modal.<\/li>\n<li><strong>Fixed:<\/strong> Concurrent rule saves were last-write-wins \u2014 now serialized via advisory lock.<\/li>\n<li><strong>Fixed:<\/strong> A failed action locked the rule out for an hour via cooldown \u2014 now clears on error so the next event retries.<\/li>\n<li><strong>Fixed:<\/strong> Rules with an unknown condition field silently matched everything (catastrophic for <code>block_customer<\/code> rules). Now rejected.<\/li>\n<li><strong>Fixed:<\/strong> Timezone drift between log timestamps and inspector counters when MySQL server TZ \u2260 site TZ.<\/li>\n<li><strong>Fixed:<\/strong> Operators <code>&lt;<\/code>, <code>&lt;=<\/code>, <code>&lt;&gt;<\/code> couldn't save at all.<\/li>\n<li><strong>Fixed:<\/strong> \"Send Email\" action ignored the recipient field; now honors it as a per-rule override (falls back to site notification email when blank).<\/li>\n<li><strong>Fixed:<\/strong> \"Refund Processed\" trigger silently dropped order context \u2014 order-only actions\/conditions never fired on refunds.<\/li>\n<\/ul>\n\n<p><strong>Admin UX \u2014 Card-Testing Defense + Dashboard<\/strong><\/p>\n\n<ul>\n<li><strong>Changed:<\/strong> Card-Testing Defense page consolidated from four tabs into a single live view \u2014 panic controls, live state, and targeted fingerprints visible without clicking.<\/li>\n<li><strong>Added:<\/strong> Dashboard alert band for active Panic Freeze, targeted lockdowns, and card-network programs over chargeback threshold.<\/li>\n<li><strong>Added:<\/strong> Module-status pill row on the dashboard (on\/off + one stat for each subsystem).<\/li>\n<li><strong>Added:<\/strong> Persistent plugin-wide admin header with unified nav, live status pill, notifications bell, and \u2318K command palette.<\/li>\n<li><strong>Fixed:<\/strong> Unchecking \"Enable Card-Testing Defense\" or \"VIP bypass\" didn't save (Settings API checkbox quirk).<\/li>\n<li><strong>Fixed:<\/strong> Slack webhook delivery failures are now logged instead of swallowed.<\/li>\n<li><strong>Fixed:<\/strong> Uninstall clears card-testing options and cron hooks; deactivation unschedules card-testing crons.<\/li>\n<li><strong>Fixed:<\/strong> Card-testing attacks with an identifiable customer email now fire <code>trustlens\/checkout_blocked<\/code> (once per newly-targeted fingerprint) so Notifications \/ Automation \/ Webhooks can react.<\/li>\n<\/ul>\n\n<p>Safe additive upgrade \u2014 new composite index added idempotently, no data migration.<\/p>\n\n<h4>1.5.0<\/h4>\n\n<p><strong>Card-Testing Defense \u2014 Pro tier<\/strong><\/p>\n\n<ul>\n<li><strong>Added (Pro):<\/strong> Auto-escalation from targeted blocking to global panic freeze when an attack spreads across multiple device fingerprints. Default threshold: 3 distinct devices in a 10-minute window.<\/li>\n<li><strong>Added (Pro):<\/strong> Geographic-diversity safeguard. Before auto-escalating, checks whether the decline burst is naturally distributed across \u226510 countries with no single country holding &gt;50% \u2014 if so, treats as a legitimate flash-sale or viral-moment burst and holds off.<\/li>\n<li><strong>Added (Pro):<\/strong> Fingerprint and IP CIDR allowlists. Devices or IP ranges on the allowlist bypass the card-testing defense entirely \u2014 for QA, integration partners, or known-good traffic. Both IPv4 and IPv6 CIDR ranges supported.<\/li>\n<li><strong>Added (Pro):<\/strong> Advanced fingerprint signal \u2014 enumerates 12 common fonts via baseline-width comparison and adds the detected-fonts list to the fingerprint hash. Harder for botnets to spoof consistently across nodes than canvas + screen alone. Opt-in via script tag data attribute (only injected when Pro is licensed AND card-testing is enabled).<\/li>\n<li><strong>Added (Pro):<\/strong> Per-fingerprint threshold overrides. Tighter or looser thresholds for specific known devices.<\/li>\n<li><strong>Added (Pro):<\/strong> Attack History tab \u2014 24h decline count, decline-code breakdown, top-10 attacking fingerprints, hourly timeline chart (Chart.js). CSV export of all velocity events in the window.<\/li>\n<li><strong>Added (Pro):<\/strong> Slack and email alert dispatcher \u2014 subscribes to <code>attack_detected<\/code>, <code>auto_escalated<\/code>, and <code>panic_button_activated<\/code> events. Configure a Slack webhook and\/or email address to receive attack notifications.<\/li>\n<li><strong>Added (Pro):<\/strong> Documented stable contract on the <code>trustlens\/panic_button_activated<\/code> action \u2014 Pro integrators can rely on the signature and timing.<\/li>\n<li>Free tier behavior unchanged.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<p><strong>Card-Testing Defense (Free) \u2014 blocks stolen-card attack traffic before it reaches the payment gateway<\/strong><\/p>\n\n<ul>\n<li><strong>Added (Free):<\/strong> Real-time card-testing detection. Watches per-device decline rates in 60-second and 10-minute rolling windows. A device that crosses the decline threshold is blocked from checkout for 90 seconds. No merchant configuration required \u2014 sensible defaults ship enabled.<\/li>\n<li><strong>Added (Free):<\/strong> Panic Freeze button on the new TrustLens \u2192 Card-Testing Defense admin page. One click blocks ALL checkouts for 15 minutes (configurable 5m\/30m\/1h). Use during active attacks your thresholds haven't caught.<\/li>\n<li><strong>Added (Free):<\/strong> VIP Customer Bypass (enabled by default). Customers with at least one successful past order are never blocked by card-testing velocity \u2014 attacks can't disrupt legitimate repeat buyers.<\/li>\n<li><strong>Added (Free):<\/strong> Negative trust-score signal for customers linked to device fingerprints involved in past attacks \u2014 keeps bad actors scored correctly even after the 90-second targeted block expires.<\/li>\n<li><strong>Added (Free):<\/strong> <code>during_attack_window<\/code> event logged on orders completed while an attack is active \u2014 audit trail of which successful orders slipped through.<\/li>\n<li><strong>Added (Free):<\/strong> Dashboard widget shows current defense state (IDLE \/ TARGETED \/ PANIC) and 24-hour decline count at a glance.<\/li>\n<li><strong>Added (Free):<\/strong> Daily retention cron keeps the velocity-events table trimmed to the configured window (default 48h, configurable 24\u2013168h).<\/li>\n<li><strong>Note on velocity systems:<\/strong> This feature's \"velocity\" is keyed on <em>device fingerprint<\/em> and measures <em>gateway declines<\/em> \u2014 unrelated to the existing Payment-Method Controls velocity (email-keyed, completed-order-count-based) and Shipping Anomalies velocity (email-keyed, distinct-address-count-based). Three independent systems, three different threats, three different responses.<\/li>\n<li><strong>Coming in 1.5 (Pro):<\/strong> Auto-escalation to global freeze, geographic-diversity flash-sale safeguard, fingerprint allowlists, attack-history analytics, Slack \/ email alerts.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<p><strong>Request-gate infrastructure \u2014 card-testing defense foundation<\/strong><\/p>\n\n<ul>\n<li><strong>Added (Free):<\/strong> Internal <code>TrustLens_Request_Gate<\/code> primitive intercepts Classic checkout <em>and<\/em> Blocks \/ Store API checkout through a single rule-registration surface. Fraud modules register rules; the gate dispatches them pre-gateway.<\/li>\n<li><strong>Added (Free):<\/strong> Browser fingerprint collection on checkout and cart pages \u2014 pseudonymous SHA-256 hash of canvas + screen + timezone + language + platform + WebGL signals. Raw signals never leave the browser. Server-side fallback hash when JS is disabled. Schema migration adds 5 new columns to <code>wp_trustlens_fingerprints<\/code> (fp_source, decline_count_24h, taint_flag, taint_reason, tainted_at).<\/li>\n<li><strong>Improved (Free):<\/strong> Email blocklist (customers marked blocked in the admin) now takes effect on Blocks checkout in addition to Classic \u2014 existing behavior of the <code>Checkout_Blocker<\/code> class, now dispatched through the gate instead of its own hooks.<\/li>\n<li><strong>Dev note:<\/strong> This is an infrastructure release. The card-testing detection engine (velocity windows, lockdown state machine, panic button, admin UI) ships in 1.4.0 and builds on this foundation.<\/li>\n<li><strong>Dev note:<\/strong> PHPUnit test suite scaffolding added (<code>composer.json<\/code>, <code>phpunit.xml.dist<\/code>, <code>tests\/<\/code>). Not shipped in distribution zips.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<p><strong>Chargeback Ratio Monitor \u2014 new feature<\/strong><\/p>\n\n<ul>\n<li><strong>Added (Free):<\/strong> Dashboard Chargeback Ratio speedometer \u2014 blended calendar-month ratio with a <strong>Healthy \/ Approaching threshold \/ Action needed<\/strong> status so you can see store health at a glance.<\/li>\n<li><strong>Added (Free):<\/strong> Chargeback tracking moved from Pro to Free \u2014 automatic dispute ingestion from Stripe and WooPayments, per-customer dispute counters, and chargeback impact on trust scores now ship in every build.<\/li>\n<li><strong>Added (Free):<\/strong> Manual chargeback entry form on the order edit page for gateways that don't push dispute webhooks to WooCommerce (PayPal, Square, offline).<\/li>\n<li><strong>Added (Free):<\/strong> Automatic card brand capture on Stripe and WooPayments paid orders. Historical Sync also captures card brand, so one sync run populates both trust profiles and chargeback-ratio data.<\/li>\n<li><strong>Added (Pro):<\/strong> Dedicated <strong>TrustLens \u2192 Chargeback Monitor<\/strong> page \u2014 per-brand ratio breakdown (Visa VDMP\/VFMP, Mastercard ECP, Amex, Discover) with threshold progress bars, 12-month trend chart, recent disputes activity feed, top-disputed customers with one-click Evidence Report, store-wide dispute outcomes summary, and inline alert-threshold control.<\/li>\n<li><strong>Added (Pro):<\/strong> Daily email alert when any card brand reaches a configurable percent (default 70%) of its network threshold. Deduplicated per brand per calendar month \u2014 one email per brand, no spam.<\/li>\n<li><strong>Added (Pro):<\/strong> Trailing-30-day ratio window alongside the Free calendar-month view, plus a customizable warn-threshold percent (50\u2013100%).<\/li>\n<li><strong>Added (Pro):<\/strong> Auto-block after N lost disputes is now actually enforced. The setting has existed since 1.2.0 but had no runtime effect until this release.<\/li>\n<\/ul>\n\n<p><strong>Fixes &amp; improvements<\/strong><\/p>\n\n<ul>\n<li><strong>Fixed:<\/strong> Bulk customer actions (block, unblock, allowlist, remove-allowlist, recalculate, delete) failed with a fatal error due to a broken dispatch call to a non-existent <code>TrustLens_Bulk_Operations::instance()-&gt;execute()<\/code> method. The AJAX handler now dispatches directly to the correct static methods with a whitelisted action set.<\/li>\n<li><strong>Improved:<\/strong> Chargeback Monitor ratio and trend queries are now transient-cached (15 min \/ 1 hour TTL) with automatic invalidation on new disputes or brand-backfill runs, so the dashboard doesn't re-query order meta on every page load.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li><strong>Added:<\/strong> Shipping Address Anomalies detection module \u2014 detects address hopping, billing\/shipping country mismatches, and address change velocity.<\/li>\n<li><strong>Added:<\/strong> Address diversity ratio scoring \u2014 penalizes customers who ship to many different addresses relative to order count.<\/li>\n<li><strong>Added:<\/strong> Billing\/shipping country mismatch detection \u2014 flags cross-border shipping patterns.<\/li>\n<li><strong>Added:<\/strong> Address change velocity signal \u2014 detects rapid address changes within a configurable time window.<\/li>\n<li><strong>Added:<\/strong> Pro address diversity trend analysis \u2014 detects sudden behavioral shifts in shipping address patterns.<\/li>\n<li><strong>Added:<\/strong> Pro enhanced country mismatch severity \u2014 deeper pattern analysis for reshipping fraud detection.<\/li>\n<li><strong>Added:<\/strong> Historical backfill for country codes on existing address fingerprints.<\/li>\n<li><strong>Added:<\/strong> Configurable velocity window setting (7-90 days, default 30) in Settings &gt; Modules.<\/li>\n<li><strong>Added:<\/strong> Customer Detail Analyst Grid \u2014 redesigned customer profile with trust score gauge, signal impact bars, return rate trend chart, activity feed, linked accounts, and collapsible admin notes.<\/li>\n<li><strong>Added:<\/strong> Weekly return rate trend data with 1-hour transient cache for the customer profile chart.<\/li>\n<li><strong>Fixed:<\/strong> ActionScheduler runaway loop on the email-hash backfill \u2014 scheduling is now idempotent and race-free via replace-semantics, backfill batches are try\/catch isolated, and failing orders are tagged with a sentinel so one bad row can't block the backfill forever. Removed the <code>admin_init<\/code> scheduler that caused unbounded fan-out on sites with heartbeat traffic.<\/li>\n<li><strong>Fixed:<\/strong> Shipping anomalies country-code backfill silent-skip loop \u2014 unresolvable rows now get a sentinel value so they drop out of the <code>NULL<\/code> result set, and the batch runner terminates cleanly on all failure modes.<\/li>\n<li><strong>Fixed:<\/strong> Historical sync no longer hangs in \"running\" state when a single malformed order throws \u2014 transitions to a terminal \"failed\" state so the user can retry from the UI.<\/li>\n<li><strong>Fixed:<\/strong> Hash column migration was skipped on sites whose stored DB version already matched the current version.<\/li>\n<li><strong>Fixed:<\/strong> Reset data now succeeds on free installs that don't have Pro-only tables.<\/li>\n<li><strong>Fixed:<\/strong> Customer lookup now accepts legacy 32-char MD5 hashes alongside the current SHA-256 format for backward compatibility.<\/li>\n<li><strong>Fixed:<\/strong> Customer detail page <code>first_order_date<\/code> null guard prevents a PHP notice on customers whose first order date isn't set.<\/li>\n<\/ul>\n\n<h4>1.1.8<\/h4>\n\n<ul>\n<li><strong>Fixed:<\/strong> Prevented excessive ActionScheduler task accumulation \u2014 order meta saves no longer trigger unnecessary WooCommerce analytics reimports.<\/li>\n<li><strong>Added:<\/strong> Daily cleanup of completed ActionScheduler actions older than 7 days to keep the database lean.<\/li>\n<li><strong>Updated:<\/strong> Freemius SDK.<\/li>\n<\/ul>\n\n<h4>1.1.7<\/h4>\n\n<ul>\n<li><strong>Added:<\/strong> Pro one-click Dispute Evidence Report \u2014 generate a professional, print-ready behavioral risk report for payment processor dispute responses.<\/li>\n<li><strong>Added:<\/strong> \"Dispute Report\" button on the customer profile page and order metabox for instant report generation.<\/li>\n<li><strong>Added:<\/strong> Report includes trust score, risk signals, order history, return analysis vs store average, linked accounts, and full event timeline.<\/li>\n<li><strong>Added:<\/strong> Extensible action hooks <code>trustlens\/customer_profile_actions<\/code> and <code>trustlens\/order_metabox_actions<\/code> for Pro feature buttons.<\/li>\n<\/ul>\n\n<h4>1.1.6<\/h4>\n\n<ul>\n<li><strong>Added:<\/strong> Color-coded trust segment badge column on the WooCommerce orders list \u2014 see customer risk at a glance while processing orders.<\/li>\n<li><strong>Added:<\/strong> Segment filter dropdown on the orders list \u2014 filter orders by Critical, Risk, Caution, Normal, Trusted, or VIP segment.<\/li>\n<li><strong>Added:<\/strong> Sortable trust column \u2014 click the column header to sort orders by segment severity (Critical first).<\/li>\n<li><strong>Added:<\/strong> Trust badge links directly to the TrustLens customer profile for one-click access to full behavioral history.<\/li>\n<li><strong>Added:<\/strong> Automatic <code>_trustlens_email_hash<\/code> order meta storage with background backfill for existing orders via Action Scheduler.<\/li>\n<li><strong>Improved:<\/strong> Unscored customers display a \"New\" badge; safe segments (Normal, Trusted, VIP) use muted styling to draw attention to risky orders.<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li><strong>Added:<\/strong> Shared TrustLens mail sender with recipient validation, structured error capture, and rolling email delivery logs.<\/li>\n<li><strong>Added:<\/strong> Keyed HMAC-SHA256 hashing for customer identifiers and linked-account fingerprints.<\/li>\n<li><strong>Changed:<\/strong> Refreshed the WordPress.org plugin title, description, FAQs, and search-focused copy for clearer positioning around customer risk, abuse detection, disputes, and chargebacks.<\/li>\n<li><strong>Changed:<\/strong> Split the admin controller into focused pages, settings, notices, and AJAX service classes for cleaner maintenance.<\/li>\n<li><strong>Fixed:<\/strong> Welcome summary is now marked sent only after successful delivery and can retry after transient mail failures.<\/li>\n<li><strong>Fixed:<\/strong> Test notification now uses the same delivery path as real emails and surfaces detailed mailer errors when available.<\/li>\n<li><strong>Fixed:<\/strong> Scheduled reports now honor weekly\/monthly recipient settings, support comma-separated recipient lists, run at the configured due time, and include a working manual \"Send Now\" path.<\/li>\n<li><strong>Fixed:<\/strong> Stored scheduled reports now track real per-recipient delivery results, retry failed sends, and avoid false-positive \"sent\" logs.<\/li>\n<li><strong>Fixed:<\/strong> Privacy export and erasure now include signals, linked-account fingerprints, category stats, and automation logs.<\/li>\n<li><strong>Fixed:<\/strong> Automation actions now write canonical action IDs and analytics\/ROI reporting now read the correct action names.<\/li>\n<li><strong>Fixed:<\/strong> Customer blocking now logs <code>customer_blocked<\/code> events consistently so reports and event-based metrics stay accurate.<\/li>\n<li><strong>Fixed:<\/strong> Customer state changes now use consistent canonical events and webhook wiring for blocked, unblocked, and allowlisted flows.<\/li>\n<li><strong>Improved:<\/strong> Notification and report cron hooks are now reconciled during runtime, cleared when disabled, and cleaned up correctly on uninstall.<\/li>\n<li><strong>Improved:<\/strong> Reset and customer delete flows now clear all related operational data, logs, and derived records consistently.<\/li>\n<li><strong>Removed:<\/strong> TrustLens-specific auto-update notice and one-click auto-update toggle so plugin updates are managed only through standard WordPress controls.<\/li>\n<li><strong>Removed:<\/strong> Remaining active <code>md5()<\/code> usage from plugin code, replacing it with SHA-256 for internal dedupe keys.<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li><strong>Added:<\/strong> Dashboard chart cards now show polished empty-state UI for Trust Score Trends, Refund Activity, Activity by Hour, and Protection Trend when data is unavailable.<\/li>\n<li><strong>Fixed:<\/strong> Historical Sync completion summary now reports the actual profiled customer count from the TrustLens customer table.<\/li>\n<li><strong>Fixed:<\/strong> Dashboard health attention messaging now aligns with actual risk-customer counts.<\/li>\n<li><strong>Improved:<\/strong> Historical Sync backfill now reconstructs historical events with original timestamps and keeps rebuilds idempotent.<\/li>\n<li><strong>Docs:<\/strong> Deployment guide now documents only Freemius ZIP based WordPress.org deploy flow.<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li><strong>Added:<\/strong> Historical Sync now backfills coupon behavior metrics (<code>total_coupons_used<\/code>, <code>first_order_coupons<\/code>, <code>coupon_then_refund<\/code>) from older WooCommerce orders.<\/li>\n<li><strong>Added:<\/strong> Historical Sync now rebuilds category aggregates and linked-account fingerprints from historical orders for more accurate scoring inputs.<\/li>\n<li><strong>Added:<\/strong> Historical Sync now reconstructs historical timeline events (orders, refunds, coupon events) using original order\/refund timestamps.<\/li>\n<li><strong>Improved:<\/strong> Sync backfill paths are re-sync safe and remove previously generated synthetic sync events before rebuilding.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li><strong>Fixed:<\/strong> Historical Sync now safely handles WooCommerce refund objects and no longer fails with <code>OrderRefund::get_billing_email()<\/code> errors.<\/li>\n<li><strong>Fixed:<\/strong> Empty dashboard sync flow now always shows the correct progress UI when sync starts.<\/li>\n<li><strong>Improved:<\/strong> Sync batch AJAX failures now recover UI state instead of leaving controls hidden.<\/li>\n<li><strong>Added:<\/strong> Reliable activation redirect to TrustLens dashboard after plugin activation.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li><strong>Fixed:<\/strong> Historical Sync now surfaces precise server error messages instead of generic AJAX failures.<\/li>\n<li><strong>Fixed:<\/strong> Optimized sync startup order counting to avoid loading all order IDs in memory.<\/li>\n<li><strong>Fixed:<\/strong> Corrected sync customer totals to count only newly inserted customers across batches.<\/li>\n<li><strong>Improved:<\/strong> Refactored duplicated batch-processing logic into a shared internal helper for consistency.<\/li>\n<li><strong>Improved:<\/strong> Removed unused sync polling code path and dead AJAX endpoint, and hardened Action Scheduler fallbacks.<\/li>\n<li><strong>Fixed:<\/strong> Ensured WordPress pointer assets are enqueued on TrustLens admin pages to prevent Freemius pointer JS errors.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li><strong>Added:<\/strong> New dedicated <strong>Payment Controls<\/strong> settings tab.<\/li>\n<li><strong>Added:<\/strong> Pro <strong>Payment Method Risk Controls<\/strong> to hide selected gateways for risky segments at checkout.<\/li>\n<li><strong>Added:<\/strong> Pro <strong>Velocity Protection<\/strong> for temporary gateway restrictions during high order-attempt spikes.<\/li>\n<li><strong>Added:<\/strong> Pro <strong>Linked Account Protection<\/strong> using linked-account fingerprints (address, phone, IP, device) for real-time gateway restriction decisions.<\/li>\n<li><strong>Improved:<\/strong> Restriction event logging now includes trigger reasons and linked-account risk context for auditability.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li><strong>Added:<\/strong> Redesigned Pro upsell experience with polished value panels, comparison rows, and improved CTAs across Automation, Notifications, Webhooks, Reports, and Chargebacks.<\/li>\n<li><strong>Improved:<\/strong> Unified upsell rendering via a shared component for more consistent styling and messaging.<\/li>\n<li><strong>Improved:<\/strong> Dashboard empty state now always shows the Historical Sync action (with clearer guidance when no eligible historical orders exist).<\/li>\n<li><strong>Fixed:<\/strong> Removed obsolete locked-notification upsell styles and redundant upsell markup paths.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>UI Improvements.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li><strong>Added:<\/strong> Automation is now a dedicated menu (TrustLens \u2192 Automation) with its own page and dashboard-style layout.<\/li>\n<li><strong>Added:<\/strong> Chargebacks (Pro) settings tab: enable\/disable module and \"Auto-block after N lost disputes\" with proper save.<\/li>\n<li><strong>Added:<\/strong> Test notification: 15-second timeout and clear message when mail\/SMTP is not configured.<\/li>\n<li><strong>Changed:<\/strong> Automation removed from Settings tab; old Automation tab URL redirects to the new Automation page.<\/li>\n<li><strong>Changed:<\/strong> Modal styling (card look, accent bar, overlay blur, improved header\/body\/footer and close button).<\/li>\n<li><strong>Changed:<\/strong> Global \"Enable Notifications\" now applies to all notifications (Standard and Pro).<\/li>\n<li><strong>Changed:<\/strong> Pro notifications list refactored to a single source of truth (no duplicate markup).<\/li>\n<li><strong>Fixed:<\/strong> API tab no longer shows the stored key hash when a key exists; placeholder and copy instructions shown instead.<\/li>\n<li><strong>Fixed:<\/strong> API documentation: endpoints table matches implementation (lookup, update customer, events, recalculate, stats\/segments); example response corrected.<\/li>\n<li><strong>Fixed:<\/strong> At that time, REST API routes for customer events and recalculate used the then-current 32-character email hash format.<\/li>\n<li><strong>Fixed:<\/strong> Data tab: starting Historical Sync from Settings \u2192 Data now shows progress bar and updates correctly.<\/li>\n<li><strong>Fixed:<\/strong> Test notification no longer spins indefinitely when server mail is not configured.<\/li>\n<li><strong>Other:<\/strong> Redundancy cleanups on Automation, Data, and Notifications pages; Chart.js not loaded on Automation page.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Bug fixes<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Dashboard and customer pages UI refinements (spacing, sizing, alignment, and visual polish).<\/li>\n<li>Improved color system with reusable segment variables and a primary plugin color token.<\/li>\n<li>Split admin styles into page-specific files for better maintainability and scoped loading.<\/li>\n<li>Test data generation now seeds higher trust scores in the 80-95 range.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Release packaging and deployment workflow updates (no functional changes).<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<p><strong>Core Engine<\/strong><\/p>\n\n<ul>\n<li>Trust score calculation engine with weighted signal aggregation (0-100 scale)<\/li>\n<li>6-tier customer segmentation: VIP, Trusted, Normal, Caution, Risk, Critical<\/li>\n<li>Account age loyalty bonus (up to +15 points for 1+ year accounts)<\/li>\n<li>Configurable minimum order threshold before segment classification<\/li>\n<li>Allowlist system with automatic score override to 100<\/li>\n<\/ul>\n\n<p><strong>Detection Modules<\/strong><\/p>\n\n<ul>\n<li>Return abuse detection \u2014 refund rate, refund value, and return frequency analysis<\/li>\n<li>Order pattern analysis \u2014 completion rates, cancellation tracking, order velocity<\/li>\n<li>Coupon abuse detection \u2014 first-order discount exploitation and coupon-then-refund patterns<\/li>\n<li>Category-aware scoring \u2014 per-category return rate tracking with weighted penalties<\/li>\n<li>Linked accounts detection \u2014 multi-account identification via address, phone, IP, payment, and device fingerprinting<\/li>\n<\/ul>\n\n<p><strong>Dashboard &amp; Analytics<\/strong><\/p>\n\n<ul>\n<li>9-section command center dashboard with store health score<\/li>\n<li>6 interactive Chart.js charts: trust trends, segment distribution, refund activity, hourly activity, category return rates, monthly protection trend<\/li>\n<li>KPI cards: total customers, average trust score, new high-risk, events (24h), total orders, return rate<\/li>\n<li>ROI scorecard with money protected, money at risk, protection rate, and actions taken<\/li>\n<li>Top returners table and high-risk customer attention list<\/li>\n<\/ul>\n\n<p><strong>Customer Management<\/strong><\/p>\n\n<ul>\n<li>Searchable customer list with segment, score, and return rate columns<\/li>\n<li>Customer detail page with full behavioral history and signal breakdown<\/li>\n<li>Manual block and unblock with checkout enforcement<\/li>\n<li>Allowlist management for VIP protection<\/li>\n<li>CSV export for full customer list<\/li>\n<li>JSON export for individual customer profiles<\/li>\n<\/ul>\n\n<p><strong>Integrations<\/strong><\/p>\n\n<ul>\n<li>WooCommerce order edit screen integration showing trust score<\/li>\n<li>REST API with 8 endpoints and API key authentication<\/li>\n<li>GDPR data export and erasure via WordPress privacy tools<\/li>\n<li>WooCommerce High-Performance Order Storage (HPOS) compatibility<\/li>\n<li>Action Scheduler for asynchronous score processing<\/li>\n<\/ul>\n\n<p><strong>Notifications<\/strong><\/p>\n\n<ul>\n<li>Blocked checkout email alert<\/li>\n<li>Welcome summary (24 hours after activation)<\/li>\n<li>Weekly protection summary report<\/li>\n<\/ul>\n\n<p><strong>Historical Sync<\/strong><\/p>\n\n<ul>\n<li>Background import of existing WooCommerce orders<\/li>\n<li>Progress tracking with start\/stop\/resume controls<\/li>\n<li>Batch processing without site performance impact<\/li>\n<\/ul>","raw_excerpt":"Detect return abuse, coupon abuse, risky customers, and linked accounts in WooCommerce with behavior-based trust scores and risk segments.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/roh.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/278911","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/roh.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/roh.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/roh.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=278911"}],"author":[{"embeddable":true,"href":"https:\/\/roh.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/webstepper"}],"wp:attachment":[{"href":"https:\/\/roh.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=278911"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/roh.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=278911"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/roh.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=278911"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/roh.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=278911"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/roh.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=278911"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/roh.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=278911"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}