Connect a Shopify or WooCommerce store and a journey's cart abandoned trigger fires off a real checkout-started-but-not-finished event from that store — no data source to maintain, no manual export, just a recovery email that goes out on its own the moment a shopper stalls out.
The other abandoned-cart article on this site assumes you're already feeding a data source from wherever your cart data lives and sending recovery emails manually or on a recurring schedule. This one is about skipping that entirely: a connected Shopify or WooCommerce store syncs its own customers and its own cart-abandonment events directly, and a journey reacts to them in real time.
What connecting a store actually does
From Settings → Integrations, connecting Shopify walks you through its OAuth screen; WooCommerce connects with a REST API key generated on your own WordPress site. Either way, MailInApp registers webhooks on the store so customer, cart, and order events arrive live rather than through periodic polling. An initial backfill syncs existing customers into a contacts list scoped to that integration; everything after that stays current from the webhooks alone.
The cart abandoned trigger
A journey pointed at a connected integration's cart abandoned trigger enrolls a contact when that store reports a checkout started but not completed, after a delay you choose. Shopify reports this natively as a real checkout-started event. WooCommerce has no equivalent built-in signal, so cart detection there depends on whatever abandoned-cart plugin your store setup already reports through — a store with none simply won't produce cart-abandoned enrollments, which is worth checking before building a whole journey around it.
Don't remind someone who already paid
A recovery email sent to someone who already checked out is worse than no email at all. A goal step ahead of the send checks whether a purchase has landed for that contact since the cart was abandoned, and exits the run immediately if so — the reminder simply never fires for a cart that isn't abandoned by the time it would go out.
The recovery email itself
Nothing about the email differs from any other MailInApp checkout: a Product block renders a real Buy Now button charged through your own connected Stripe account, and a Countdown on a time-boxed recovery discount stays accurate whenever it's opened rather than showing a stale "expires soon" line. The integration also writes the abandoned cart's own URL onto the contact row as a merge field, so a Button can link straight back to the cart itself as an alternative to the in-email checkout.
This isn't the same as an own-checkout abandoned cart
A separate journey trigger, checkout abandoned, covers someone starting and not finishing a Buy Now on one of your own Product-block checkouts — no Shopify or WooCommerce connection required at all. Cart abandoned is specifically for a connected external store's own cart event. Both can run as separate journeys on the same account if you sell both ways.
Revenue keeps flowing into your existing reporting
Where a Shopify or WooCommerce order carries identifiable campaign or variant attribution, it rolls into the same response and A/B-test revenue numbers a native in-email checkout order already produces — recovered sales aren't a separate reporting surface to check.
Getting started
Connect your store from Settings → Integrations, then point a new journey's trigger at that integration's cart abandoned event with a delay of your choosing. Add a goal step ahead of the send to skip anyone who already paid. See Shopify, WooCommerce, and Journeys for the full reference.