The Checkout Optimization Playbook That Added $2M in Revenue
The $2M Problem
Our client had a 68% cart abandonment rate — roughly average for e-commerce. But "average" meant $8.2M in annual revenue was being left in abandoned carts. We recovered $2M of it in 90 days without changing a single product or price.
Here's the exact playbook.
Step 1: Measure Where They Drop
Before optimizing anything, instrument every step:
Funnel Analysis (Before):
Add to Cart: 100% (baseline)
View Cart: 72% (-28%) ← Problem 1
Begin Checkout: 48% (-24%) ← Problem 2
Enter Shipping Info: 41% (-7%)
Enter Payment: 34% (-7%)
Complete Order: 32% (-2%)
Overall: 32% completion rate
The two biggest drops: Cart → View Cart and View Cart → Checkout
These two steps alone account for 52% of all abandonment.
Step 2: Fix the Cart Page
Problem: Surprise Costs
The #1 reason for cart abandonment is unexpected costs appearing at checkout.
Before (what the customer saw):
Product: $79.00
← nothing else shown until checkout →
At checkout: Shipping $12.99, Tax $7.11
Total: $99.10 (25% more than expected)
After:
Product: $79.00
Estimated shipping: $12.99 (calculated by zip)
Estimated tax: ~$7.00
Estimated total: ~$98.99
Free shipping on orders over $100 (add $21 more!)
Result: Cart → View Cart improved from 72% to 81%
Problem: No Urgency or Trust
Added to cart page:
✓ "In stock — ships today if ordered by 3pm EST"
✓ "Free returns within 30 days"
✓ Security badges (SSL, payment processor logos)
✓ "23 people bought this today" (real data, not fake)
✓ Estimated delivery date (calculated, not generic)
Step 3: Eliminate Checkout Friction
Guest Checkout (Non-Negotiable)
Before:
Step 1: Create account (email, password, confirm password)
Step 2: Enter shipping
Step 3: Enter payment
After:
Step 1: Enter email (account created automatically)
Step 2: Enter shipping (auto-suggest with address API)
Step 3: Enter payment
Account creation happens silently. Password set via email after purchase.
Registration wall removed: +8% checkout completion.
Form Optimization
// Address autocomplete eliminates 60% of form fields
const addressConfig = {
provider: "Google Places",
fields: {
street: { autocomplete: "address-line1" },
city: { autocomplete: "address-level2", readonly: true },
state: { autocomplete: "address-level1", readonly: true },
zip: { autocomplete: "postal-code" },
country: { autocomplete: "country", default: "US" },
},
// Auto-fill city, state, country from zip code
onZipChange: async (zip) => {
const location = await lookupZip(zip);
return { city: location.city, state: location.state };
}
};
// Result: Average form completion time dropped from 94s to 38sExpress Payment Options
Payment methods offered (in order of conversion rate):
1. Apple Pay / Google Pay: 89% completion rate
2. Shop Pay / PayPal Express: 82% completion rate
3. Saved credit card: 78% completion rate
4. New credit card: 64% completion rate
Express payments should be the FIRST option, not hidden below
a credit card form. We moved Apple Pay above the fold:
Result: +5% overall checkout completion
Step 4: Cart Recovery System
For the 68% who still abandon, systematic recovery:
Email Sequence
Email 1 (1 hour after abandonment):
Subject: "You left something behind"
Content: Cart contents with images and prices
No discount. Just a reminder.
Open rate: 45%, Recovery rate: 8%
Email 2 (24 hours):
Subject: "Still thinking about [product name]?"
Content: Product benefits + social proof (reviews)
Still no discount.
Open rate: 35%, Recovery rate: 5%
Email 3 (72 hours):
Subject: "10% off your cart — expires tonight"
Content: Cart + discount code + urgency
Open rate: 30%, Recovery rate: 12%
Total recovery rate from email: ~18% of abandoned carts
Exit Intent (Desktop Only)
Trigger: Mouse moves toward browser close/back
Show: "Wait — free shipping on your order today"
or: "Complete your order in the next 10 minutes for 5% off"
Conversion rate: 3-5% of exit-intent popups
Worth implementing but not a primary strategy.
SMS Recovery (If Opted In)
SMS (2 hours after abandonment):
"Hey [name], your [product] is still in your cart.
Complete your order: [short link]"
Recovery rate: 10-15% (higher than email)
Requires: SMS opt-in during email capture
Step 5: Technical Performance
Checkout speed directly impacts conversion:
Page load time vs checkout completion:
< 1 second: baseline
1-2 seconds: -7% completion
2-3 seconds: -16% completion
3-5 seconds: -32% completion
> 5 seconds: -50% completion
Optimizations we implemented:
✓ Prefetch checkout page when cart button clicked
✓ Lazy load non-critical scripts
✓ Edge-cached shipping rate calculations
✓ Payment form loads asynchronously
✓ Eliminated 3 redirect hops in checkout flow
Result: Checkout page load time from 3.2s to 0.9s
The Results
90-Day Results:
Before After Change
Cart → View Cart: 72% 81% +9%
View Cart → Checkout: 48% 62% +14%
Checkout Completion: 32% 44% +12%
Cart Abandonment: 68% 56% -12%
Revenue Impact:
Additional completed orders/month: ~1,200
Average order value: $142
Monthly revenue recovered: $170,400
Annualized: $2,044,800
Plus cart recovery emails: ~$38,000/month additional
The Priority Order
If you can only do 3 things:
- Show estimated total on cart page (kills surprise cost abandonment)
- Add express payments above the fold (Apple Pay, Google Pay, Shop Pay)
- Implement 3-email cart recovery sequence (recovers 15-18% of abandons)
These three changes alone account for 60% of the $2M recovery. Everything else is optimization on top of a solid foundation.
Checkout isn't a page — it's a funnel. Measure every step, fix the biggest drops first, and recover what you can't convert. The math works in your favor.