If you’re seeing checkout started but no purchase on Shopify, your closest-to-buying shoppers are stalling at the very last step — and the fix is diagnosis, not guesswork. Before you change anything, rule out tracking first: compare Shopify’s Orders page with your analytics, because blocked scripts can hide sales you actually made. Once you confirm the drop-off is real, work through the usual suspects in order — payment, shipping shock, a discount that won’t apply, a technical error, and trust at the payment step. The fastest way to find which one is to reproduce it with real test orders on a real phone. Everything below is how to isolate that single leak.
Diagnose first — don’t start redesigning checkout
The temptation is to swap payment providers, rewrite the checkout, or blast abandoned-cart emails. Resist it. “Checkout started but no purchase” is a symptom with half a dozen possible causes, and each one has a different fix. Change five things at once and you’ll never know which mattered — and you risk breaking something that worked. Diagnosis before treatment, every time.
Why this matters more than any other drop-off
A shopper who reached checkout is the warmest traffic you have. They found you, chose a product, added it to cart, and clicked through to pay. They did everything right and stopped one tap from the sale. That is completely different from a homepage bounce — you’ve already paid to acquire this person, and they’ve already told you they want to buy. Recovering them is the cheapest conversion lift available, and a leak here silently taxes every ad dollar and every SEO win. (If shoppers stall one step earlier — adding to cart but never reaching checkout — start with add to cart but no sales instead.)
Rule out tracking before you conclude you lost the sale
Do this first, because it can make the whole problem disappear. A “checkout started, no purchase” pattern in GA4 or an ad platform often means the conversion fired but the order event didn’t — blocked by an ad blocker, a consent banner the shopper declined, a misconfigured pixel, or Shopify’s checkout stripping third-party scripts. Cross-check your Shopify Orders page against your analytics for the same date range:
- Shopify shows the orders, analytics doesn’t → it’s a tracking gap, not lost sales. Fix your GA4/pixel setup and stop chasing a drop-off that isn’t happening.
- Shopify confirms the orders never came → the drop-off is real. Move on to the causes below.
Skipping this step is the single most common way stores waste weeks “fixing” a checkout that was actually converting fine.
Likely causes, ordered by how often they’re the culprit
- Shipping cost or delivery time shown at checkout. The number-one killer. The shopper committed mentally at the product price, then sees shipping (or a slow delivery estimate) and feels tricked. Surface shipping earlier, add a free-shipping threshold, or bake it into the price.
- Missing or failing payment methods. No Shop Pay, PayPal, Apple/Google Pay, or the local method your audience expects — or a method that’s present but throws an error when they try to pay. If their preferred wallet isn’t there or won’t process, many leave rather than type a card.
- A discount that won’t apply. The code from your email or banner greys out, silently does nothing, or won’t stack at checkout. Shoppers who came for the deal will not pay full price. This is common enough to have its own playbook — Shopify discount not applying at checkout — and fragile discount stacking is often the root cause; see Shopify Functions vs discount apps.
- A checkout error after an app or theme change. A recently installed app or a checkout extension injected a script that throws on some devices, blocking the “Pay now” button. This is invisible until you reproduce it — and it’s the cause that most often needs a developer.
- Weak trust at the payment step. A bare checkout, no visible returns/refund policy, no reviews, or a store that looks unfinished. Handing over a card is the highest-anxiety moment in the whole funnel — reassurance has to be right there.
- Accelerated-checkout edge cases. Dynamic “Buy it now” and express wallet buttons are great — until they bypass a cart-based discount, free gift or upsell, so the total lands wrong or the shopper hesitates and abandons. Test the express path separately from the normal one.
How to diagnose — the test-order matrix
You can’t feel a checkout bug from a dashboard. Place real test orders and vary the conditions bugs hide in. Work top to bottom; each row is an action, not a guess.
| Check | What to do | What a failure looks like |
|---|---|---|
| Tracking cross-check | Compare Shopify Orders vs analytics, same dates | Shopify has orders analytics never counted |
| Test order (mobile) | Buy a real product on your phone, start to finish | A step is slow, confusing, or errors out |
| Test order (desktop) | Repeat on desktop, in a different browser | Behaves differently from mobile |
| Payment methods | Try every method you offer at the pay step | A method is missing, greyed, or fails |
| Shipping | Watch when/where the shipping cost first appears | It surprises you late, or delivery is slow |
| Discounts | Enter every live code and automatic offer | Code fails, won’t stack, or is ignored |
| Currency / country | Test a non-default currency or shipping country | Prices, taxes or methods look wrong |
| Accelerated checkout | Use “Buy it now” / express wallet buttons | Total is wrong or an offer is skipped |
| Trust signals | View the checkout as a first-time buyer | No policy, reviews, or reassurance |
Run the mobile and desktop passes across different devices, browsers, currencies and payment methods. Bugs love the combinations you personally never use — the shopper on an old Android in another currency hits code paths you never see.
Common mistakes
- Emailing your way out of it. Abandoned-checkout recovery is worth running, but it’s a bandage. If the pay step is broken, you’re just reminding people about a checkout that still won’t let them buy.
- Skipping the tracking check and treating a reporting gap as lost revenue — then “fixing” a checkout that already works.
- Adding urgency timers and popups on top of an unresolved leak: more friction, same drop-off.
- Changing several things at once, so you can’t tell what fixed it — or what broke.
When to bring in a developer
Do the tracking cross-check and the test orders yourself; anyone can. Involve a developer when the trail points under the hood: a checkout error after an app install, a discount or Function that misbehaves at checkout, an accelerated-checkout path that skips an offer, or app conflicts you can’t isolate across devices. That’s exactly what our Shopify development service handles — reproducing the bug across the real device/browser/payment matrix and fixing the code, not just the symptom.
Checkout-started-but-no-purchase is almost always one fixable cause, not a hundred. Rule out tracking, feel the checkout in a test order, fix the single biggest leak, and re-measure. Your warmest shoppers convert the moment the road to “Pay now” is clear.
Customers reaching checkout but not buying? Send us your store URL — we’ll run the payment, shipping, discount, checkout-error and tracking checks, find the biggest drop-off, and tell you what to fix first. Get your free Shopify Profit Audit.