Cart Recovery for Shopify

Cart recovery on WhatsApp for European Shopify brands

Tyra is one inbox for WhatsApp, Instagram, Facebook Messenger, and SMS, built for European Shopify merchants and hosted in Ireland. This page is about what we do for abandoned carts.

Hero: Tyra cart recovery message and Shopify order context

/screenshots/hero-cart-recovery.png

The Problem with Email

The Klaviyo email that gets opened at 9am tomorrow

The thing that actually happens with email cart recovery in 2026 looks like this. A customer adds a €140 jacket to cart at 8:47pm, gets distracted by a notification, closes the tab. Klaviyo fires the abandoned cart flow at T+1h. The email lands in Promotions at 9:47pm, behind seventeen other newsletters. The customer opens Gmail the next morning, scrolls past it, and the intent is gone.

Baymard's 2024 cart abandonment research puts the average abandonment rate at 70.19%, and the chunk that ever gets recovered through email sits around 4-10% depending on list quality. The rest is just lost.

WhatsApp does not have this problem because the phone is two centimetres from the customer's face and the open rate Meta publishes is 98% with a sub-three-minute median time to read. The catch is that you have to be on it the moment the cart drops, and you have to answer when the customer writes back.

Unanswered Questions

The shipping question nobody answers

The second failure mode is more annoying. A customer abandons because they could not work out whether shipping was free to Austria, so they replied to the recovery email asking. The reply went to a noreply@ address, or it went to a support inbox that gets cleared once a day by someone in a different timezone. By the time anyone sees it, the customer has bought from a competitor.

Baymard has shipping cost and delivery time as the number one and number two stated reasons for abandonment for six years running, and most cart recovery tools still treat the message as a one-way broadcast.

Discount Leakage

Coupon codes leaking to Honey and RetailMeNot

The third one is the discount you generated for one customer ending up on a coupon aggregator within hours. If your cart recovery flow uses a static code like COMEBACK10, it is on RetailMeNot by next Tuesday and every full-price customer who installs the Honey extension now gets 10% off.

The merchants we work with were losing more margin to leaked codes than they were recovering through the discount drops themselves.

Compliance Risk

German checkouts that will not survive an audit

The last one is specifically European. A German Shopify store with a pre-ticked WhatsApp opt-in box at checkout is collecting consent that is not consent. The Planet49 ruling at the CJEU in 2019 made that explicit, and German competitors have been using §7 UWG complaints as a marketing weapon ever since.

We have seen merchants get a formal Abmahnung over a single pre-ticked box, with five-figure legal costs attached. Most non-EU cart recovery tools ship with pre-ticked defaults because that is what optimises US conversion rates.

Pillar 1

EU-built

Tyra runs in Ireland on eu-west-1. Customer data, conversation history, consent records, message content, none of it leaves the EU. The DPA we send merchants is the standard SCC-free one because there is no third-country transfer to begin with, which makes the legal review at any brand with a competent DPO take an afternoon instead of three weeks.

The opt-in flow at checkout uses a Shopify checkout extension we wrote, and the checkbox is unticked by default with channel-specific wording ("I agree to receive cart and order updates on WhatsApp from {brand}"), separate from the order T&Cs. We capture the timestamp, the IP, and the exact wording version per customer, and we export the lot as a CSV for audits.

We also will not send marketing messages to phone numbers that did not opt in, even if the merchant asks. One German skincare brand asked us to enable "all customers with a phone number" as the eligible segment last autumn. We said no, they were annoyed for a week, and then their lawyer ran an audit two months later and the merchant thanked us.

GDPR-compliant opt-in at Shopify checkout

/screenshots/eu-built-cart-recovery.png

WhatsApp cart recovery thread with one-tap checkout

/screenshots/whatsapp-cart-recovery.png

Pillar 2

WhatsApp first-class

WhatsApp is the channel Tyra was built around, not a tab we bolted on next to email. We use the WhatsApp Business Platform directly, which means template messages for the outbound recovery and free-form replies within the 24-hour customer service window for everything that comes back. Templates are pre-translated into the twelve EU languages most of our merchants ship to, pre-approved with Meta, and the language is picked from the browser locale Shopify captured at checkout.

The first recovery message goes out at T+1h, with the product image, the cart resume link, and the shipping threshold inlined.

"Hi Lena, your cart at Vanami is saved. Free shipping over €75 to Austria, 2-4 business days. Resume here: vanami.com/c/..."

If that does not recover, the second message at T+24h carries a single-use discount code generated through Shopify's priceRule and discountCode APIs at send time, scoped to that customer's email, valid for 24 hours. It cannot leak to Honey because it does not exist until we send it and it stops working once the customer uses it.

We stop after two messages. Message three recovers under 1% incrementally in our data and the STOP replies it generates hurt your Meta sender quality.

Pillar 3

Shopify-native

