Sell by Weight & Length
Extension · v1.0.1Sell products by weight, length, area or volume with decimal quantities, unit prices, step/min/max and a live price on the product page.
- 4.1.0.x
- 4.0.2.x
- 3.0.x
by Kavio Labs · for OpenCart 4.x and 3.0.x
Reminder e-mails with single-use coupons, a signed one-click cart restore link and recovered-revenue attribution (OpenCart 4.x and 3.0.x).
Reminder e-mails with single-use coupons, a signed one-click cart restore link and recovered-revenue attribution (OpenCart 4.x and 3.0.x).
OpenCart 4.0.2.0 - 4.1.0.4, 3.0.3.x - 3.0.5.x
Win back abandoned carts with up to three automatic reminder e-mails, unique single-use coupons and a one-click restore link that rebuilds the cart on any device. A dashboard shows how many carts were abandoned, how many came back and how much revenue the reminders recovered.

| OpenCart 4 | OpenCart 3 | |
|---|---|---|
| Versions | 4.0.2.0 – 4.1.x | 3.0.3.x – 3.0.5.x |
| Package | kv_abandoned_cart_recovery.ocmod.zip | kv_abandoned_cart_recovery-oc3.ocmod.zip |
| PHP | as required by OpenCart (8.1+ for 4.1.x) | as required by OpenCart (8.1+ for 3.0.5.x); the extension itself runs on PHP 7.4+ |
| OpenCart mail settings (System > Settings > Mail) | same | |
| Coupons | the core Coupon order total must be enabled (it is by default) | same |
kv_abandoned_cart_recovery.ocmod.zip, then click Install next to it.Installing also adds the job Abandoned Cart Recovery: send due cart reminders to System > Maintenance > Cron Jobs. It runs whenever OpenCart's cron is called (index.php?route=cron/cron or php cron.php from your server's crontab). If your host does not call it, use the cron URL from Settings > Sending & cron.
kv_abandoned_cart_recovery-oc3.ocmod.zip.*/10 * * * * curl -s "https://yourstore.com/index.php?route=extension/module/kv_abandoned_cart_recovery/cron&key=YOUR_KEY" >/dev/null 2>&1
Without a cron job, Also send on admin page views (on by default) sends the due reminders at most every 10 minutes while you use the admin panel.

system/storage/kv_abandoned_cart_recovery/mail/ as HTML files.OpenCart 4: Extensions > Installer, uninstall and delete the old package, upload and install the new one. OpenCart 3: upload the new package over the old one and refresh the modifications. Settings and data stay as long as you do not uninstall the module.
Extensions > Extensions > Modules > Abandoned Cart Recovery > Uninstall removes the events, settings, the cron job and the tables (captured carts, reminder log, do-not-remind list). Coupons already sent stay in Marketing > Coupons until you delete them; orders are not touched.
Extensions > Extensions > Modules > Abandoned Cart Recovery > Edit (or the gear button on Marketing > Abandoned carts).
| Setting | Default | What it does |
|---|---|---|
| Status | Disabled | Captures carts and sends reminders. When off, nothing is captured or sent; restore and unsubscribe links keep working. |
| Capture guest carts | On | Guests are captured once they enter an e-mail at checkout. Off = signed-in customers only. |
| Minimum cart value | 0 | Carts with a lower subtotal (excl. tax, default currency) get no reminder. |
| Stop reminding after | 30 days | Carts without changes for longer are closed. |
| Restore link opens | Checkout page | Checkout or shopping cart page. |
| Count an order as recovered if placed within | 7 days | Days after the last reminder. Later orders count as "Ordered". |

