Build an Abandoned Cart Recovery Flow
Recover up to 30% of abandoned carts with a strategic multi-channel flow combining Email, SMS, and WhatsApp.
What You’ll Build
By the end of this guide, you’ll have a complete abandoned cart recovery system that:
- ✅ Detects when customers abandon their cart
- ✅ Sends personalized recovery messages across 3 channels
- ✅ Includes dynamic product images and cart rebuild links
- ✅ Offers strategic incentives to drive conversion
- ✅ Tracks performance and revenue attribution
Expected Results: Industry average is 8-15% cart recovery rate. With Tajo’s multi-channel approach, many merchants see 20-30% recovery rates.
Prerequisites
Before building your flow, ensure you have:
- ✅ Tajo connected to Shopify (Setup guide)
- ✅ Brevo account with automation access
- ✅ SMS/WhatsApp consent collection enabled (optional but recommended)
- ✅ At least 50 historical checkouts for testing
- ✅ 30-45 minutes to complete setup
Understanding Cart Abandonment
Why Do Customers Abandon Carts?
| Reason | % of Abandoners | Solution |
|---|---|---|
| High shipping costs | 48% | Free shipping threshold |
| Just browsing/not ready | 37% | Multi-message nurture sequence |
| Comparison shopping | 27% | Urgency (limited stock, time-limited discount) |
| Complicated checkout | 24% | Cart rebuild link (one-click return) |
| Concerns about security | 18% | Trust badges, testimonials in email |
| Sticker shock | 16% | Payment plan options, discount offer |
Source: Baymard Institute, 2024
The Multi-Channel Advantage
Single channel (Email only): 8-12% recovery rate
Multi-channel (Email + SMS): 15-20% recovery rate
Tri-channel (Email + SMS + WhatsApp): 25-35% recovery rate ⬅️ Tajo exclusive
Why WhatsApp works: 98% open rate vs. 20% for email. Many international customers prefer WhatsApp for shopping conversations.
Step 1: Choose Your Trigger Event
Tajo offers two cart abandonment triggers:
Option A: Checkout Started (Recommended)
When it fires: Customer enters email/phone at checkout but doesn’t complete purchase
Pros:
- ✅ Have verified contact info (email + phone)
- ✅ Higher purchase intent
- ✅ Standard industry practice
- ✅ Can include cart rebuild link
Cons:
- ❌ Misses early abandoners (add to cart but don’t start checkout)
Best for: Most stores, especially with multi-step checkout
Option B: Cart Created
When it fires: Customer adds first item to cart
Pros:
- ✅ Catches more abandoners
- ✅ Earlier intervention
- ✅ Can nurture browsers into buyers
Cons:
- ❌ May not have contact info yet
- ❌ Lower purchase intent
- ❌ Higher unsubscribe risk if too aggressive
Best for: High-ticket items, long consideration cycles (jewelry, furniture, etc.)
Our Recommendation: Start with Checkout Started. Once optimized, add a separate “Cart Created” browse abandonment flow.
Step 2: Create Your Flow in Brevo
2.1 Access Brevo Automation
- Log in to Brevo
- Navigate to Automation > Workflows
- Click Create a Workflow
- Select Start from scratch (we’ll build custom)
2.2 Set Up the Trigger
- Click Add trigger
- Select Event as trigger type
- Choose event:
shopify_checkout_started - Add filter conditions:
order_iddoes not exist (ensures they didn’t complete purchase)cart_valueis greater than0(has items in cart)cart_valueis less than10000(filter out test orders)
2.3 Add Entry Filters (Important!)
Prevent duplicate messages and respect customer preferences:
- Click Add condition under trigger
- Add these filters:
- ✅ Has not placed order since starting this flow
- ✅ Is subscribed to email (if using email channel)
- ✅ Has not been in this flow in the last 30 days
- ✅ Cart value > your minimum threshold (e.g., $20)
Step 3: Build Your Message Sequence
The 3-Message Strategy
Message 1 (Email) - Reminder + Soft Sell
- Timing: 1 hour after abandonment
- Goal: Gentle reminder, remove friction
- Conversion Rate: 40-50% of total recoveries
Message 2 (SMS or WhatsApp) - Urgency + Incentive
- Timing: 6 hours after abandonment (if no purchase from Message 1)
- Goal: Create urgency, offer help
- Conversion Rate: 30-35% of total recoveries
Message 3 (Email + Discount) - Last Chance
- Timing: 24 hours after abandonment (if no purchase from Messages 1-2)
- Goal: Final incentive, social proof
- Conversion Rate: 15-20% of total recoveries
Step 4: Design Message 1 (Email - 1 Hour)
4.1 Add Time Delay
- After your trigger, click Add action
- Select Wait
- Set duration: 1 hour
- Why 1 hour? Gives customer time to return naturally, but not so long they forget
4.2 Add Conditional Check
Before sending, verify they haven’t purchased:
- After wait, click Add condition
- Select If/Else
- Condition: Has placed order since starting flow
- If yes: End flow (they purchased!)
- If no: Continue to email
4.3 Design the Email
Click Add action > Send email > Create new email
Subject Line Options (A/B test these):
- “You left something behind 🛒”
- “Still thinking about
{{PRODUCT_NAME}}?” - “Your cart is waiting for you”
- “Quick question about your order?”
Email Body Structure:
<!-- Hero --><h1>You left something in your cart!</h1><p>Hi `{{FIRSTNAME}}`, we saved your items. Ready to check out?</p>
<!-- Product Block (Dynamic) -->{% for item in cart_items %}<div class="product"> <img src="{{item.image}}" alt="{{item.name}}"> <h3>{{item.name}}</h3> <p>{{item.variant}}</p> <p class="price">${{item.price}}</p> <p>Quantity: {{item.quantity}}</p></div>{% endfor %}
<!-- Cart Summary --><div class="summary"> <p>Subtotal: ${{cart_subtotal}}</p> <p>Shipping: ${{shipping_cost}}</p> <p class="total">Total: ${{cart_total}}</p></div>
<!-- CTA Button --><a href="`{{checkout_url}}`" class="cta-button"> Complete Your Purchase</a>
<!-- Trust Elements --><div class="trust"> <p>✓ Free shipping on orders over $50</p> <p>✓ 30-day money-back guarantee</p> <p>✓ Secure checkout with SSL encryption</p></div>
<!-- Help Offer --><p>Questions? Reply to this email or chat with us at <a href="https://tajo.io/chat">tajo.io/chat</a></p>Design Tips:
- Use large, clear product images (at least 300px wide)
- Make CTA button high contrast and above the fold
- Include cart rebuild link (
{{checkout_url}}) in multiple places - Add trust badges if you have them
- Mobile-first design (60% open on mobile)
Step 5: Design Message 2 (SMS/WhatsApp - 6 Hours)
5.1 Add Time Delay & Condition
- Add Wait action: 5 hours (total 6 hours from abandonment)
- Add If/Else condition: Has placed order?
- If yes → End flow
- If no → Continue
5.2 Choose Channel: SMS or WhatsApp?
Use SMS if:
- Customer is in US/Canada
- You have SMS consent
- Short, direct message needed
Use WhatsApp if:
- Customer is international
- You have WhatsApp consent
- You want to include rich media (images, carousel)
Use Both (recommended):
- Add condition: If has WhatsApp consent → Send WhatsApp
- Else if has SMS consent → Send SMS
- Else → Skip this message
5.3 SMS Message Template
Hi `{{FIRSTNAME}}`! 👋
Your cart is waiting:{{PRODUCT_NAME}} - $`{{CART_TOTAL}}`
Only `{{INVENTORY_COUNT}}` left in stock!
Complete checkout: `{{SHORT_LINK}}`
Questions? Reply to this message.
Reply STOP to opt-outCharacter count: Aim for < 160 characters for single SMS. This example is ~150 chars.
5.4 WhatsApp Message Template (Tajo Exclusive!)
WhatsApp allows richer formatting and media:
Hi `{{FIRSTNAME}}`! 👋
I noticed you left some items in your cart:
🛍️ *{{PRODUCT_NAME}}*💰 $`{{PRODUCT_PRICE}}` x `{{QUANTITY}}`
📦 *Cart Total: $`{{CART_TOTAL}}`*
⚡ *`{{INVENTORY_COUNT}}` left in stock* - Don't miss out!
[Image: `{{PRODUCT_IMAGE}}`]
Complete your order: `{{CHECKOUT_URL}}`
Need help? Just reply to this message!WhatsApp Advantages:
- ✅ Can include product image
- ✅ Rich text formatting (bold, italic)
- ✅ Two-way conversation (customer can reply with questions)
- ✅ 98% open rate vs. 20% SMS open rate
- ✅ No character limits (unlike SMS)
Step 6: Design Message 3 (Email - 24 Hours + Discount)
6.1 Add Delay & Condition
- Add Wait: 18 hours (total 24 hours from abandonment)
- Add If/Else: Has placed order?
- If yes → End flow
- If no → Continue to final email
6.2 Generate Dynamic Discount Code
Option A: Static Discount (Simple)
- Use existing Shopify discount code (e.g., “SAVE10”)
- Manually insert in email template
Option B: Unique Discount (Recommended - Prevents Sharing)
- In Brevo email editor, click Add dynamic content
- Select Discount code generator
- Configure:
- Source: Shopify
- Discount type: Percentage or fixed amount
- Value: 10% or $10 (test what works for your AOV)
- Expiration: 48 hours from send
- Usage limit: 1 per customer
- Insert token:
{{DISCOUNT_CODE}}
6.3 Final Email Design
Subject Line (test these):
- “
{{FIRSTNAME}}, here’s 10% off your cart 🎁” - “Last chance: Your cart + a special discount”
- “We miss you! Here’s 10% off to come back”
- “
{{PRODUCT_NAME}}+ 10% off = 😍”
Email Body:
<!-- Urgency Header --><div class="urgency-banner"> ⏰ Your cart expires in 24 hours!</div>
<h1>Come back and save 10%!</h1>
<p>Hi `{{FIRSTNAME}}`,</p>
<p>We noticed you haven't completed your purchase. As a thank you for considering us, here's a special 10% discount:</p>
<!-- Discount Code --><div class="discount-code"> <h2>`{{DISCOUNT_CODE}}`</h2> <p>Use at checkout • Expires in 48 hours</p></div>
<!-- Product Reminder --><h3>Your Cart:</h3>{% for item in cart_items %}<div class="product"> <img src="{{item.image}}"> <div> <h4>{{item.name}}</h4> <p class="price"> <span class="original">${{item.price}}</span> <span class="discounted">${{item.price_with_discount}}</span> <span class="savings">Save ${{savings}}</span> </p> </div></div>{% endfor %}
<!-- Enhanced CTA --><a href="`{{checkout_url_with_discount}}`" class="cta-button-large"> Claim Your 10% Discount Now</a>
<!-- Social Proof --><div class="testimonials"> <h3>Join 10,000+ Happy Customers</h3> <div class="review"> <div class="stars">⭐⭐⭐⭐⭐</div> <p>"Fast shipping, great quality!"</p> <p class="author">- Sarah M., Verified Buyer</p> </div></div>
<!-- Urgency Reminder --><div class="urgency-footer"> <p>⏰ This discount expires in 48 hours</p> <p>📦 Only `{{INVENTORY_COUNT}}` left in stock</p></div>
<!-- Help --><p>Questions? Our team is here to help: <a href="mailto:[email protected]">[email protected]</a></p>Step 7: Add Advanced Optimizations
7.1 Exclude Purchased Customers
After each message, add a condition:
If contact has: - Placed Order within last 24 hours - With Order Total >= Cart TotalThen: Exit flowThis prevents sending emails to customers who already purchased.
7.2 Suppress Recent Purchasers
Add global filter at flow entry:
Exclude contacts where: - Last Order Date > (now - 14 days)Don’t spam recent buyers with abandonment emails.
7.3 Add Cart Value Segmentation
For high-value carts ($100+), adjust strategy:
- Add condition after trigger:
If cart_value > 100 - True branch: Send all 3 messages with larger discount (15-20%)
- False branch: Send standard 3 messages with smaller discount (10%)
7.4 Test Different Discount Tiers
A/B test discount amounts by cart value:
| Cart Value | Discount Offer | Why |
|---|---|---|
| $0-$49 | 10% off | Low AOV, higher discount % acceptable |
| $50-$99 | $10 off | Medium AOV, fixed $ discount feels more valuable |
| $100-$199 | 15% off | High AOV, percentage discount shows bigger savings |
| $200+ | Free shipping + 10% | Very high AOV, multiple incentives |
Step 8: Activate Your Flow
8.1 Final Pre-Launch Checklist
Before going live, verify:
- ✅ All 3 messages have been designed and tested
- ✅ Dynamic product blocks display correctly
- ✅ Checkout URLs include discount codes (if applicable)
- ✅ Mobile preview looks good (60% open on mobile)
- ✅ Unsubscribe link is present in all emails
- ✅ SMS compliance text included (Reply STOP to opt-out)
- ✅ Entry filters prevent spam (not in flow last 30 days, etc.)
- ✅ Exit conditions prevent sending to customers who purchased
8.2 Test the Flow
-
Create test cart on your Shopify store
- Use a different email (e.g., [email protected])
- Add products to cart
- Start checkout (enter email)
- Abandon without purchasing
-
Wait 1 hour - Check that Email #1 arrives
-
Wait 6 hours total - Check that SMS/WhatsApp arrives
-
Wait 24 hours total - Check that Email #2 with discount arrives
-
Verify:
- Product images display correctly
- Checkout link works (returns to cart with items)
- Discount code applies correctly
- All personalization tokens populate
8.3 Activate!
- In Brevo, review your flow one more time
- Click Activate Workflow
- Confirm activation
Congratulations! Your abandoned cart recovery flow is now live 🎉
Step 9: Monitor Performance
Key Metrics to Track
| Metric | Where to Find | Target |
|---|---|---|
| Flow Entry Rate | Brevo > Workflows > Analytics | 100-200 entries/day (varies by traffic) |
| Email 1 Open Rate | Message 1 analytics | 40-50% |
| Email 1 Click Rate | Message 1 analytics | 15-25% |
| SMS/WhatsApp Open Rate | Message 2 analytics | 80-98% |
| Email 2 Open Rate | Message 3 analytics | 30-40% |
| Overall Recovery Rate | Tajo dashboard | 20-30% |
| Revenue Per Recipient | Tajo dashboard | $5-$15 (varies by AOV) |
Calculate ROI
Monthly abandoned carts: 1,000 Recovery rate: 25% = 250 recovered orders Average order value: $75 Monthly recovered revenue: $18,750
Flow costs:
- SMS ($0.01 x 1,000): $10
- WhatsApp ($0.005 x 500): $2.50
- Discount cost (10% x $18,750): $1,875
- Total cost: $1,887.50
Net profit: $18,750 - $1,887.50 = $16,862.50/month
ROI: 893% 🚀
Optimization Over Time
Week 1-2: Establish baseline metrics
Week 3-4: A/B test subject lines
- Test 2-3 subject lines per message
- Send each to 50% of audience
- Winner = highest click-through rate
Month 2: A/B test send timing
- Test sending Message 1 at 30 min vs. 1 hour vs. 2 hours
- Test Message 2 at 4 hours vs. 6 hours vs. 8 hours
- Optimal timing varies by industry
Month 3: A/B test discount amounts
- Test 10% vs. 15% vs. $10 vs. free shipping
- Measure conversion rate AND profit margin
- Sometimes lower discount = higher profit
Ongoing: Refresh creative quarterly
- Update product images
- Refresh copy
- Test new testimonials/social proof
Advanced Strategies
Strategy #1: Browse Abandonment (Earlier Trigger)
For stores with high consideration cycles (jewelry, furniture):
- Create second flow triggered by
cart_created(not checkout started) - Shorter sequence (2 emails only, 2 hours + 24 hours)
- Focus on education, not discounts
- Goal: Get them to checkout, then main abandonment flow takes over
Strategy #2: Progressive Discounting
Start small, increase if they don’t convert:
- Message 1: No discount, just reminder
- Message 2: 5% discount
- Message 3: 10% discount
- Bonus Message 4 (48 hours): 15% + free shipping
Pro: Maximizes profit by not discounting everyone Con: Longer flow, more messages
Strategy #3: Personalized Recommendations
In your abandonment emails, include:
<h3>You might also like:</h3><!-- Use Tajo AI recommendations -->{% for product in recommended_products %}<div class="recommendation"> <img src="{{product.image}}"> <h4>{{product.name}}</h4> <p>${{product.price}}</p> <a href="{{product.url}}">View Product</a></div>{% endfor %}This can increase AOV by 15-30% when customers do convert.
Strategy #4: Exit Intent Popup (Prevention)
Before carts are abandoned, show exit-intent popup:
- In Tajo, go to Forms > Create Popup
- Trigger: Exit intent (mouse moves to close tab)
- Offer: “Wait! Here’s 10% off if you complete checkout now”
- Display on: Checkout page only
Prevents 15-20% of abandonments before they happen.
Troubleshooting
Flow Not Triggering?
Check #1: Verify Shopify connection
- Tajo dashboard > Integrations > Shopify should be ✅ Connected
- Test by creating a cart and checking Tajo > Events
Check #2: Review entry filters
- Make sure filters aren’t too restrictive
- Test with filter:
cart_value > 1(allows all carts)
Check #3: Verify event tracking
- In Shopify, install Tajo app embed (Online Store > Themes > App embeds)
- Without app embed, checkout events may not fire
Customers Not Receiving Emails?
Check #1: Verify email subscription status
- Customer must be subscribed to email marketing
- Check in Brevo: Contacts > Search customer > Subscription status
Check #2: Check spam folder
- Ask test recipient to check spam/junk
- Add your sending domain to allowlist
Check #3: Review send logs
- Brevo > Workflows > Your flow > Logs
- Look for send errors or bounces
Discount Codes Not Working?
Check #1: Verify Shopify discount settings
- Shopify > Discounts > [Your discount]
- Ensure “Active” and not expired
- Check usage limits
Check #2: Test manual application
- Copy discount code from email
- Try applying at Shopify checkout manually
- If works manually, issue is with dynamic insertion
Check #3: Check Tajo discount sync
- Tajo > Shopify Settings > Discount sync
- Should be enabled and error-free
FAQ
Should I offer a discount in the first email?
No (unless very high abandonment rate). Best practice:
- Email 1: Reminder only
- Email 2: Urgency + help offer
- Email 3: Discount as last resort
This maximizes profit by not training customers to wait for discounts.
How often can I send cart abandonment emails?
Industry standard: 3 emails over 24-48 hours
Aggressive: 4-5 emails over 3-7 days
Conservative: 2 emails over 24 hours
Tajo recommendation: Start with 3 (1hr, 6hr, 24hr). Add more only if metrics support it.
Should I use SMS or WhatsApp for Message 2?
SMS if:
- Primarily US/Canada customers
- High SMS consent rate
- Need guaranteed delivery
WhatsApp if:
- International customer base
- Higher engagement rates desired (98% vs. 80% for SMS)
- Want two-way conversation capability
Both:
- Best approach: Send WhatsApp to those with WhatsApp consent, SMS to others
Do I need consent for cart abandonment emails?
Email: In most countries, cart abandonment is considered transactional (not marketing) if customer entered email at checkout. However, best practice is to only send to subscribed customers.
SMS: In US, requires express written consent (TCPA). Checkout entry alone is NOT sufficient.
WhatsApp: Requires opt-in consent in all regions.
Tajo’s approach: We automatically filter to subscribed customers to ensure compliance.
What if customer abandoned but has “Accepts Marketing” unchecked?
You have three options:
- Don’t send (safest, but loses revenue)
- Send first email only as transactional receipt (gray area)
- Use popup at abandonment to collect consent before sending
Recommendation: Option 3 - show exit-intent popup asking “Want us to save your cart and email you?” with checkbox.
Conclusion
You’ve now built a complete, multi-channel abandoned cart recovery flow that:
✅ Reaches customers via Email, SMS, and WhatsApp ✅ Uses strategic timing (1hr, 6hr, 24hr) ✅ Offers progressive incentives (ending with discount) ✅ Includes dynamic cart rebuild links ✅ Respects customer preferences and compliance
Expected results: 20-30% cart recovery rate, translating to thousands in recovered revenue per month.
Next Steps
- ✅ Monitor performance for 2 weeks to establish baseline
- ✅ A/B test subject lines to improve open rates
- ✅ Add browse abandonment flow for early-stage abandoners
- ✅ Enable exit-intent popup to prevent abandonment
- ✅ Set up post-purchase flow to drive repeat purchases
Related Articles
- Collect SMS & WhatsApp Consent at Checkout
- Understanding Shopify Data Sync
- Create Dynamic Discount Codes
- Set Up WhatsApp Order Notifications
Questions? Reach out to [email protected] or chat with us in the Tajo dashboard!
Last updated: January 22, 2025