AVAR ProductPulse
Changelog
======================================================================

= 1.1.97 =
Design refresh and clearer figures

Refreshes the admin screens in the AVAR Tools colours with the layout unchanged, explains on the Dashboard how far data collection has got after a new installation, suggests privacy-policy text that names the two cookies ProductPulse uses, and shows revenue in the currency it was recorded in. ProductPulse Pro makes double opt-in confirmation links work again, counts a restored cart that is paid later as recovered, sends payment reminders only for orders that can still be paid online, fixes a weekly report that could be sent twice or not at all, compares search quality with the store's own average, shows plan comparisons that match what each plan includes, makes cross-sell and upsell suggestions more accurate, and writes dates, numbers and plural forms correctly in your language.

PRODUCTPULSE PRO

* Changed: the admin screens use the AVAR Tools colours, with a black header and one clearly marked main action per screen. Critical states always say what they are. Layout and menus are unchanged.
* Fixed: the Search Demand quality score and several status words (Active, Off, Yes) were below the contrast that accessibility guidelines ask for.
* Fixed: the button that deletes all search data now looks like the destructive action it is.
* Fixed: the Pro figures on the Dashboard had no styling; they are now laid out as cards.
* Fixed: dates and times on the Recovery, Customers, Search, Alerts and Subscription screens, in the e-mail log, the unsubscribe list and on Settings → Advanced follow your site's date and time format and time zone, without seconds.
* Fixed: counts in advice, opportunity descriptions, reports, the Search screens and the Command Center read "1 purchases", "1 results" and similar. They now use the correct singular and plural forms, including the Slovak and Czech forms for 2 to 4, with thousands separators, and percentages are written the way your language writes them. An opportunity description that is already stored keeps its old wording until the opportunity is detected again.
* Accessibility: the previous and next links of list pagers have names screen readers announce; on WordPress 7 the "Per page" label is shown before its selector again; the Automations, Growth and Subscription tab bars are announced as navigation with the current tab identified; the Buy a license button on the connect screen shows a focus ring.
* Changed: Pro now requires WordPress 6.6, the version the plugin declares, and says so in a notice on older versions.
* Fixed: the multisite notice about a still-active free plugin uses correct singular and plural forms.
* Fixed: confirming an e-mail address from a double opt-in link did nothing: the click on the confirmation page sent nothing, so the sign-up kept waiting for confirmation. A confirmation link that has not expired can be used again after the update.
* Fixed: when a logged-in customer confirms their e-mail address, it is now linked to their account right away instead of at the next background run.
* Fixed: a confirmation on a whole form is asked once, not twice, and ticking a checkbox inside such a form no longer asks.
* Fixed: when a shopper restores a cart from a recovery e-mail and completes the purchase later, in a different visit or on another device, the order is now counted as a recovered cart with its revenue when it is paid. Before, it was never counted.
* Fixed: an abandoned cart the shopper came back to on their own is now counted as recovered when the order is paid, instead of after several background retries.
* Changed: the cart detail lists every recovery e-mail of the cart with its status, and the steps still planned (or that they will not be sent once the cart is no longer abandoned). A logged-in customer is shown by name, linked to their account for users allowed to edit it, and the order by its order number, linked. Internal user ids are no longer shown.
* Changed: Send e-mail, Stop sequence, Resolved and Delete on the cart lists are buttons instead of links, and Delete asks for confirmation. The pager counts every cart, a page past the end of a list says so and links to the first page, and acting on a row keeps you on the page you were on.
* Fixed: the "Restore my cart" link in a manually sent recovery e-mail is now the same brand-coloured button as in the automatic recovery e-mails.
* Fixed: a campaign e-mail with a coupon is postponed, not cancelled for good, when the coupon could not be checked because the database did not answer.
* Fixed: on Pro, Settings showed the discount cap and the free-shipping option of recovery coupons as editable, although they only take effect on Growth. They are now shown locked with the values that apply (a fixed 15% cap, no free shipping), saving the Recovery tab no longer resets the stored Growth values, and the coupon section no longer promises win-back e-mails. The fixed maximum is written in your language's percent format.
* Changed: payment reminders are sent only for orders WooCommerce can take payment for online (by default Pending payment and Failed), and only once an order is at least 15 minutes old, so a customer still on the payment page is not reminded. Orders on hold, waiting for a bank transfer or cheque, are no longer sent a payment link that cannot work.
* Changed: on Recovery → Pending Payments, orders on hold are marked "Awaiting manual payment" with no reminder button, and the list explains how to resend the payment instructions from the order.
* Fixed: a customer could receive the same payment reminder twice. A reminder sent by hand, or "Stop reminders", now also stops an automatic reminder that is still queued, stays in force if that queued reminder fails later, and "Send reminder" is not offered while one is queued.
* Fixed: an order whose reminder log entry has been removed no longer reads "Queued to send" next to the Send reminder button.
* Changed: the e-mail log says why a payment reminder was not sent (paid, cancelled, refunded, on hold, nothing to pay, stopped, already sent) instead of one general reason.
* Changed: Recovery → Pending Payments is paginated instead of showing only the first 100 orders, and says so when the orders could not be read instead of reporting that there are none.
* Fixed: e-mails to shoppers opened with the template's internal name, such as "Recovery e-mail 1", as their heading. They now open with a customer-facing heading by default: the template's subject, or a plain headline for the back-in-stock, price-drop and search e-mails. A heading you wrote yourself is kept.
* Changed: default e-mail texts follow the store's language where a translation is available (Slovak and Czech are included). Templates you never edited follow the translation automatically, including those saved with the old English text; templates you edited, including those where you only changed the styling, are kept as they are.
* Changed: the template editor's preview shows the complete e-mail as your customer receives it (header in your brand colour, heading, footer and unsubscribe link). The editor offers only the variables that the e-mail really fills in, and warns when a template uses a variable that would arrive empty.
* Fixed: call-to-action buttons in the default e-mails use your brand colour, stay readable on light brand colours, and still look like buttons when a saved template lost its button styling. An invalid brand colour is refused with a message instead of being saved as empty.
* Fixed: the e-mail log and the unsubscribe list page through every entry and show their real totals; before, the log stopped at 1,000 rows and the list at 2,000.
* Changed: the e-mail log's Type, Status and Error columns show readable, translated labels instead of internal keys and English system messages. Confirmation (double opt-in) e-mails, manual recovery e-mails sent without recorded consent and unrecognised types or statuses are named in your language, and a test e-mail names the template that was tested.
* Changed: the Timing column on Automations says when each e-mail is really sent (for example "After 90 days without an order" or "Checked hourly, for orders at least 15 minutes old") instead of "Immediate".
* Fixed: on a store that never saved Pro → Settings, the Emails list, the Command Center and the dashboards no longer show the recovery e-mails and pending-payment reminders as switched off while they are being sent.
* Changed: while Pro modules are switched off, every e-mail your plan includes reads Off on the Emails screen, as the Command Center already shows, and both the list and each template editor say why.
* Fixed: the no-result recovery e-mail on the Emails screen carried the Pro badge, although its sign-ups can only be collected on Growth, and Search → No results let stores without Growth notify shoppers who had left their e-mail before a downgrade. Notifying is now part of Growth, like collecting the requests; on other plans the Notify button is disabled and the screen says why. The requests are kept and can still be exported.
* Fixed: the weekly report could be sent twice, filed under the wrong week so that the next one was skipped, or never sent when the daily check ran before the preferred hour. It now arrives at the first daily check after the preferred day and time (up to a day later), Reports → Weekly Reports says so, and failed deliveries are retried while the report is switched on.
* Fixed: while the weekly report's recipient was unsubscribed, a new entry was added to the e-mail log on every daily check. The report is now tried once per week.
* Fixed: Reports described a weekly report e-mail with top products, problem products, abandoned carts and recovered revenue. It now says what the e-mail contains: the introduction from the Weekly report template and up to five open opportunities, highest priority first. When the opportunities cannot be read, the e-mail leaves that section out instead of saying there are no new opportunities.
* Changed: on the Emails screen the Weekly report row shows the report's real status (Reports → Weekly Reports, the licence, the Pro master switch and whether the module is running). Its editor links to Reports → Weekly Reports, and its Timing column shows the weekly schedule.
* Fixed: the Command Center listed Weekly Reports under Needs setup while the report was being sent.
* Changed: Reports → Recovery Report splits unpaid orders into pending (awaiting online payment), failed and on hold. Orders on hold and reminders that could not be sent appear as recommendations, so "Your recovery setup looks good" is no longer shown over them, nor when the figures could not be read. Reminders cancelled because the customer paid are not counted as reminders that could not be sent.
* Changed: the Growth Report calls the restock figure "Shoppers waiting on restocks", with the same wording and number format as the Command Center; the offer acceptance rate shows a dash instead of 0% while no offer has been seen; the product revenue chart uses the neutral data colour. The locked Growth Report on Pro no longer promises stock risk and margin.
* Changed: Reports and Exports name exactly what the Exports screen downloads (abandoned carts and opportunities) and where the other exports are (the Product Report tab and the Customers screen). On Settings → Data the export row is now called "Export carts and opportunities". The weekly report checkbox no longer says "off by default" next to a ticked box.
* Fixed: on Customers, the last order date follows the site's time zone, on the screen and in the CSV export.
* Changed: a new store no longer reads "Your store is on track" in the Command Center; it says that data is still being collected and shows the same collection panel as the Dashboard. If tracking is switched off, it says that instead.
* Changed: the Critical / Review / Opportunity words on opportunity cards, chips, the filter and the Command Center's recommended actions always follow the kind of problem found, and the priority is shown as a number only. Each summary chip opens exactly the opportunities it counts, including ones you have already viewed.
* Changed: the Command Center's search card says that total searches and search-assisted revenue are counted since activation, and searches already handled by a rule no longer count as unmet demand. On the Dashboard, the estimated unused search potential counts only searches that still need your attention.
* Fixed: recovery rates use one percentage format, counts show thousands separators, and locked Pro cards carry a Pro badge.
* Fixed: the "Products needing attention" lists no longer slow down when products that still have recorded activity have been deleted.
* Changed: search quality scores (Growth) are compared with your store's own search average: 80 or more means a search converts at least as well as your store overall, so a best-selling search no longer reads "Average". The score hints and the Quality column explain this, and scores are not comparable between stores.
* Fixed: Search Demand called a search one that "converts well" after a single purchase. It now needs at least five searches and two purchases at or above your store's search average; with one purchase, the score hint marks it Promising. The search term page uses the same rule and says when a search sells below that average.
* Changed: under 7, 30 or 90 days, "Most searched terms", "Biggest problems" and "Terms that sell" on the Search overview show that period and say so in their headings. "Terms that sell" uses the same revenue source as the revenue card, the "Most important action" names a search from the selected period, and when nothing is urgent the message names the period it covers.
* Changed: a search that returns nothing but is already handled by a fallback-products rule or a redirect gets a neutral "Covered" status. Covered searches, and searches you marked Resolved or Ignored, no longer appear as the top action on the Search overview, the Command Center or the dashboard. Covered searches stay listed on the No results tab.
* Changed: Search → Opportunities lists the fixes first (critical, then warnings, then searches that convert well, then covered demand), keeps each card's severity badge and shows 20 cards per page.
* Fixed: one unlucky empty search no longer marks a working search "No results", and search status chips show their explanation on hover.
* Changed: redirect and fallback rule lists show readable values ("Category: Coffee", "Custom URL: /shipping/", "Exact match", "Hard redirect") instead of internal keys, and the redirect list shows each rule's match type.
* Fixed: a fallback-products or boost rule with no products can no longer be saved; it could never show anything.
* Fixed: "Recommend above results" redirects also appear when a search finds nothing, and the recommendation box uses your theme's colours instead of a fixed blue.
* Changed: Search settings no longer show separate "Ignore administrators" and "Ignore logged-in users" switches, which had no effect. The row shows the plugin-wide data-collection setting that search tracking follows, with a link to change it. The popular-searches privacy note no longer says "OFF" next to a ticked box.
* Improved: the Search screens, the Command Center and the Opportunities screen load faster on stores with many searches and search rules.
* Fixed: the Opportunities list total and pages cover every matching opportunity, not only the first thousand, and a link to a page beyond the end of the list shows the last page instead of an empty list.
* Fixed: the before/after note of a resolved opportunity reads as one complete sentence in every language and shows the date in your site's date format and time zone.
* Changed: the Search card on the Opportunities screen leads with the biggest fix and counts only search demand you still need to act on.
* Fixed: the daily opportunity run closes opportunities of products that were deleted, and no longer creates new ones for them.
* Fixed: the notice on the Opportunities screen promised order bumps, bundles, win-back and stock forecasts as Growth opportunities. It now names what Growth adds to that screen: search opportunities.
* Changed: on Products, the Score column is replaced by Priority, the same 0–100 number the Opportunities screen shows ("—" when a product has no open opportunity). In the CSV export the column is now called opportunity_priority; spreadsheets keyed on the old "score" column need updating.
* Fixed: the Products category filter now shows the products of the selected category in the list, in "Only with issues" and in the CSV export; it used to return nothing.
* Fixed: the session-ratio column tips on Products state the real minimum of 20 sessions.
* Fixed: the product detail on the Products screen showed the Growth margin and estimated profit on Pro and without a licence whenever a cost of goods had been recorded earlier. The figures now appear only where the cost-of-goods field itself is available.
* Fixed: a sold-out or back-ordered product showed a "~0 days to sell out" stock forecast, and a rising product that is sold out is now advised to restock instead of to promote it.
* Fixed: Product Ranking told products that sell but convert far below the rest of the store that no action was needed. They are now flagged with the same rule as the Products screen's "Below benchmark", and a product with a sale is no longer called "not selling".
* Fixed: the Upsell tab now suggests dearer products from the same category (it could never find any before), only products shoppers can see and buy, and not ones already linked.
* Fixed: cross-sell suggestions skip hidden, sold-out and deleted products, and a pair that is already a cross-sell or up-sell in WooCommerce says so instead of offering the button again. When recent orders have products bought together but none of the pairs can be suggested, the Cross-sell tab says so instead of claiming there are too few orders. Bundle suggestions leave out deleted products.
* Changed: the Recommendations screen and its locked preview say what the screen does: cross-sell and bundle suggestions from real orders, and upsell suggestions from your catalogue. The Bundles tab is now called Bundle suggestions; it lists products bought together and creates no bundle product.
* Changed: the Cross-sell and Bundle suggestions tabs state which orders they are based on (the last 90 days, at most 1,000 orders), and Product Ranking states its 30-day window.
* Changed: the product-page block built from a product's own WooCommerce cross-sells, up-sells or related products is now headed "Goes well together" instead of "Frequently bought together", and its settings switch uses the same name. The block is not built from order history, so it no longer claims to be. The button on the settings tab reads "Save recommendation settings".
* Changed: the checkout suggestion shown when no order bump is set up is headed "You may also like".
* Changed: the preview on the In-cart Offers and Order Bumps tabs shows your own first offer with its product and current price, worded exactly as shoppers see it, instead of an invented sample product with a fixed euro price. When no real preview can be shown, it shows a clearly marked example layout and says why.
* Fixed: the order bump preview shows its checkbox again, order bumps no longer show a Button text field they never used, and the clear button of the product picker no longer covers the dropdown arrow on WordPress 7.
* Fixed: a store whose offers are all order bumps (or all in-cart offers) no longer sees "Offers could not be read" on the other tab.
* Fixed: opening an order bump from the In-cart Offers tab (or the other way round) no longer loads it into the wrong form, and saving an offer never changes its type.
* Fixed: the free-shipping threshold can no longer be saved as a negative amount, and the Performance tab shows conversion rates in your language's percent format.
* Fixed: the in-cart offer and order bump boxes no longer use a fixed blue border; the border follows your theme's text colour.
* Fixed: the back-in-stock and price-drop sign-up forms no longer have a fixed light background, so they stay readable on dark themes; a failed sign-up message keeps the theme's text colour with a red marker.
* Fixed: the Offers tab of Settings on Pro no longer switches off stored offer settings when saved, and neither it nor the Advanced tab shows a Save button that saved nothing.
* Fixed: "Products tracked" and the page list of back-in-stock and price-drop alerts count every product with a sign-up; before, they stopped at 200. The CSV export includes every product too.
* Changed: the "Last request" time follows your store's date and time format, and the Alerts settings link names the screen where those settings are (Settings › Alerts).
* Changed: the Subscription screen shows one clear set of actions for each licence state, with no repeated buttons. An expired licence is renewed from the account page, and a new licence key can still be entered. The licence expiry and the last licence check are shown in your store's time zone and date format. A sentence about the plugin being "standalone" that was shown to every customer was removed.
* Changed: when a licence expires, the expiry notice, the locked screens and the Subscription screen name the plan it was for (Pro or Growth). The notice is no longer repeated on the Subscription screen, which already explains it.
* Fixed: the Upgrade and locked screens link to the licence activation screen until the site is connected, instead of an account page that is not available yet.
* Fixed: the plan comparisons on the Upgrade and License screens now follow the plan checks the plugin actually applies. Sales opportunities, the weekly report and Search Demand analytics, including zero-result tracking and search-to-purchase figures, are shown as Pro; the Growth search tools, advanced recovery coupons, repeat-purchase reminders, cost of goods and margin and the white-label weekly report as Growth; and product recommendations are described as cross-sell, upsell and bundle suggestions, with no bundle product promised.
* Changed: Settings → Tracking uses the same wording as the free settings screen ("Ignore store managers and administrators", "Ignore all logged-in users").
* Changed: only a user who can delete plugins can switch "Delete ALL ProductPulse data on uninstall" on or off; anyone else sees it locked, with the reason shown the same way as on the free Settings screen.