Up to three reminders. Each has:
| Setting | Default (1 / 2 / 3) | What it does |
|---|---|---|
| Send this reminder | On / On / On | The sequence ends at the first reminder that is off. |
| Send after | 1 / 24 / 72 hours | Hours since the cart was last changed (decimals allowed: 0.5 = 30 minutes). Two reminders of one cart are at least 30 minutes apart; a cart change restarts the clock. |
| Coupon | none / none / 10 % | No coupon, percentage discount, fixed amount or free shipping. |
| Discount | 10 | Percent (1–100) or amount in the default currency. |
| Coupon valid for | 3 days | Including the day the e-mail is sent. |
| Subject, Heading, Message | empty | Empty = the default text shown in grey. Placeholders: {store}, {firstname}. |
Coupons. Each e-mail with a coupon gets its own OpenCart coupon (Marketing > Coupons, named "Abandoned cart #12, reminder 3"): one use in total and per customer, valid until the end of the last valid day. Unused codes are deleted after they expire; used ones stay with their coupon history.
| Setting | Default | What it does |
|---|---|---|
| Coupon code prefix | CART | Up to 8 letters or digits: CART-7KQ2-M9XD. |
| Coupon applies to | The whole order | Or only the products of the abandoned cart. Products the shopper bought at an accepted Make an Offer price are always left out, so nobody gets two discounts on one item; if only such products are in the cart, the e-mail has no coupon. |
| Setting | Default | What it does |
|---|---|---|
| Who receives reminders | Opt-out (box ticked) | Opt-out: the checkbox is ticked; shoppers who untick it get no reminders. Opt-in: the checkbox is unticked; only shoppers who tick it get reminders. |
| Save the e-mail as soon as it is entered | On | Saves the e-mail when the shopper leaves the e-mail field. Off: saved with the checkout step. In opt-in mode only with a ticked box. |
| Delete cart records after | 180 days | Inactive cart records are deleted with their reminder log. The do-not-remind list is kept. |
Every e-mail has an unsubscribe link. It opens a page with a button (so e-mail security scanners that open links cannot unsubscribe anybody); the shopper can turn reminders back on there. Choose the mode that fits your legal basis and check with your legal adviser.
| Setting | Default | What it does |
|---|---|---|
| Reminders per run | 50 | Maximum e-mails per run. |
| Also send on admin page views | On | Runs the sender at most every 10 minutes while an administrator uses the admin. Switch off once cron runs. |
| E-mail delivery | Send | Test mode writes every e-mail as HTML (plus JSON with subject and links) to system/storage/kv_abandoned_cart_recovery/mail/ instead of sending it. |
| Cron key | random | Protects the cron URL. New key + Save invalidates the old URL. |
| Cron job | The cron URL and a ready crontab / cPanel line. |
The layout is a Twig template with inline styles and a table layout for Outlook, Gmail, Apple Mail and phones. To change it, copy system/library/kv_abandoned_cart_recovery/templates/mail.twig (OpenCart 3) or extension/kv_abandoned_cart_recovery/system/library/templates/mail.twig (OpenCart 4) to system/storage/kv_abandoned_cart_recovery/mail.twig and edit the copy; it survives updates. Values are escaped automatically. Variables: store_name, store_url, logo_url, heading, hello, text, products (name, url, image_url, options, qty, price, total), subtotal, coupon (code, text, expires, note) or empty, restore_url, button, unsubscribe_url, unsubscribe_text, footer, step, firstname, email.
Enter the key on the License tab and click Check now. Without a key the extension runs for a 14-day trial. Without a valid license no carts are captured, the checkbox is hidden and no new reminders or coupons are sent; restore and unsubscribe links in e-mails already sent keep working, coupons already sent stay valid until they expire, and the dashboard, cart list and data stay available. The license check sends only the key, the extension id and version and your store's host names to cs-cart.kaviolabs.com.
Checkout. Under the e-mail field there is a checkbox E-mail me a reminder if I leave items in my cart with the hint At most three e-mails about this cart. Every e-mail has an unsubscribe link. Signed-in customers see the same box under the checkout heading.

Reminder e-mail. Store logo, heading and message, the products with image, options, quantity and price, the subtotal, the coupon box (when the reminder has one), a Return to my cart button and an unsubscribe link.

