چۈشەندۈرۈش
CartRevival is abandoned cart recovery for WooCommerce that also shows you carts as they happen. It shows you the cart filling up right now, and automatically wins it back if the shopper leaves — a genuine cart revival, not just a reminder.
Every shopper who adds a product is captured — registered customers and anonymous guests alike — along with their cart contents, location and device. If they go quiet, CartRevival marks the cart abandoned and sends a cart abandonment email that rebuilds their exact cart in one click.
Live cart tracking, free
The Live tab is a real-time view of your store. Watch visitors arrive, browse, add products and reach checkout, with cart values updating the instant something changes. See what people added and then removed — the hesitation that never shows up in any other report.
What you get for free
- Abandoned cart recovery for both logged-in customers and guests
- Live cart tracking monitor with real-time visitor and cart status
- Exit intent popup on desktop and mobile, with scroll-up velocity and back-gesture detection on touch devices
- A three-step recovery email series, each step with its own delay, subject, heading, content, coupon field and open/click stats
- Early capture popup that asks for an email or phone on add-to-cart, so guest carts become recoverable
- Tab notification that alternates the browser tab title and badges the favicon while the shopper is on another tab
- One-click cart restore link that rebuilds variations, quantities and custom item data
- Conversion funnel: visitors add to cart checkout orders, with drop-off at each step
- Reports: abandonment rate, recoverable revenue, recovered revenue, top abandoned products, abandonment by country
- Remember checkout input across page reloads
- CSV export including a ready-to-use recovery link per cart
- Store owner notifications, instantly or as a daily digest
- Bot defense on every capture: honeypot, user-agent blocklist, minimum time on page, optional reCAPTCHA v3
- Exclusions by email, phone and user role, plus auto-delete for old anonymous carts
- Full GDPR support: data exporter, eraser, one-click unsubscribe, IP and URL collection toggles
Built to be invisible on your storefront
Performance was the first requirement, not an afterthought.
- An always-loaded core of about 2 KB gzipped (2.2 KB measured), loaded deferred — every other feature is a tiny module that downloads only when its trigger fires
- No jQuery, no frontend CSS unless you turn on a popup
- Tracking uses
navigator.sendBeacon(), so nothing ever blocks navigation - Custom database tables with pre-aggregated daily reports — dashboards never scan raw data
- No
admin-ajax.phpanywhere - Zero database writes on a page view when the visitor has an empty cart
WhatsApp cart recovery — free
WhatsApp reminders are included in the free plugin. Connect your WhatsApp number free at 6rsh.com, and CartRevival sends an approved-template reminder for every abandoned cart with a phone number. If you already run the 6rsh WooCommerce plugin, CartRevival reuses your existing connection automatically — nothing to paste.
No limits on the free plugin
There is no cart quota, no registration and no account. Everything described above works on every store, on every cart, forever, and this plugin never contacts a licensing server to decide what you may do.
A separate paid add-on, CartRevival PRO, adds channels and automation on top: SMS through Twilio or BulkGate, web push, a unified multi-channel sequence builder, automatically generated single-use coupons, AI message suggestions, email-marketing sync, and the full visitor analytics history. It is an optional extra — nothing here is switched off or held back to make a case for it. Details and pricing.
Performance
CartRevival’s storefront footprint is two-stage, and the always-loaded part is about 2 KB:
- Core (always loads): 2.2 KB gzipped. The tracking beacon and a tiny module loader. Deferred, sendBeacon transport, no CSS, zero render-blocking, zero database writes on an empty-cart page view.
- Feature modules (load only on their trigger): exit intent (~1.1 KB, on a real leave gesture), field capture (~1.4 KB, on first field focus — or on checkout), early-capture popup (~1.0 KB, on add-to-cart), push opt-in + service worker (~0.6 KB, on add-to-cart with push enabled), tab notification (~0.8 KB, first time the tab is hidden). A visitor who never triggers a feature never downloads it.
- Enforced at build time: the release build fails if the core ever exceeds 4 KB gzipped, so the claim cannot silently rot.
External services
This plugin works entirely on your own server by default. It does not phone home, and it has no licence check, no registration and no usage metering: with a fresh install and default settings, it makes no external requests at all.
Three optional integrations can send data off your site. Each is off until you switch it on, and each is listed here with exactly what leaves your server.
1. 6rsh (WhatsApp reminder delivery) — only if you connect it
To send WhatsApp reminders the plugin needs a WhatsApp Business sender, which it reaches through 6rsh, operated by 6rsh.com. It is used only when you save a 6rsh API key (or already run the 6rsh WooCommerce plugin on the same site) and switch the WhatsApp channel on.
- What is sent: your API key, the shopper’s phone number, the approved template name, and the template variables you mapped (typically the shopper’s first name, your store name, the cart total and the recovery link).
- When: at the moment a WhatsApp reminder is sent for an abandoned cart, and when the plugin fetches your list of approved templates so you can pick one.
- Terms of service: https://6rsh.com/terms
- Privacy policy: https://6rsh.com/privacy
2. ip-api.com (visitor country and city lookup) — off by default
Location for the carts list and live monitor normally comes from WooCommerce’s own MaxMind database, which is a file on your server; nothing is transmitted for that. If that database cannot place an address, and only if you tick «Look up a visitor’s country and city with an external service» under CartRevival Settings Compliance, that one IP address is sent to ip-api.com, operated by ip-api.com.
- What is sent: a single visitor IP address. Nothing else — no name, email, phone, cart contents or order data.
- When: at most once per IP address per day, and only when the local database returned no country.
- Note: the free ip-api.com endpoint accepts plain HTTP only, so this request is not encrypted in transit. This is why the setting is off by default. You can point it at a provider of your choice with the
cartrevival_geo_provider_urlfilter, or disable it in code with thecartrevival_geo_remote_enabledfilter. - Terms of service: https://ip-api.com/docs/legal
- Privacy policy: https://ip-api.com/docs/legal
3. Google reCAPTCHA v3 (bot filtering on capture) — only if you configure it
If you enter reCAPTCHA v3 keys under CartRevival Settings Capture, captures are verified with Google’s siteverify endpoint.
- What is sent: your reCAPTCHA secret key, the reCAPTCHA token from the visitor’s browser, and the visitor’s IP address, to https://www.google.com/recaptcha/api/siteverify.
- When: on each cart capture, while reCAPTCHA keys are configured.
- Terms of service: https://policies.google.com/terms
- Privacy policy: https://policies.google.com/privacy
4. cartrevival.com (opt-in usage telemetry) — off until you opt in
CartRevival can send a small daily ping to cartrevival.com, operated by us, so we know which plugin, WordPress and PHP versions are in use. This is strictly opt-in: nothing is ever sent until you choose an option on the one-time notice shown on CartRevival’s own admin screens, and choosing «No thanks» is remembered and never re-asked.
- What is sent: the CartRevival version, WordPress version and PHP version, plus either a random site token (if you chose «Share anonymously») or your site’s domain (only if you chose «Share with my domain»). Never any customer, cart, order or personal data.
- When: at most once per day, only after you opt in. You can change or withdraw the choice at any time under CartRevival Settings Compliance Usage telemetry; withdrawing stops the pings and deletes the site token so past pings cannot be linked to you.
- Terms of service: https://cartrevival.com/terms
- Privacy policy: https://cartrevival.com/privacy
ئېكران كەسمىسى