FREE / CORE

* New: after a new installation a Dashboard panel explains that ProductPulse needs time to collect data, shows how far collection has got and what to check in the meantime, and disappears on its own once there is enough data. It replaces the "Getting started" checklist. As soon as the first product view, add-to-cart or purchase is recorded, it says that collection has started.
* New: suggested text for your site's privacy policy (Settings → Privacy → Policy Guide), naming the two first-party cookies ProductPulse uses and how long it keeps its data.
* Changed: the admin screens have a new design in the AVAR Tools colours, with a black header and the main action on each screen clearly marked. Layout and menus are unchanged.
* Changed: the plugin icon in the admin header now matches the WordPress.org icon.
* Changed: the visitor and session cookies are no longer set on REST API requests (for example the WooCommerce Store API used by the block checkout), whatever form the request address takes; they are set only on storefront pages.
* Changed: "Delete all ProductPulse data on uninstall" can be changed only by a user who can delete plugins. Other users, such as Shop Managers, see it read-only, and saving the form keeps the current choice. The note says why: file changes are disabled on the site, only a network administrator can change it, or the user cannot delete plugins.
* Fixed: on a store whose sales were recorded in a currency other than its current one, revenue on the Dashboard and the Products screen is shown in the currency it was taken in. Revenue rows recorded without a currency are pointed out, and the Products screen says so when they could not be counted.
* Fixed: on the Products screen the selected reporting period (7, 30 or 90 days) was never highlighted; only Today was.
* Fixed: the summary above the Products table left out products sold without recorded views, products with too little data and products with add-to-cart actions only, so its figures did not add up to the number of products. It now counts every status. The explanation of Low data said "fewer than 5 views, or fewer than 2 purchases"; it is fewer than 5 views.
* Fixed: counts on the Dashboard chart, the Products and Opportunities screens, the Settings export notice and the network data purge screen read "1 purchases" and similar. They now use the correct singular and plural forms, including the Slovak and Czech forms for 2 to 4.
* Fixed: dates in the Dashboard's daily chart and on the Settings and upgrade screens follow your site's date and time format, without seconds; the conversion rate and the Products percentages follow the site language.
* Fixed: the buttons in the dark panel of the Upgrade screen were shown without button styling.
* Fixed: the Upgrade screen listed Search Demand analytics, zero-result search tracking and search-to-purchase insights as Growth-only; they are part of Pro. Data retention controls are now shown as included in Free, the Growth report row describes what the report shows, and product recommendations are described as cross-sell, upsell and bundle suggestions, with no bundle product promised.
* Accessibility: the Dashboard period selector and date fields are labelled for screen readers. Choosing a period from the opened list applies it at once, with the mouse or the keyboard; stepping through the periods with the arrow keys no longer reloads the page on every key press, and the period is applied with Enter or when you leave the field.
* Accessibility: keyboard focus is visible on the ProductPulse menu, on form fields in Windows high-contrast mode and on the connect screen's Skip button; inactive menu items are shown in a muted colour as intended; the raw data retention field on Settings is labelled for screen readers.

