help1
paid abandoned checkoutshopifycheckoutpayment gatewaypostmortem

The Paid Abandoned Checkout We Keep Finding on Shopify

A customer card got charged, Shopify showed a paid abandoned checkout, and nothing in the admin flagged it. Here is what happened and what we changed.

help1 Team
The Paid Abandoned Checkout We Keep Finding on Shopify

Ines runs a small stationery brand out of Edinburgh. Fifty orders a month on a good month, mostly UK domestic with a few into Ireland. She uses Opayo as her card processor because her merchant bank hooks straight into it. On a Monday in September she messaged us about a customer who had paid Opayo £84 the previous evening and still had no Shopify order Monday morning. The Opayo dashboard showed captured. Shopify showed a paid abandoned checkout.

The customer had emailed Ines over the weekend asking for a tracking number for an order she could not see.

What happened

Her customer completed card entry on Opayo's hosted payment page late Sunday. Opayo authorised, captured, and sent the browser back toward Shopify's thank-you page. Something about that redirect round trip did not complete. Shopify's abandoned checkouts list showed the record. The record flagged no error. The customer's bank already showed the £84 as settled.

Ines did not notice until the customer's email arrived. In the gateway dashboard the money was sitting there, politely, with a timestamp. In Shopify there was a line item in the abandoned checkouts table that looked indistinguishable from the forty other abandoned carts collected that week.

We checked whether the customer had re-tried in a second tab. She had not. We checked whether Opayo had done a pre-authorisation and let it lapse. It had not. The capture was real. Ines also mentioned that this was the second UK store on her same Opayo account showing the same failure that week; the second was a client of hers who had the same payment setup. Both stores. Same gateway. Same day.

We created a draft order for her customer, matched the line items to the abandoned record, chose Opayo as the payment method, and marked it as paid. Shopify sent the confirmation email. The customer was fine. Ines was not. Two things worried her. The first was how many customers had hit this and not emailed. The second was that nothing in Shopify had told her this was happening.

Why it happened

Shopify treats a checkout as complete the instant the customer loads the thank-you page. That page load is what fires the order creation hook and the confirmation email. Any redirect gateway (Opayo, Razorpay, Yoco, PayFast, PayTm, 2Checkout, PayPal, Pagar.me, Molpay, Shop Pay installments) captures payment first, then redirects the browser back to Shopify second. The gap sits in that second step.

If the customer closes the tab, drops wifi, hits a slow phone network, or the gateway takes longer than Shopify's session window allows, the capture completes and the redirect fails. Shopify Staff have described the mechanism identically across threads spanning six years. One version from a 2020 CCAvenue thread: "if the customer doesn't reach the 'Thank You' page...our system won't trigger the order creation." Nothing in the architecture has shifted since then.

The paid abandoned checkout is the artefact of that gap. The row is in the admin because the checkout session started. The row stays as abandoned because Shopify never got the signal that the redirect round trip finished. The money is in the gateway because the gateway finished its own job. From Shopify's point of view, nothing is wrong. From the merchant's point of view, there is a stranded charge.

Three variants are worth separating in your head, because the fix for each differs.

The first is browser interruption, as above. This is the one most Shopify Staff replies describe. The second is a capture-mode misconfiguration: some gateways default to manual capture, which waits for Shopify to request the charge after the redirect. If the redirect fails, the charge request never fires. A PayFast merchant on a 2022 Community thread resolved every one of their paid abandoned checkout cases by switching the gateway from manual to automatic capture; the symptom looked identical but the root cause was gateway configuration, not browser behaviour. The third is async payments. Pix in Brazil, SEPA bank transfer, and other delayed-confirmation methods complete minutes or hours after the customer leaves the checkout. One Pagar.me merchant wrote that the order was marked as abandoned a few seconds before the payment got confirmed. There was no browser mistake. The confirmation simply arrived after Shopify's session had already given up waiting.

A quieter variant also matters for Ines, because her store leans mobile. Shop Pay installments produced the same failure on two separate mobile checkouts a community member later linked to poor mobile page speed on the thank-you page. If your tracking scripts and widgets make the confirmation page slow to render, a mobile shopper can navigate away before the page completes its load, and Shopify never gets the signal.

Each of these looks the same from the admin: a line in the abandoned list, a charge in the gateway, no order. If you have been chasing one of these for an hour and the gateway dashboard disagrees with Shopify, the first fifteen minutes with a help1 expert is free and that is usually enough to confirm which variant you have.

