On 22 October 2026 a store owner selling crystals to international customers posted 30 days of Shopify numbers to r/ecommerce: 1,670 sessions, 57 add-to-carts, 38 sessions that reached checkout and 2 completed orders. Free shipping, PayPal as the only payment option, no payment errors in the admin. Most replies landed on the same step. The diagnosis below works for any store where people start paying and do not finish, whether the front end is a Shopify theme, a headless build or WooCommerce.
One reply summed up the numbers:
your traffic isn’t really the problem. 57 add to carts from 1,670 sessions is fine, and 38 of those 57 reaching checkout is a good sign. the leak is 38 checkouts turning into 2 orders. people wanted the stuff and bailed on the last step.
(u/datagekko, r/ecommerce, 22 October 2026)
What counts as reached checkout in Shopify analytics
Shopify’s behaviour reports define “sessions that reached checkout” as “the total number of sessions where there was user input (for example, a key press or mouse click) during checkout”. “Sessions that completed checkout” are sessions “where a customer purchased a product”. The ShopifyQL sessions schema uses the same pair of metrics and adds one that is more useful for this problem: sessions in which the checkout page was reached and then a purchase was completed.
Three details change how you read the funnel:
- A session is counted once per step. One person who opens checkout on a phone, gives up and comes back on a laptop is two sessions at the checkout step.
- The funnel can be open or closed. An open funnel includes sessions that enter at any step and in any order, so reached checkout can exceed add-to-cart.
- Orders and completed sessions can differ, because Shopify notes that a customer can buy more than once in one session.
Worked example: the 1,670 / 57 / 38 / 2 funnel
Divide each step by the one before it and the leak shows up without any tool:
| Step | Sessions | Rate from previous step | Rate from all sessions |
|---|---|---|---|
| All sessions | 1,670 | 100% | |
| Added to cart | 57 | 3.4% | 3.4% |
| Reached checkout | 38 | 66.7% | 2.3% |
| Completed order | 2 | 5.3% | 0.12% |
The owner’s dashboard showed an add-to-cart rate of 3.41% and a conversion rate of 0.11%, which matches this arithmetic within rounding. Two thirds of carts reach checkout, and about one checkout in twenty is paid. As a rough yardstick only: Baymard’s 70.22% average abandonment applied to 57 carts would leave about 17 orders, not 2. Baymard measures carts, not checkouts, so the comparison is loose, but the order of magnitude says the last step is broken. Another reply suggested splitting the same funnel by market:
I’d also separate the funnel by country, because 1,670 sessions spread across different markets can hide some pretty big differences.
(u/Signalbridgedata, r/ecommerce, 22 October 2026)
How accelerated checkout buttons change the funnel
Shopify’s accelerated checkout documentation says buttons such as Shop Pay, Apple Pay, Google Pay and PayPal on product pages let customers “skip the cart and go directly to the checkout from the product page”. At checkout they appear in an Express Checkout section at the top. Sessions that use them reach checkout without ever adding to cart, which is one reason an open funnel can show more checkouts than carts. It also means a wallet popup that fails or is cancelled still counts as a reached checkout. Test each button you show, on the device type your buyers use.
Why the abandoned checkouts list is shorter than reached checkout
Most owners open Orders, then Abandoned checkouts, expecting 36 entries. They usually find far fewer. Shopify’s abandoned checkouts documentation explains why: a checkout counts as abandoned only after the customer has provided an email address and the checkout “remains incomplete for more than ten minutes”. Someone who left at the contact step never appears there. Abandoned checkouts older than three months are deleted automatically, so a quarter-old comparison has nothing to compare against.
Many reached checkouts and few abandoned ones means people leave before they type an email: something on the first checkout screen stops them. A full abandoned list means they got further, and each entry shows how far.
The same page lists the cases where Shopify sends no recovery email: a payment processing error, a shipping address the store does not ship to, products that became unavailable, and payments Shopify Payments blocked as high risk. Those blocked checkouts sit in a separate Blocked view. The page also shows tooltips explaining why an email was not sent.
Did customers get a payment error or leave before paying
Another reply in the thread asked the right question:
One question: are customers getting a payment error, or are they simply leaving without clicking Pay? Those are two different problems and need different fixes.
(u/kunalkhatri12, r/ecommerce, 22 October 2026)
The owner answered that there were no payment errors and that the store had no Shopify Payments, only PayPal. Nobody was declined, then: people saw the payment step and chose not to continue. A later reply described the PayPal payment page as unbranded and out of place after the redirect.
Baymard Institute’s cart abandonment research (last updated 22 September 2025) gives the base rates. Across 50 studies the average documented cart abandonment rate is 70.22%. Leaving aside shoppers who were just browsing, the reasons in Baymard’s survey were led by extra costs too high (40%), slow delivery (20%), not trusting the site with card details (19%), forced account creation (18%), and a too long or complicated checkout (17%). A declined card accounts for 10%, and not enough payment methods for 9%. A loss of 36 out of 38 is far outside those averages and usually points to one specific blocker.
Where Shopify shows why a payment failed
Three places hold the reason. The abandoned checkouts list shows tooltips when a recovery email was not sent, including for payment processing errors. Blocked high-risk payments sit in the Blocked view. For orders that exist, the order timeline records each payment as a payment event; Shopify says you can expand it and click “Information from the gateway” for the provider’s details, and that payment events help troubleshoot failed captures and refunds. If your provider is external, as PayPal was in the crystal store, its own dashboard is the place to look for declined or abandoned payment attempts, because Shopify only sees what the provider reports back.
How to test your Shopify checkout on a phone
Buy something from your own store on a phone, on mobile data, from the link your ads use. Shopify’s test order guide offers a test payment gateway and Shopify Payments test mode. Test orders do not show up in payouts or reports. Shopify also warns: “Customers can’t place live orders during the time that your payment providers are in test mode.” A store left in test mode after launch shows checkouts and no orders. A real card followed by a refund works too, with possible processor fees.
Open the store inside the Instagram or TikTok app, not only in Safari or Chrome. A reply in r/smallbusiness on paid social traffic put it this way:
browses and adds to cart but never buys = price/shipping surprise, or checkout pain inside the Instagram/FB in-app browser (no saved cards, no autofill, logins). That one is site-side and very common with social traffic
(u/Smooth_Form_6972, r/smallbusiness, 22 October 2026)
Watch for anything that covers the page. In the crystal store thread one reviewer could not get through at all:
I couldn’t access the checkout without accepting cookies or changing to desktop view.
(u/CanadianEmberflower, r/ecommerce, 22 October 2026)
The same reviewer pointed at a tip prompt in the checkout.
Which local payment methods are missing in your market
Shopify lists its local payment methods, and each appears only when the customer is in the supported country and pays in an eligible currency:
| Market | Method buyers expect | What Shopify’s docs say |
|---|---|---|
| Poland | BLIK, Przelewy24 | BLIK needs PLN as the store currency or a Poland market in PLN; the customer enters a Polish address and pays with a six-digit code from the bank app |
| Norway | Vipps | Not in Shopify Payments. Vipps comes from a Shopify App Store plugin built by Crude, with no Express checkout. Shopify’s MobilePay serves customers in Denmark or Finland only |
| Portugal | MB WAY, Multibanco | MB WAY is approved in the app before checkout completes. Multibanco leaves the order in Payment pending for up to 7 days, then cancels it if unpaid |
| Spain | Bizum | Bizum needs EUR and a customer in Spain, and is in early access, not available to every eligible merchant |
| Germany | Klarna, PayPal | Klarna works only in the customer’s local currency and only when the customer checks out with an email address. PayPal Express Checkout is a separate provider whose setup Shopify asks you to complete promptly |
An order waiting for a Multibanco payment is a real order in Payment pending, and one cancelled after 7 days looks like a vanished sale. Check which countries your abandoned checkouts come from and compare them with this table.
A test checkout protocol, step by step
Run the same script after every theme, app or payment change:
- Turn on Shopify Payments test mode under Settings > Payments > Manage > Enable test mode. Shopify’s test mode guide notes it can only be activated once Shopify Payments setup is complete, and advises against activating it on a live production store, so pick a quiet hour and keep the window short. Stores on another provider use Shopify’s test payment gateway, which needs a paid plan.
- Pay with the success card 4242424242424242 (any future expiry, any three-digit code, a two-word name), then with the decline card 4000000000000002 and the insufficient funds card 4000000000009995. Check what the customer sees on each failure: a clear message or a dead end.
- Repeat in a private window, logged out, so saved Shop Pay or account details do not fill the form for you.
- Repeat on a phone, on mobile data, from the ad link, both in the browser and inside the Instagram or TikTok app.
- Repeat with one delivery address per market you sell to, and confirm each local payment method actually appears for that address and currency.
- Turn test mode off and confirm a live payment method is back on the checkout.
Shipping costs, duties and taxes at the last step
Costs that appear only at checkout are the most common reason in Baymard’s list, and 12% of respondents said they could not see or calculate the total order cost up front. For cross-border stores, run your test order with a delivery address in your biggest foreign market. Look for a shipping line that was not on the product page, a duties or import tax line, a currency switch, a long delivery estimate, or the message that the store does not ship to that address. Shopify’s abandoned checkout page treats a non-shippable address as a reason to skip the recovery email, so buyers outside your shipping zones never get a reminder either.
Shipping zones and rates that do not cover the buyer
Shopify defines shipping zones as groups of countries or regions with the same rates, and to sell to a country it must be included in an active market. Shopify’s abandoned checkouts page lists an address the store does not ship to as a case with no recovery email, so buyers from an uncovered country leave no trace beyond the checkout count. Stores using carrier-calculated rates should add backup rates, which Shopify says help customers complete checkout when carrier-calculated rates fail. In the crystal store thread, one reply summed up where to look:
try opening your abandoned checkouts in shopify and see how far each one got then run a test order yourself from 1 or 2 of the countries most of your traffic comes from. for international stuff its usually something that only shows up at checkout like duties, long delivery estimate or the currency switching
(u/summit_23, r/ecommerce, 22 October 2026)
Collecting duties at checkout instead of on delivery
Shopify can collect an estimate of duties and import taxes at checkout, which it says helps customers avoid unexpected charges on delivery. The setup page lists the requirements: Harmonized System (HS) codes and a country or region of origin on each product, a shipping carrier that supports DDP labels if you buy labels in Shopify, and no Shopify Fulfillment Network. It is switched on under Settings > Taxes and duties, or per market. Duties can then be shown as a line item at checkout or included in the price, in which case you pay them. A line item that appears for the first time on the last screen is still a late cost, so mention duties on the product or shipping page too.
Fraud filters, declines and bot checkouts
If you use Shopify Payments, open the Blocked view of abandoned checkouts. Payments blocked as high risk land there and get no recovery email. A batch of blocked checkouts from one country after a campaign is a targeting question as much as a fraud one.
Bots inflate the top of the funnel. Shopify’s guide to identifying bot activity lists an unexpected spike in sessions, a spike from one device type, many sessions from Google Cloud Platform or Amazon Web Services data centre locations, and a high volume of checkout or payment attempts with repeated or suspicious customer details. It also warns that suspected card-testing or bot checkout attempts might not appear as abandoned checkouts. Compare 30 to 90 days, as the guide suggests, before you rebuild anything.
Apps and checkout customizations that block the order
Checkout code can stop a sale on purpose. Shopify’s cart and checkout validation functions check orders against rules “before allowing customers to proceed”, and their errors are described as validation errors “that block a customer from proceeding through checkout”. Shopify adds the messages to the targeted checkout fields. A misconfigured rule, such as a minimum order value or a postcode check, blocks every buyer it matches. After installing or updating any app that touches checkout, run the test protocol above. Our comparison of custom Shopify development and theme customization explains which checkout changes need Functions or checkout extensions.
When analytics and consent hide the real numbers
Count orders in the Shopify admin, not in Google Analytics. Shopify’s page on analytics discrepancies says Google “can only count visitors with JavaScript and cookies activated”, that browser extensions can block it from tracking sessions and purchases, and that session definitions and reporting time zones differ between tools. A GA4 funnel that shows 38 checkouts and 0 purchases may simply have lost the purchase event. Our guide to a cookie banner that is declined while tracking still loads covers the consent side and how to test it.
Decision table: where the gap is
| What you see | Most likely cause | What to check first |
|---|---|---|
| Many reached checkouts, few abandoned checkouts | Buyers leave before typing an email | First checkout screen on a phone and in an in-app browser, cookie banner, account login |
| Abandoned checkouts stop at shipping | Unexpected cost or no delivery to that address | Shipping zones, duties, currency, delivery estimate |
| Abandoned checkouts stop at payment, no errors | Missing or untrusted payment method | Local methods per market, redirect payment pages |
| Recovery tooltips mention payment errors | Declines or a misconfigured provider | Provider status, test mode, order timeline payment events |
| Blocked view filling up | Fraud filter or card testing | Country mix, bot signals, campaign targeting |
| Admin orders fine, GA4 shows no purchases | Tracking gap | Purchase event, consent setup, time zone |
| Orders in Payment pending, then cancelled | Delayed payment method such as Multibanco | Reminder emails before the 7-day window ends |
The same diagnosis on WooCommerce
WooCommerce shows the gap in its order statuses: Pending payment means “the order has been received, but no payment has been made”, Failed means the payment “failed or was declined”, and the block checkout keeps temporary draft records before an order is submitted. Filter by those statuses and you have the WooCommerce version of the abandoned and blocked lists. Our article on WooCommerce checkout analytics for AI agents covers tracking the steps.
Update, . On WooCommerce, an order in Processing or Completed is not proof that the money arrived. The Wordfence weekly vulnerability report for 12 to 18 October 2026 listed a cluster of payment gateway plugins in which an unauthenticated request could mark orders as paid or change their status: Asaas Gateway before 2.7.8 accepted a webhook with an empty access token, and Rede Itaú 3.7.1 to 5.5.2 let forged webhook calls mark unpaid orders as paid or cancel completed ones (second advisory). Coinbase Commerce up to 1.4.1 had a payment bypass with no known patch when the report came out on 23 October; Wordfence suggests uninstalling it and finding a replacement. Update the gateway, then compare a sample of recent paid orders with the payment provider’s dashboard: every one should match a real transaction.
When to bring in help
Most of this is an afternoon of testing with a phone, a foreign address and the abandoned checkouts list. When the gap sits in theme code, a checkout app or a payment integration, it becomes development work: our Shopify developer service covers checkout and payment setup, and the comparison of custom Shopify development and theme customization explains what can change on Shopify checkout and what cannot. A website check runs the same test purchase on several devices, and the store reliability plan repeats it after every app, theme or payment change.