Restore link. Adds the products with their options and quantities to the current cart (products already in the cart are not added twice; disabled products are skipped), fills in the guest's e-mail and name, applies the reminder's coupon and opens the checkout. A cart that was already ordered shows This cart has already been ordered. Thank you!; a modified link shows This link is invalid or has expired.
Unsubscribe. A page Stop cart reminder e-mails to j\\\@example.com?* with an Unsubscribe button, and Turn reminders back on afterwards.

Dashboard (last 7, 30, 90 or 365 days, by the day a cart was captured):

Cart list with filters (e-mail or name, status, customer / guest, period), reminder dots, the restore marker, the status and the order. Bulk actions: Stop reminders for selected, Delete selected. Below it: erase the data of an e-mail address (privacy requests).

| Status | Meaning |
|---|---|
| Pending | Captured, no reminder yet |
| Reminded | At least one reminder sent |
| Recovered | Ordered within the attribution window after a reminder |
| Ordered | Ordered before any reminder (not counted as recovered) |
| Unsubscribed | The shopper unticked the box or unsubscribed |
| Closed | Emptied, too old, below the minimum value, e-mail failed 3 times, or stopped by you |
Cart page: products, timeline (captured, reminders with coupon and its state, restore clicks, order), status with the next planned reminder, the customer and consent. Actions: Send reminder N now (ignores the delay, not the consent), Stop reminders, Unsubscribe this e-mail / Allow reminders again, Delete, E-mail preview of reminders 1–3 with this cart's data (links disabled) and Send a test e-mail to any address (sample coupon code, not counted).

When an order gets its first status, the extension looks for the shopper's cart in this order: the cart restored from a reminder in this browser session, the cart whose reminder coupon the order uses, the shopper's own open cart, and reminded carts of the same e-mail address. If that cart got a reminder within the attribution window, it becomes Recovered with the order total and the reminder number; otherwise Ordered. The shopper's other open carts stop their sequence. Orders placed elsewhere (another device without the link, by phone through the admin) are matched by e-mail on the next run. If the order of a recovered cart is not paid and the shopper orders again, the new order replaces it.
Carts of signed-in customers when they add a product, and guest carts once the shopper enters an e-mail at checkout (and did not untick the box). Anonymous carts without an e-mail cannot be reminded.
Yes. The extension keeps its own copy of the cart lines (product, options, quantity), so the link works days later and on another device.
Check the cart page: the status and the next planned reminder. Common reasons: no cron job (use the cron URL or keep "Also send on admin page views" on), the shopper changed the cart (the delay starts again), the cart is below the minimum value, the shopper unticked the box or unsubscribed, the extension is disabled or not licensed, or the store has no mail engine. Failed sends are listed in the timeline and on the dashboard ("Last error").
Set E-mail delivery to Test mode: e-mails are written to system/storage/kv_abandoned_cart_recovery/mail/. Or use Send a test e-mail on a cart page.
No. Each reminder creates one single-use coupon; unused ones are deleted after they expire. Used ones stay with their history.
No: products with an accepted offer are excluded from the coupon.
Guests are captured only after they enter their e-mail next to a clear checkbox; you choose opt-out or opt-in; every e-mail has an unsubscribe link; records are deleted after a retention period; you can erase all records of an e-mail address. No IP addresses are stored.
Unsubscribing needs a button click, so scanners cannot unsubscribe anybody. A scanner that opens the restore link is counted as a click (it does not create an order).
No. It uses OpenCart events only (no OCMOD), so it works with themes that keep the standard checkout e-mail field (name="email").
Carts remember their store; links in the e-mails point to that store and use its name.
More for OpenCart
Sell products by weight, length, area or volume with decimal quantities, unit prices, step/min/max and a live price on the product page.
Shoppers propose a price; the store accepts, declines or counters, and the agreed price is enforced in the cart once.
Buy X get Y, tiered cart discounts, free gifts and scheduled rules on top of OpenCart specials and coupons.