When a post-purchase offer does not display
Because post-purchase offers run inside Shopify's native Checkout Post-Purchase Extension sandbox, certain platform rules apply across all Shopify stores (see Shopify post-purchase limitations). When this happens, your customer's original order stays intact and processes as normal.
Offer display limitations
These conditions prevent a post-purchase offer from appearing:
Condition | What happens |
Payment provider | Third-party payment providers that require the customer’s CVN/CVV to be retained aren't supported. This might include, but isn't limited to, payment providers such as Braintree, Payflow Pro, PayPal Payments Pro, and Eway. |
Payment method limitations | Your customer checks out with an installment or wallet service, such as Klarna, Affirm, Afterpay, Apple Pay, Amazon Pay, or Google Pay.
Your customer paid for the initial purchase with a gift card or any payment method other than a credit card. |
Purchase events | Third-party analytic services that use the Shopify Pixel API (such as Google Analytics, Facebook, Pinterest and Snap) report only the purchase event and value for the initial purchase. |
Analytics | Third-party analytics services that use the |
Multiple currencies | If your customer checks out in a currency other than your store's default currency. |
Multiple apps | Only one app can be selected for post-purchase product offers. Merchants with multiple apps that have the post-purchase checkout extension need to select which app appears on the post-purchase page. You can use a banner during app onboarding to let merchants know that they can select your app as the default post-purchase app in the Shopify admin checkout settings. |
Orders with duties | Orders that include duties. |
Local delivery orders | Orders placed for local delivery. |
Minimum order price | Orders need to be $0.50 or more. |
Order creation delays | During high-traffic events such as flash sales, Shopify may briefly delay order creation to keep checkout running smoothly. |
Note: While Shopify does not allow adding a new subscription to an order that already contains one, Loop works around this limitation by supporting multiple subscription line items within the same order.
Fulfillment holds and order status
When your customer reaches the post-purchase page, Shopify places their order in "On hold" status. This hold stops the order from being fulfilled while your customer is still interacting with the post-purchase offer.
How the fulfillment hold is released
Shopify releases the hold when either of these happens:
Your customer completes the post-purchase flow and reaches the Thank You page.
The order hold timer expires.
Once Shopify releases the hold, it updates fulfillable_quantity to the full order quantity and sets fulfillment_status to open, so you can fulfill the order. While the order is on hold, fulfillable_quantity is 0, which is why you can't fulfill it.
Payment capture and partially paid orders
When your customer accepts a post-purchase offer, the payment outcome depends on whether the transaction goes through:
Outcome | What happens to the order |
Transaction succeeds | Shopify records an additional transaction on the order and marks it as "Paid." |
Transaction fails | The upsell product still gets added to the order, but Shopify records no additional transaction and marks the order as "Partially paid." |
Why post-purchase payments get declined
A post-purchase payment can fail for two main reasons:
Bank decline: your customer's bank rejected the transaction.
Payment processor decline: the payment processor rejected the transaction on its end.
When a post-purchase transaction fails, Shopify automatically emails your customer to explain that an item was added to their order but payment wasn't completed. The email includes a link your customer can use to complete payment.
Handling a partially paid order
You can handle a partially paid order in any of these ways:
Collect payment manually: contact your customer directly and use the payment link from the order.
Remove the unpaid item: use Order Editing in Shopify to remove the item from the order.
Note: If the unpaid post-purchase item included extra shipping charges, removing the item doesn't remove the unpaid shipping amount. The order stays in "Partially paid" status until you resolve the shipping charge.
When you remove an unpaid item through Order Editing, Shopify tracks it in the Returns column of your Shopify analytics.
If your customer checks out with only a phone number and no email address, Shopify doesn't send the payment link email. In this case, copy the Checkout link for payment collection from the order and send it to your customer by SMS.
Make sure your customer has completed payment before you fulfill the order.
Partially paid orders with manual payment capture
Orders with post-purchase upsells can also show as "Partially paid" if your store uses the manual payment capture method. In this case, you need to manually capture payment for the original order and every post-purchase upsell before the order status updates to "Paid."
Supported payment processors
Post-purchase offers need Shopify to vault your customer's payment information during checkout. This means your customer must complete payment directly on Shopify Checkout, without a redirect to an external payment provider.
Shopify Payments is fully supported. Any direct payment provider available for your store and region also works with post-purchase offers.
To see the full list of supported third-party credit card processors for your store and region, navigate to Shopify admin > Settings > Payments > Third-party providers, then click Choose third-party provider.
Unsupported payment types
External or offsite payment providers, such as Mollie: these redirect your customers away from Shopify Checkout to complete payment, so Shopify can't vault their card information for one-click post-purchase use.
Payment gateways that require a CVV for every transaction, such as Bambora/Beanstream: these aren't supported by default, and your customers see an error when they try to accept the offer. If your gateway allows it, turn off the per-transaction CVV requirement in its settings.
Selling plan limitations
Post-purchase offers support a limited set of selling plans. The following are not supported:
Selling plans with anchor dates
Prepaid selling plans
If any of these are used in your offer configuration, they will not be applied in the post-purchase flow. Use standard subscription selling plans without these conditions to ensure the offer works as expected.
Loop preset bundle
Post-purchase offers do not currently support Loop preset bundles. Avoid including them in your offer configuration.
Strategic Best Practices
1. Structure Your Priority List from Narrowest to Broadest
Loop evaluates flows from Priority 1 downward and stops at the first match. Structure your priority order like a pyramid:
Priority 1–3 (Hero Product Upgrades & Subscription Upsells): Narrowly targeted flows for your top 3–5 bestsellers (e.g., One-time buyer of Hero Coffee → Upgrade to Subscription; Monthly Subscriber of Hero Probiotic → Upgrade to 3-Month Bundle).
Priority 4–6 (High-Cart-Value Cross-Sells): Mid-tier flows targeting specific collections or orders over $75.
Lowest Priority (Store-Wide Catch-All Flow): A flow with no conditions in Step 2 that pitches a universally appealing, low-ticket add-on (Cross-sell under $15) so no eligible checkout ever goes without an offer.
2. Always Configure an "On Decline" follow-on offer
When a customer declines your Primary offer, they have indicated that either the price commitment or the recurring commitment was too high.
If your Primary Offer is an Upgrade to Subscription (high commitment), set your On Decline follow-on to a low-friction One-Time Cross-Sell (such as a sample pack, travel size, or single accessory at 15–20% off).
If your Primary Offer is a higher-priced Cross-Sell ($35), set your On Decline follow-on to a lower-priced item ($10–$15) with free shipping.
3. Exclusive subscription offer in post-purchase
If you show the same subscription discount that customers already declined on the product page, cart, or checkout, they are likely to decline it again. Post-purchase works best when the value is clearly better than what they’ve already seen.
Customers who chose a one-time purchase despite seeing your standard subscription offer can still convert when the incentive improves. Use post-purchase to present a higher-value subscription option that feels meaningfully different.
How to set this up
Create a new selling plan
Set a higher discount than your standard subscription
Keep this plan hidden from storefront and checkout
Use it in your post-purchase offer
Select this selling plan in the offer configuration
Show it only after payment, when the customer’s card is already saved
This keeps the offer exclusive to post-purchase and avoids overlap with your storefront pricing. A clear, better deal at this stage typically improves subscription conversion.
Common Mistakes to Avoid
Forgetting to turn on "Delay checkout orders": Without a checkout processing delay (Settings → General), Loop may process the subscription contract before the customer finishes viewing your Primary and Follow-on offers.
Fix: Enable Delay checkout orders and set it to at least 10 minutes.
Setting timer durations that exceed your checkout delay: Setting a 10-minute Primary timer and a 5-minute Follow-on timer (15 minutes total) when your checkout delay is 10 minutes will trigger a timer budget error and block saving.
Fix: Keep Primary Timer+Longest Follow-on Timer < 10 minutes (e.g., 5 minutes + 4 minutes).
Putting a Catch-All flow at Priority 1: If a flow with no targeting conditions sits at Priority 1, it will match every single checkout order first and prevent Priority 2, 3, and 4 from ever running.
Fix: Reorder priority and move your Catch-All flow to the very bottom of the list.
Creating separate Upgrade flows for every single product SKU: Building 10 separate flows for 10 flavours that share the same selling plan creates unnecessary maintenance.
Fix: Use a single Upgrade to Subscription offer and select all 10 products using the multi-product picker.