Tyra is a Shopify app, installed from the App Store, authenticated through Shopify OAuth. We listen to checkouts/update for the abandonment trigger and orders/create to cancel queued messages if the customer completes between abandonment and T+1h. Median webhook-to-inbox latency is around 800ms.

Every conversation in the Tyra inbox shows the full Shopify customer context next to the messages: lifetime order count, last order date, current cart contents with variant and SKU, fulfilment status if there is an open order, and the shipping address.

The recovery links carry a UTM tag (utm_source=tyra&utm_medium=whatsapp&utm_campaign=cart_recovery) plus the Shopify checkout token, so recovered revenue lands in your Shopify reports under the right campaign without you wiring up anything.

Discount codes, customer tags, and order notes all round-trip into Shopify. If the AI agent promises a discount or applies a tag during a conversation, it shows up on the customer record in Shopify admin within seconds.

Shopify customer and cart context inside the Tyra inbox

/screenshots/shopify-native-cart-recovery.png

AI agent answering a shipping question grounded in Shopify

/screenshots/ai-agent-cart-recovery.png

Pillar 4

AI that actually works

The agent is grounded in your live Shopify catalogue and your shipping and returns policies, which is the part that matters. When a customer replies "is shipping free to Austria" the agent reads the real shipping zones from your Shopify settings and answers with the actual number, not a hallucinated one. When they reply "when does it ship" the agent checks inventory and your stated dispatch lead time and gives a real date range.

About 12-18% of our WhatsApp cart recoveries involve a reply before checkout, and most of those replies are one of three questions: shipping cost, shipping time, or "does this come in size M."

Customer: is shipping free?

Agent: Free over €75 to Austria, otherwise €4.90. Your cart is at €58 right now, one more item gets you free shipping. Want me to send a couple of suggestions under €20?

The agent escalates to a human inbox the moment a message mentions a refund, a complaint, a damaged item, or anything that looks like a chargeback risk. It also escalates on explicit anger and on anything it is not confident about. The escalation rules are visible and editable, not a black box.

It is not magic and we do not pretend it is. The agent handles roughly 70% of replies fully autonomously across our current merchant base, the rest land with a human. The 70% is what frees a small team to actually run the brand instead of typing "shipping is €4.90" into WhatsApp forty times a day.

Frequently asked questions

How long after abandonment does Tyra send the first message?
One hour by default. We have tested 15 minutes, 30 minutes, one hour, two hours, and six hours across our merchant base. One hour wins on recovery rate consistently, and it is far enough away from the abandonment that customers do not feel watched.
Do I need WhatsApp Business API, or is the regular WhatsApp Business app enough?
You need the API, what Meta calls WABA. The regular WhatsApp Business app does not support template messages, automation, or webhooks. Tyra walks you through Meta's Embedded Signup during onboarding, which takes about eight minutes and does not require talking to a Meta sales rep.
What happens to customers who do not give a phone number at checkout?
Shopify makes phone optional at checkout by default. Without a number there is no WhatsApp recovery, so those customers fall back to your existing Klaviyo email flow. We recommend making phone a required field for shoppers in countries where WhatsApp adoption is over 80%, which in the EU means Spain, Italy, Germany, the Netherlands, and most of Eastern Europe.
Does this replace Klaviyo?
No. Klaviyo is still better for newsletters, brand storytelling, and anything long-form. We tell merchants to run WhatsApp at T+1h and T+24h on Tyra, then let Klaviyo's email flow take over at T+72h as a longer-tail fallback. Both attribute correctly in Shopify.
What does WhatsApp cost per message?
Meta charges per-conversation, not per-message, with the rate set by recipient country and updated quarterly. For the EU it currently runs roughly €0.04-€0.08 for a marketing conversation initiated by your brand, with the 24-hour service window after a customer replies being free. Tyra passes Meta's rate through with no markup.
How do you stop messages if the customer checks out between abandonment and T+1h?
Automatically. The orders/create webhook fires, Tyra cancels any queued recovery message for that cart, and the customer never gets it. The cancellation shows up in the audit log next to the original queue event.
Is the AI agent going to invent a returns policy or hallucinate a product?
No, and this is what most of the early agent demos got wrong. Our agent is grounded in your Shopify catalogue and policy documents, with retrieval at every turn. If it does not have a confident answer, the escalation rules send the conversation to a human. We would rather miss a recovery than have the agent promise something you cannot deliver.
What about B2B Shopify stores?
The recovery flow described here is built for B2C. B2B carts on Shopify behave differently, with longer cycles, multiple stakeholders, and often manual payment terms, and the same one-hour nudge does not fit. Tyra supports B2B but the flows look different. Worth a conversation if that is your model.
How long does setup take?
About 30 minutes of active work. Three minutes to install the app from the Shopify App Store, eight for Meta's Embedded Signup, five to review the prefilled templates, five for the checkout opt-in extension, five to configure the flow. Then a wait of one to four hours for Meta to approve your first templates.

Ready to recover more carts?

Book a 30-min demo to see how Tyra can help you recover abandoned carts on WhatsApp while staying compliant.