Cart recovery is the single highest-ROI email automation in e-commerce, which is why every agency deck quotes the same 10-15% recovery number. That number assumes the email reaches the customer in a place they will actually see it.
In practice, abandoned-cart email is designed as marketing: hero image of the product, big discount code, prominent CTA button, big footer. It lives in the marketing ESP. It ships from the marketing subdomain. Gmail classifies it as promotional and routes accordingly. The "recovery rate" you see in your reports is real, but it is a fraction of what would be possible if the mail actually landed in the primary inbox.
The Promotions-tab trap
- Gmail Promotions is the default destination. If your subdomain is
mail.yourshop.com, with no per-recipient engagement history, and the template has a hero image plus discount code, Gmail files it in Promotions by design. - Open rate hides the problem. Promotions-tab messages still get opened — by users who actively click the Promotions tab. Your overall open rate reads as 28%, but your primary-inbox open rate may be 45%.
- Conversion rate suffers disproportionately. A user who opens mail from Promotions is in a different mental mode than one who sees it in primary inbox. Recovery conversion drops even faster than open rate.
Before you optimise subject lines, test the structural placement of the email first. Moving the same message from Promotions to primary inbox typically lifts conversion by 50-80% without touching copy.
Measuring cart-recovery placement
Trigger an actual abandoned-cart flow against seed mailboxes. Shopify and most ESPs let you fire the flow for a specific customer without placing a real order:
# In Klaviyo, add seeds to a profile and trigger the flow:
klaviyo:trigger_flow \
--flow-id abandoned-cart-v3 \
--profile-emails \
"seed-gmail-01@check.live-direct-marketing.online,\
seed-outlook-01@check.live-direct-marketing.online,\
seed-yahoo-01@check.live-direct-marketing.online"
# Then check placement across providers:
curl "https://check.live-direct-marketing.online/api/check/status/$TEST_ID"
# Look at:
# - inbox vs promotions vs spam per provider
# - which step in the sequence drops (step 1 may inbox, step 3 may spam)Fixes by mechanism
- Move to Updates / primary inbox, not Promotions. Classification signals Gmail uses: plain-text-heavy body, transactional tone, no discount code in subject, low image-to-text ratio. Cart recovery can read more like a receipt ("You left these items in your cart") than a promo.
- Separate cart flow from marketing on subdomain.
cart.yourshop.com. Warm it separately. Its reputation is per-recipient high because cart-abandoners have recent brand engagement — leverage that by isolating from general promo IPs. - Fix the trigger timing. Day-1 cart recovery has highest engagement and best placement. Day-4 message from the same sender may trip frequency heuristics. Stagger sends per recipient.
- Personalise the body with item names. Emails that include product names customers just viewed have much higher engagement, which feeds back into improved placement over time.
Template that fights Promotions tab
Reference template that has consistently shipped to primary inbox on Gmail when sent from a warmed transactional subdomain:
Subject: The {{product_name}} you looked at is still in your cart
Hi {{first_name}},
Just a reminder that you left this in your cart yesterday:
- {{product_name}} ({{variant}})
- Quantity: {{qty}}
- Price: {{price}}
If you still want it, here's the link to pick up where you left off:
{{checkout_url}}
We hold carts for 7 days, so there's no rush.
If you had a question or ran into a problem at checkout, reply to
this email — it goes straight to our support team.
--
{{founder_name}}
{{shop_name}}
{{physical_address}}No discount in the first message. No hero image. One link. Founder signature. Reads like a human nudge. Gmail classifies this as an update more often than a promotion.
If you want to offer 10% off, do it in message 2 or 3, not in message 1. Discount codes in the first cart-recovery email both train customers to abandon (to get the code) and shift the classification firmly into Promotions.
Reading the data that matters
Your ESP's "open rate" for the flow is meaningless in isolation. Break it down by:
- Placement per provider (Gmail, Outlook, Yahoo, Apple).
- Conversion rate per placement (inbox vs promotions vs spam).
- Sequence step (step 1 may land well, step 3 may not).
- Time-of-day send (weekend sends from a marketing subdomain usually land worse).
The pair you care about is primary_inbox_pct * conversion_given_inbox. Both numbers matter, and both are hidden in default ESP dashboards.
Before you A/B test subject lines or discount amounts, A/B test placement. A 20-point lift in primary inbox placement dominates any copy tweak you can run.