= 1.1.96 =
Maintenance release

Fixes ProductPulse Pro staying in degraded mode, with automations and e-mails paused, after activation or update on MariaDB databases.

PRODUCTPULSE PRO

* Fixed: on MariaDB databases, activating or updating ProductPulse Pro could leave it in degraded mode, with automations and e-mails paused. Affected stores repair themselves automatically within minutes of updating, without any manual step.

FREE / CORE

* No changes to the features of the free edition.

= 1.1.95 =
First public release

First public release of AVAR ProductPulse.

FREE / CORE

* Added WooCommerce product views, add-to-cart, purchase and revenue analytics.
* Added Dashboard KPIs, daily activity trends and top-product reporting.
* Added product-level analytics with view-to-cart and view-to-purchase rates.
* Added basic product status signals and product opportunity detection.
* Added 7-day, 30-day, 90-day and custom reporting periods.
* Added multi-currency reporting without combining unrelated currencies.
* Added CSV exports for supported analytics datasets.
* Added configurable raw-event retention and daily aggregate reporting.
* Added WordPress personal-data exporter and eraser integration.
* Added configurable uninstall data retention.
* Added tracking exclusions for administrators, store managers and optionally all logged-in users.
* Added consent-integration filter for disabling ProductPulse tracking per request.
* Added WooCommerce HPOS and classic order-storage compatibility.
* Added multisite support and Network Admin data-purge workflow.
* Added built-in database and tracking diagnostics.