What we changed

A few of our first instincts were wrong. We asked Ines to add a "please wait, do not close this window" message to her thank-you redirect copy. Shopify Staff recommend this in many threads. In the specific case where the customer's wifi had dropped, no amount of checkout copy would have helped; she had done the right thing by closing the tab on a frozen screen. The messaging is a partial reduction, not a fix. We kept it in because it costs nothing.

What we did that moved the number:

  1. We built Ines a weekly reconciliation sheet. Export the Opayo captured-transactions report, export Shopify orders for the same date range, left join by email and timestamp. The rows without a match are the paid abandoned checkout cases. We ran this for the previous three months at the same time and found eleven more. Nine of them had never been flagged to Ines by the customer. We opened draft orders for each, marked them as paid against Opayo, and emailed the customers with their order numbers and an apology.
  2. We asked Opayo whether her account was on manual or automatic capture. It was on automatic. That ruled the second variant out for her account specifically and told us Ines was dealing with browser interruption, not configuration.
  3. We ran a PageSpeed Insights audit on her thank-you page. Score 44 on mobile. She had a review widget, a Klaviyo pop-up, and two tracking scripts still firing after the order was placed. We moved the pop-up off the thank-you page entirely and deferred the two tracking scripts to a post-redirect window. The thank-you page's mobile Largest Contentful Paint dropped from 4.8 seconds to 2.1. This does not fix the browser-interruption variant for every customer, but it narrows the window.
  4. We scheduled the reconciliation as a Monday morning task for her virtual assistant. Not an alert, not an app, not a monitoring hack. A weekly habit.
  5. We did not install an app for this. We looked. The App Store does not have a native paid abandoned checkout reconciler for Shopify. The closest adjacent story we handle on a regular basis is the QuickBooks sync pattern where a connector silently stops posting to the ledger, which has the same shape of surprise: a dashboard that looks fine over an operation that is not.

The eleven stranded charges from the back-catalogue were our quietest finding. None of those customers had complained. They had either forgotten, assumed the delay was normal, or disputed the charge through their bank. One of them turned out to have a chargeback filed six weeks earlier that Ines had absorbed because she had thought the order had never actually existed. It had existed. The bank won on process, not merit.

What we would catch earlier next time

The hard lesson for us is that abandoned-checkout queues contain two different populations that look identical. Most rows are what the admin says they are: a cart that stopped. A small subset is a completed sale that Shopify did not know had happened. Shopify's own staff have confirmed, in response to several merchant feature requests, that abandoned checkouts cannot be programmatically converted into orders, and that the admin will not add a "promote this to a paid order" button because the two record types are structurally different.

That means the admin will keep showing you a paid abandoned checkout as if it were an unpaid one, and the responsibility for noticing sits on the merchant. For a solo founder doing fifty orders a month, that responsibility is a weekly reconciliation. For a growing brand doing a thousand, it is almost certainly a line item in someone's job description or a case for a developer-built webhook listener.

The other thing we would catch earlier: when a merchant has the same gateway running across two Shopify stores and the problem shows up in both the same day, the issue is not merchant-specific. A HitPay case from 2021 ran so systematically that the gateway itself posted on the Shopify Community to report the failure and asked Shopify for private log access. Shopify's reply redirected HitPay to the Partner dashboard. If both of Ines's stores had been affected on the same day, this was probably the gateway rolling out something upstream, and the chat we would open next was with Opayo support, not with Shopify.

Ines spent her Monday morning reconciling the eleven back-cases, emailing the customers, and refunding one who had already gone to her bank. The gateway dashboard showed her a cleaner picture than the Shopify admin did. By Tuesday the weekly reconciliation was on her virtual assistant's calendar, and the thank-you page was quietly loading faster for mobile shoppers who did not know they had been part of the problem. Her abandoned checkouts queue still contains the odd stranded payment every week. She knows now. The admin still does not.

A paid abandoned checkout is the shape of a round trip the admin cannot see, left behind in a row that reads like every other abandoned cart. We would rather Shopify showed us the difference. Until then, a Monday morning spreadsheet is the only alert the merchant gets.

Still stuck? Talk to an expert.

Our vetted Shopify experts can fix this issue for you in a live session. $39 per session. Your first 15 minutes are free.