Records every price change and shows the lowest price of the last 30 days next to your price reductions.
Available Updated Oct 18, 2026Version 1.0.1CS-Cart, Multi-Vendor 4.17.2 – 4.21.x No core file edits
Built for
EU Omnibus Lowest Price (30 days): overview1 of 12
What it does
CS-Cart keeps only the current price. In the EU, a price reduction must show the prior price: the lowest price of the 30 days before the reduction (Price Indication Directive, art. 6a, as amended by Directive 2019/2161). This add-on records the base, list and final price of every product and variation and shows "Lowest price in the last 30 days" next to reduced prices. For CS-Cart and Multi-Vendor stores that sell to EU customers.
How it works
On installation the current prices of the whole catalog are stored. From then on every change is recorded with its date and source. The product page shows the label under the price when a promotion discount or a list price strike-through is shown, or always if you prefer. Choose the period, the calculation (before the reduction or rolling) and the wording; show it in product lists too. Each product has a Price history tab with a chart; a history page lists all changes. The add-on helps you comply; it is not legal advice.
Features
Automatic price history for products and variations: base, list and final price
Current prices stored on installation as the starting point
Records edits, vendor edits, imports, mass updates and catalog promotions
Detects promotions that start or end, and changes made outside CS-Cart
Lowest price label on the product page and optionally in product lists
Only when a reduction is shown, or always; period 30 days by default
Calculation before the reduction or rolling; editable wording
Price history tab with chart and change table in the product editor
Catalog-wide history page with filters and CSV export
Exclusions per product; change-only storage with retention
Per storefront in CS-Cart Ultimate; vendors see their own history
Full page cache safe; CS-Cart, CS-Cart Ultimate and Multi-Vendor, 4.17.2 to 4.21
What you get
Package
kv_omnibus_price_history-1.0.1.zip, installed through Add-ons → Manage add-ons
Updates & support
12 months included. Download new versions from your account and install them in Add-ons → Manage add-ons or the Upgrade Center.
License
1 production installation. Staging, dev and localhost are free and unlimited. The add-on keeps working after the update period ends. How licensing works
Compatibility
We list only the builds we install and test on. “Tested” means the full test plan was run on that build; “Supported” means the build is inside the supported range and uses the same hooks.
CS-Cart version and edition compatibility
CS-Cart version
CS-Cart
CS-Cart Ultimate
Multi-Vendor
Multi-Vendor Ultimate
4.22 and later
Testing next
Testing next
Testing next
Testing next
4.21.2
Supported
Supported
Tested
Supported
4.20.x
Supported
Supported
Supported
Supported
4.19.x
Supported
Supported
Supported
Supported
4.18.x
Supported
Supported
Supported
Supported
4.17.2
Tested
Supported
Tested
Supported
Before 4.17.2
Not supported
Not supported
Not supported
Not supported
Last tested build: Multi-Vendor 4.21.2, Oct 18, 2026Tested on: Multi-Vendor 4.17.2, CS-Cart 4.17.2, Multi-Vendor 4.21.2
Recommended: a cron job (every 15 minutes), so price changes of scheduled promotions are recorded on time. Without cron, the add-on records while administrators use the admin panel
Core changes
None. Hooks and template overrides only
1.0.1
Oct 18, 2026
Latest
Fixed 2
Full page cache: the admin fallback kept its once-a-minute check mark in the add-on storage, so every admin page view (and, with catalog promotions present, the run it started) changed the add-on storage while guests were browsing. The mark now lives in the administrator's session and the check only reads; the add-on writes its storage only when a run has work to do (cron, admin page view, Check prices now).
Storefront page views can no longer write add-on storage or the recording queue (guard in StorageData and Recorder::queue()); the cron URL stays the only storefront request that records.
Changed 2
Catalog promotions that start or end are recorded by the next cron run or admin page view (unchanged behaviour, now documented). Until then the storefront shows no label for an affected product rather than a wrong one.
The upgrade removes the obsolete kv_oph_fallback_check storage mark.
Tested on Multi-Vendor 4.17.2, CS-Cart 4.17.2, Multi-Vendor 4.21.2. No breaking changes.
1.0.0
Oct 18, 2026
Added 8
Price history of every product and variation per storefront: base price, list price and final price after catalog promotions, change-only rows with retention.
Current prices of the catalog stored on installation.
Recording of product edits (admin and vendor panel), imports, mass price updates, catalog promotion changes, promotion start and end dates, and a regular full check for changes made outside CS-Cart.
Storefront label "Lowest price in the last 30 days" on the product page and optionally in product lists: only when a reduction is shown or always, configurable period, calculation (before the reduction or rolling) and wording.
Price history tab in the product editor with chart, lowest price and change table; exclusion per product.
Products → Omnibus price history page with filters and CSV export (also per product, for vendors their own products).
Cron command and cron URL, admin fallback without cron; full page cache support (4.21).
License client and self-healing upgrades.
Tested on Multi-Vendor 4.17.2, CS-Cart 4.17.2, Multi-Vendor 4.21.2. First release.
Does this add-on make my store compliant with the Omnibus Directive?
It gives you the data and the display the directive asks for: the lowest price of the 30 days before a price reduction, next to the reduced price. Whether your store is compliant also depends on how you announce reductions, on the settings you choose and on national rules (for example exceptions for perishable goods or progressive reductions). You remain responsible for your price indications; the add-on and its documentation are not legal advice.
What does the label show in the first 30 days?
The add-on knows prices only from the moment it is installed. Until a product's price changes, the current price is the lowest known price, so the label shows the current price (or nothing, with When no earlier price is recorded → Hide the label). Once a reduction happens, the label shows the lowest price recorded before it. If you have older price data, keep it until 30 days after the installation.
Which price is compared: the price before or after promotions?
The final price: the price a guest sees after catalog promotions. The base price and the list price are recorded too and shown in the admin panel. Cart promotions and coupons are not part of the displayed price and are not recorded.
A promotion starts tomorrow at midnight. Is it recorded on time?
Yes, if the cron job runs every 15 minutes: every run checks whether a catalog promotion started or ended since the last run and then checks all products. Without cron, the change is recorded on the next admin page view. Until it is recorded, the affected products show no label (never a wrong one); storefront page views never record anything themselves, so the full page cache stays intact.
Why does a logged-in customer not see the label?
The label is shown only when the customer sees the same price as a guest. A customer with a usergroup price or a promotion for registered customers sees a different price, and the recorded history does not belong to that price, so no label is shown.
Does the add-on slow down my storefront?
No. The label needs a few indexed queries per page and is cached together with the product blocks. Prices are recorded in the admin panel, by cron or after the page is sent, never while customers browse.
How much space does the history need?
One row per price change and storefront. A catalog of 10,000 products with a few changes per product and year needs a few megabytes. Rows that ended more than 400 days ago (setting) are deleted automatically.
I changed prices directly in the database. Are they recorded?
Yes, with the next full check (every 24 hours by default, setting Full check every (hours)), or at once with Check prices now on the Omnibus price history page.
Can I show the label for products without a discount?
Yes: set Show the label to Always. For that mode, Rolling: last N days is usually the better calculation.
What happens if the license lapses?
Without a valid license (no key after the 14-day start period, an invalid or revoked key, a domain the license does not cover, or no successful check for 14 days), the lowest-price labels are hidden on the storefront. Price changes are still recorded and the history stays available in the admin panel, so no gap appears when the license is valid again. Once the license is valid again, the labels are back.
The admin panel shows a license notice.
Open Add-ons → Manage add-ons → EU Omnibus Lowest Price (30 days): the License card at the top says what is wrong: no key, a key for another add-on, a revoked license, or a domain that the license does not cover. Fix it on the License tab and click Check now. See License.
Does the add-on work on my staging copy?
Yes. Subdomains of your licensed domain (for example staging.example.com) and local development hosts (localhost, private IP addresses, .local, .test) are covered by the same license.
What happens if your license server is down?
Nothing changes for 14 days: the add-on keeps working and retries every hour. Only if no check succeeds for 14 days are the labels switched off until the next successful check.
Does the license check slow down my storefront or checkout?
No. The check runs only in the admin panel or from cron, at most once a day, never while customers browse or check out.