ئورنىتىش
- Install and activate WooCommerce first.
- Upload the
cartrevivalfolder to/wp-content/plugins/, or install through Plugins Add New. - Activate CartRevival.
- Go to CartRevival Settings to choose how long a cart sits idle before it counts as abandoned.
- Go to CartRevival Recovery to write your reminder email and switch it on.
Sending is off by default. Nothing is ever emailed to a shopper until you enable it.
FAQ
-
Will this slow down my store?
-
No. The always-loaded core is about 2 KB gzipped (2.2 KB measured), deferred and never render-blocking. Exit intent, field capture, push opt-in and tab alerts live in separate small modules that download only at the moment their trigger fires. Tracking beacons are fire-and-forget, so the browser never waits on them, and a page view with an empty cart performs no database writes at all. A build-time size gate fails any release whose core exceeds 4 KB, so this number cannot quietly rot.
-
Does it capture guest carts?
-
Yes. Anonymous shoppers are tracked from their first add-to-cart using a first-party cookie and WooCommerce’s own session. As soon as they type an email or phone number at checkout, that cart becomes recoverable.
-
When is a cart considered abandoned?
-
After a period of inactivity you choose, from 15 to 240 minutes, defaulting to 60. Activity means a page view, a cart change or typing at checkout. Each cart schedules its own check, so nothing scans your database on a timer.
-
What happens if the shopper comes back on their own?
-
CartRevival matches the order back to the cart by session, cookie, customer account, email or phone, cancels any pending reminders, and records the revenue. A cart that converts without a reminder is never counted as recovered — your recovery numbers stay honest.
-
Can a customer be emailed twice by mistake?
-
No. Every reminder reserves a unique slot in the send log before it is scheduled, and the send job claims that slot atomically. Two workers racing on the same cart cannot both send.
-
Does it work with the block cart and checkout?
-
Yes. Both the classic shortcode checkout and the newer block checkout are supported, including capturing details entered in block checkout fields.
-
Is it compatible with High Performance Order Storage?
-
Yes. HPOS compatibility is declared, and CartRevival works with it on or off.
-
Does it work on mobile?
-
Yes, including exit intent. CartRevival detects an intent to leave on touch devices through scroll-up velocity and the back gesture.
-
Is it GDPR compliant?
-
CartRevival registers with WordPress’s personal data exporter and eraser, includes a one-click unsubscribe link in every message, and lets you disable IP address and page URL collection entirely. Phone numbers can require explicit consent. Nothing is deleted on uninstall unless you opt in.
-
Does it work in Arabic, or any right-to-left language?
-
Yes, fully. The plugin’s own admin screens and messages are translated, and recovery emails follow the shopper’s language, not your site’s: someone browsing in Arabic gets an entirely Arabic email, right-to-left, including the button and the footer. You can also write your own Arabic version of each recovery step. An email is never sent half in one language and half in another.
-
Do I need a paid account or a licence key to use this?
-
No. The free plugin has no cart quota, no registration, no account and no licence check. It never contacts a licensing server to decide what you are allowed to do. The optional PRO add-on is sold separately and is not required for anything described here.
-
Will it work with my theme and page builder?
-
Yes. The capture popups ship their own self-contained styles, and the plugin adds nothing to your theme’s templates. Both the classic shortcode checkout and the WooCommerce block checkout are supported.
-
What happens to my data if I uninstall?
-
Nothing is deleted unless you tick the box for it under Settings. Delete the plugin with that box unticked and your carts and history stay in the database; tick it first and everything the plugin created is removed cleanly on uninstall.
-
Does it work with a caching plugin?
-
Yes. CartRevival never blocks a cached page. If a cache serves a stale security token, the script quietly fetches a fresh one and retries.
-
How do I send WhatsApp reminders?
-
WhatsApp reminders are free. Connect your WhatsApp number at 6rsh.com (free), then pick an approved message template under CartRevival Recovery WhatsApp. If the 6rsh WooCommerce plugin is already connected on your site, CartRevival uses that connection automatically.
باھالاشلار
تۆھپىكار ۋە ئىجادكار
«CartRevival – Abandoned Cart Recovery & Live Cart Monitor» كودى ئوچۇق يۇمشاق دېتال. تۆۋەندىكى كىشىلەر بۇ قىستۇرمىغا تۆھپە قوشقان.
تۆھپىكار«CartRevival – Abandoned Cart Recovery & Live Cart Monitor» نى تىلىڭىزغا تەرجىمە قىلىڭ
ئىجادىيەتكە قىزىقامسىز؟
كودقا كۆز يۈگۈرتۈپ، SVN خەزىنە تەكشۈرۈپ ياكى RSSئارقىلىق ئىجادىيەت خاتىرىسىگە مۇشتەرى بولغىلى بولىدۇ.
ئۆزگىرىش خاتىرىسى
2.12.0
- Fixed: WhatsApp reminders could go out with a recovery link that led nowhere. An approved WhatsApp template can put its only variable inside its link button — which is exactly where a cart-recovery link belongs. CartRevival could not see that variable: it counted only the placeholders in the message body, so a template like that showed no variable settings at all, and the reminder was sent with nothing in the button. WhatsApp accepts that and delivers the message anyway, so every reminder arrived looking perfectly normal with a button that opened a «page not found». Nothing reported a failure, because as far as the message log was concerned it had been sent. CartRevival now reads the whole template — heading, body, footer and every button — shows you one setting per variable, and fills the link button with a working recovery link automatically.
- New: see and test what your WhatsApp reminders actually say. Each WhatsApp step now lists every variable in the chosen template, says what it fills in («Body {{1}}», «Button 1 URL {{1}}»), and shows a sample value from a real cart beside it. «Preview message» renders the whole message as the shopper receives it, including the button and the link it opens — a placeholder that cannot be filled is shown as a placeholder, never quietly hidden. «Send test» sends one real message to a number you type, shows you the number and the finished message before it goes, and afterwards reports exactly what was transmitted, the message ID, and the button link so you can open it yourself. A test never counts as a recovery message and never touches your automation.
- New: a step that cannot send says so before it sends. If any variable in the chosen template has nothing mapped to it, the step now says so on the screen, in plain words, naming the variable. The same check runs immediately before every send, so a reminder that could only arrive broken is stopped and the reason is recorded on the cart’s Recovery History instead of being delivered.
- Improved: a failed WhatsApp send now tells you why. «1 failed» is not something anyone can act on. Failures now carry the messaging platform’s own error code and explanation, so a wrong template setting is distinguishable from a shopper whose number simply cannot receive messages.
- Improved: sending a reminder by hand shows the real message. The confirmation on the Carts screen and the Live monitor used to show a fragment of the template’s body text with no heading and no button. It now shows the fully filled-in message, including the link the button opens, resolved the same way the automatic send resolves it.
2.11.1
- Fixed: with PRO installed, WhatsApp reminders were queued and then cancelled at the last moment. PRO replaces the whole Recovery screen with its own, so the free plugin’s WhatsApp on/off switch had nowhere left to appear — and that hidden switch, still sitting at its «off» default, was the one the sender checked. You switched WhatsApp on for a step, PRO scheduled the reminder from that step, and hours later the send was refused as «Connected, not enabled» by a switch you had no way to reach. The step switch you actually set is now the one that counts. If you have a WhatsApp step switched on with a template chosen, WhatsApp reminders will start going out when you update. Turning every WhatsApp step off still stops them, as it always did.
- Fixed: phone numbers typed without a country code were rejected at send time on PRO stores. The 2.9.12 release completed these numbers correctly when it stored them, and completed them again on the free plugin’s own send path — but PRO owns the schedule whenever it is installed, and PRO’s path still used the number exactly as typed. A shopper who entered a local mobile got a reminder addressed to a number no messaging service can deliver to. Both WhatsApp and SMS now send to the completed international number, taken from the one already stored against the cart, or worked out from the shopper’s country and then your store’s country.
- Fixed: a reminder that never happened now always says why. A step that could not produce an address — no phone captured, a number that could not be read, consent missing where you require it — was skipped in complete silence: no message, no queue entry, nothing on the cart’s Recovery History. So did an entire series paused by an inactive PRO licence. Every one of those now writes a plain-English line onto the cart’s history explaining what stopped it. Nothing that fails to send is invisible any more.
2.11.0
- Changed: sending a reminder by hand now respects the channel’s on/off switch. Until now the «Send Email now» and «Send WhatsApp now» buttons on the Carts screen ignored it — automatic reminders correctly sent nothing when a channel was switched off, but a manual send from that screen went out anyway. If you have been switching a channel off and still sending by hand, that will now be blocked, and the button tells you which switch to turn on and links you straight to it. The switch is on CartRevival Recovery, not Settings.
- Fixed: «Connected» and «Enabled» no longer look like the same thing. Settings Connections said «Connected.» as soon as working credentials existed — including a 6rsh key inherited automatically from the 6rsh WooCommerce plugin, which needs no action from you at all. That reads as «WhatsApp is on». It never meant that. Every screen now shows one of four plain states — Not connected, Connected but not enabled, Enabled but no approved template, Enabled and sending — with a link to the exact control that changes it. Connecting a channel still never starts messaging your customers on its own; that stays a deliberate step.
- Fixed: reinstalling CartRevival PRO no longer wipes your licence key. Deleting the plugin removed the key even when you had not asked for your data to be deleted — and since PRO is installed by uploading a zip, the ordinary way to update it by hand left the site reading «Not activated» with sending paused. Your key is yours; it is now left alone.
- Fixed: the Live screen’s numbers contradicted each other. The headline stats, the filter chips and the visitor list each decided independently who counted, so a quiet period could show six zeros at the top, «25» on the chips, and «Nobody matches these filters» in the list — all at once. They now come from one source. When automated traffic is the only thing on screen, it says so and tells you how many are hidden, instead of showing a bare zero that looks like broken tracking.
- New (PRO): the Recovery Scorecard. Which reminder actually earns the money, per step, per channel and per language — led by what a single send of each step is worth, so you can see which reminder to keep and which to drop. Attributed revenue only; carts that came back on their own stay on their own separate line.
2.10.0
- Fixed: the phone field asked for your country code twice. The country selector beside the box already said «+971», and the box itself showed «+971 50 000 0000» as its example — so shoppers typed the code again and the saved number came out as «+971971…». A number like that looks valid, so it was stored without complaint and then rejected by WhatsApp at send time. The box now asks only for the local part of the number, and pasting a number in any form — with the code, without it, with a leading 00 or a leading 0 — always produces one correct number. Existing carts are checked on update; a repair command is provided and nothing is changed without you asking for it.
- Changed: «recovered» now means CartRevival actually brought the shopper back. Until now, any abandoned cart that had been sent a reminder and later turned into an order was counted as recovered — including shoppers who ignored every reminder and came back on their own days later. That overstated the one number you use to judge whether this plugin pays for itself. A cart now counts as recovered only when a reminder plausibly caused the order: the shopper clicked the recovery link and ordered within the click window, or ordered shortly after a reminder was delivered. Shoppers who returned by themselves are still counted and still shown — on their own clearly-labelled line, never added to the recovered figure. Both windows are yours to set under Settings, and every cart now says in plain words why it was counted the way it was. Your recovered total will probably fall when you update. That is the correction, not a fault. Older carts are re-derived from what was recorded at the time; where the evidence was never recorded they are marked «Unknown» rather than guessed.
- Improved: sending a reminder by hand now tells you what it will do before it does it. The buttons used to read only «Send Email now» or «Send WhatsApp now», with no way to tell which address, which number or which template was about to be used, and afterwards said only «Sent.» Each action now names the recipient and the exact template and language before you confirm, and reports what the provider actually said afterwards, including the message ID. Buttons that cannot work are disabled and say precisely why — and which screen fixes it — instead of failing after you press them.
For every earlier release, see CHANGELOG.md inside the plugin folder, which carries the complete history back to 1.0.0.