ANALYTICS AND DATA INTEGRITY

* Added durable product-event identities for WooCommerce purchase and refund lifecycle processing.
* Added exact decimal handling for financial source-of-truth values.
* Added currency-aware daily analytics.
* Added resumable daily aggregation with coverage tracking.
* Added bounded data-retention processing.

PRODUCTPULSE PRO

* Added advanced ProductPulse opportunity and recommendation tools.
* Added recommended actions for each product opportunity.
* Added abandoned-cart detection and recovery workflows.
* Added recovered-order and recovered-revenue attribution.
* Added optional recovery coupon handling.
* Added pending-payment reminder campaigns.
* Added reorder campaigns.
* Added win-back campaigns.
* Added durable campaign-mail background processing.
* Added back-in-stock alerts.
* Added price-drop alerts.
* Added search analytics.
* Added search autocomplete.
* Added search synonym management.
* Added promotional offer tools.
* Added customer segmentation.
* Added advanced reports and commercial product signals.
* Added premium CSV exports for supported datasets.
* Added background reconciliation for asynchronous WooCommerce state changes.

MESSAGING AND DELIVERY

* Added durable message state tracking for supported ProductPulse e-mails.
* Added retry handling for transient delivery failures.
* Added duplicate-delivery safeguards.
* Added delivery-ambiguity handling for interrupted transport operations.
* Added merchant-visible delivery outcomes.
* Added bounded and resumable alert, recovery and campaign processing.
* Added durable coupon-cleanup support for campaign and recovery workflows.

SECURITY AND PRIVACY

* Added capability and nonce protection for ProductPulse administrative actions.
* Added server-side validation for public ProductPulse actions.
* Added abuse and rate-limit controls for supported public endpoints.
* Added first-party analytics identifiers without storing customer names, e-mail addresses or IP addresses in analytics event tables.
* Added privacy-aware retention and cleanup workflows.
* Added multisite-safe bounded cleanup operations.

PERFORMANCE

* Added daily aggregation to reduce repeated scans of historical raw events.
* Added bounded background workers for large ProductPulse workloads.
* Added product-oriented and resumable alert processing.
* Added batch processing for opportunity and reconciliation workloads.
* Added bounded search-autocomplete candidate processing.

COMPATIBILITY

* Added support for WooCommerce HPOS.
* Added support for classic WooCommerce order storage.
* Added support for product variations.
* Added WordPress multisite lifecycle handling.
* Added standalone ProductPulse Pro installation support.
* Added Free-to-Pro transition handling.

NOTES

* Version 1.1.95 is the first public release of AVAR ProductPulse.
