A one-click upsell appears after payment is authorized and lets the buyer add a product without re-entering card details.It runs on the post-purchase page and works on every Shopify plan above Starter.
Plus is only required for offers inside checkout itself. Merchants confuse the two and upgrade for something they already have.
TL;DR
-
The post-purchase page is available on every Shopify plan above Starter through an app. In-checkout upsells are the Plus-only feature.
-
Payment method decides who sees the offer. Apple Pay, Google Pay, Amazon Pay and installment plans never show it
-
Three operational costs come with it: a fulfillment hold, partially paid orders, and understated ad reporting.

Which upsell placements are one-click?
The test is whether the buyer re-enters payment details. If they do, the offer is a second checkout with a second chance to abandon.
|
Placement |
Plans |
Charges a saved card |
Effect on the order |
|
Product page, cart drawer |
All |
No |
Adds a line before checkout starts |
|
Inside checkout (information, shipping, payment) |
Plus only |
No |
Adds a line before payment |
|
Post-purchase page, after payment and before Thank you |
All |
Yes |
Edits the original order and charges the vaulted card |
|
Thank you page |
All |
No |
Can add to the order through an app, but payment is collected separately through a new checkout or a payment request |
|
Order status page |
All |
No |
Adds to the order through order editing, which sends the buyer a payment request |
Only one step in the Shopify checkout flow can charge a saved card without a second checkout.
Shopify's developer docs restrict pre-purchase offers to Plus. Post-purchase extensions run on every plan except Starter, so these apps install on Basic stores. A custom-built extension is the exception. Shopify has to grant access before it runs live, which published apps already hold.
What Shopify Plus actually changes
|
Capability |
Basic, Grow, Advanced |
Plus |
|
Product page and cart upsells |
Yes |
Yes |
|
Post-purchase offer page, charges the saved card |
Yes, through an app |
Yes |
|
Thank you page and Order status page extensions |
Yes |
Yes |
|
Upsell rendered inside the checkout steps |
No |
Yes |
|
Checkout styling beyond the admin settings |
No |
Yes |
|
Custom fields or custom logic in checkout |
No |
Yes |
|
Shopify Functions from a public App Store app |
Yes |
Yes |
|
Shopify Functions in your own custom app |
No |
Yes |
|
Custom post-purchase extension on a live store |
Access request required |
Access request required |
Shopify Starter is excluded from all of the above. Post-purchase, Thank you page and Order status page extensions all need a plan above Starter.
The Thank you page is useful for account creation, referrals and review prompts, just not for one-click sales.
It is also where the naming gets confusing. In the checkout editor, the Thank you page sits under a heading marked Post purchase, which is not the post-purchase offer page and cannot charge a saved card. The offer page has no entry in that menu at all, because it belongs to whichever app you have selected in checkout settings.

What the editor does give you is drag and drop block editing, open to every plan above Starter, with blocks published by third-party apps.

None of those blocks charges a stored card. Everything before payment is a different set of problems.
What stops the offer from showing
The offer needs a card or billing agreement vaulted by Shopify during checkout. Payment method is the biggest filter. It is not the only one.
|
Condition on the order |
Offer displays |
|
Credit card through Shopify Payments or a direct third-party gateway |
Yes |
|
Shop Pay |
Yes in most cases. Shop Pay Installments, no |
|
PayPal Express |
Yes, but only if PayPal has approved Reference Transactions |
|
Apple Pay, Google Pay, Amazon Pay |
No |
|
Klarna, Affirm, Afterpay and other installment services |
No |
|
Paid entirely by gift card, cash on delivery, or another manual method |
No |
|
Offsite gateways that redirect away from Shopify checkout |
No |
|
Gateways that require a CVV on every transaction |
No |
|
Order total under $0.50 |
No |
|
Order includes duties, or the buyer paid in a non-default currency |
No |
|
Local delivery orders |
No |
|
Order placed outside the Online Store sales channel |
No |
|
Very high store load, such as a flash sale or BFCM peak |
Not reliably. Shopify can delay order creation and skip the page |
|
No shipping address, from digital goods or local pickup |
Yes, but a subscription can't be added |
|
Order already contains a subscription product |
Yes, one-time items only |
Shopify's developer docs and help center disagree on Shop Pay and subscription orders. The table follows the developer docs, as app vendors do. Place one live order of each to confirm how your store behaves.
How to check your PayPal Reference Transactions status
PayPal Express needs Reference Transactions approved, which Shopify requests automatically once you select a post-purchase app.
Until the approval lands, PayPal still shows up as a payment option at checkout and the offers never render, with no error anywhere. If you also sell subscriptions, the same missing approval removes PayPal from checkout entirely on subscription orders, so a store running both loses PayPal sales while it waits, not just offers.

Pending means PayPal has the request and has not ruled on it.
App vendors put the usual turnaround at a few business days. Declined is outside Shopify's control, so you contact PayPal directly and ask why Reference Transactions were refused. A newer account or a chargeback history is the common reason.
Check the status in Settings > Payments, click Manage on PayPal, and look at Automatic Payments for Approved, Pending or Declined. A declined account produces a banner stating that customers can't use PayPal Express Checkout for subscriptions, deferred purchase options or post-purchase offers.
Even once approved, PayPal allows only one post-purchase charge per order, so a buyer who accepts the first offer won't see a second.
How to check your own payment method mix
Open Analytics > Reports, filter to Finances, and look at the payment breakdown in the summary. Add up Apple Pay, Google Pay, Amazon Pay, every installment plan and every offsite method in that list.

How to set up a post-purchase upsell
If most of your orders come through wallets or installment plans, the operational costs below may outweigh what the offer earns.
Which upsell app to install on Shopify
Only one post-purchase app can be active at a time, so testing several means switching between them. Every app below runs on the same Shopify extension and has the same platform limits.
|
App |
Best suited to |
App Market Rating |
Free plan |
Built for Shopify |
|
Post-purchase, Thank you page and (on Plus) checkout offers in one app |
4.8 (1,055) |
Development stores only |
Yes |
|
|
Deep thank you page customization alongside the post-purchase offer |
4.8 (3,092) |
Yes |
No |
|
|
Building and A/B testing multi-step offer funnels |
4.6 (564) |
Yes |
Yes |
|
|
Smaller stores wanting product page and cart offers with post-purchase attached |
4.9 (2,715) |
Free to install |
Yes |
|
|
Post-purchase only, with clear documentation of Shopify's limits |
4.9 (162) |
Yes |
Yes |
|
|
Stores that also sell through POS and want one app across cart, checkout and post-purchase |
5.0 (143) |
Yes |
Yes |
One click upsell Setup steps
-
Install one app.
-
Build the offer. Choose the product, set a discount if it needs one, and add a downsell that loads if the buyer declines.
-
Set the targeting rules. At minimum, exclude the product they just bought. Most apps let you trigger different offers by cart contents or order value.
-
Activate it in the admin. Go to Settings > Checkout, find Post-purchase page, select your app and save. The section only appears once you've finished configuring the app itself.
-
Confirm PayPal Reference Transactions are approved.
-
Place a real test order. Use your online store, pay by credit card, keep it above $0.50, and run it twice so you see both the accept and the decline path.
Draft orders and other sales channels never show the offer, so testing there proves nothing.
Operational side effects
Three things change in your operations once the offer is live.
1. The fulfillment hold
Shopify holds fulfillment on every order that enters the post-purchase flow. The hold lifts as soon as the buyer accepts or declines every offer, or one hour after checkout if they abandon the page.
-
Holds only work through the Fulfillment Order API. A 3PL on the legacy order-based API sees a fulfillable quantity of zero and can fail the fulfillment.
-
The Order Created webhook fires during the hold, so an ERP or OMS listening to it gets the pre-upsell order and has to pick up the edit later.
-
Print-on-demand and auto-fulfillment apps that act on that webhook can lock the order before the upsell arrives, which turns every accepted offer into a manual edit.
-
Digital products are hit the hardest. A download link gated behind fulfillment can go unsent for up to an hour when a buyer closes the tab, which generates support tickets on orders that went perfectly well. Check whether your app lets you shorten the hold or release it early.
Ask your warehouse or integration partner which API they read before you switch the offer on. Some fulfillment services. don't support fulfillment holds at all.
Thank you page example for digital products
2. Partially paid orders
If the second charge declines, the product is still added to the order and the order lands in Partially paid.
-
Shopify emails the buyer a link to complete payment, though not if they checked out with a phone number and no email.
-
Manual capture produces the same status for a different reason, since both the original payment and the upsell have to be captured by hand before the order reads as Paid.
-
Removing the unpaid item through order editing is logged as a return in your analytics, and it won't clear any unpaid shipping the item added.
-
Some apps remove the unpaid item automatically after about an hour. Check whether yours does before assigning someone to watch the queue.
![]()
The buyer's side of an unpaid balance. The items sit on the order and Shopify collects the difference through a Pay now link
3. Undercounted conversions
Tools built on Shopify's pixel report the original purchase value. The checkout_completed event fires at authorization, before the upsell exists, and the order edit doesn't fire a second event. Meta and GA4 keep the lower number and bid on it
Some post-purchase apps also reload the confirmation page, which can reset the session and drop the UTM parameters before Shopify writes them to the order.
The upsell line item is on the order. GA4 still holds the authorized total.

Find out how big the gap is before you fix anything. Divide accepted-offer revenue from your app's dashboard by total sales in Analytics > Reports for the same dates and time zone. That percentage is what your ad platforms are missing
A small gap only needs order-level reporting. A gap big enough to change how campaigns rank needs a server-side event that fires after the order edit lands.
What to offer and at what price
The buyer has already decided. Offers that build on that decision get accepted, and offers that reopen it don't.
-
Start from your own data. Analytics > Reports > Products purchased together shows which pairs your buyers already build themselves. Offer the strongest pairing with your best seller first.
-
Complement, not upgrade. A bigger version of what they just bought reads as a hint they chose wrong. Consumables are the exception, where a second unit at a small discount performs well.
-
Cap the price. Keep the add-on at or under roughly a quarter of the original order value, which is a ceiling we use. Above that, buyers stop treating it as an add-on and start evaluating it as a new purchase.
-
Show the real total. Show the real total, including any change to shipping or tax.
-
Set up a downsell. If the buyer declines, a cheaper version or a smaller quantity gives you a second attempt at no extra friction.
-
Stay on one screen. Shopify allows up to three accepted offers per checkout and lets you paginate the single post-purchase page, but every extra screen delays the confirmation they came for.
-
Discount only where the product needs it. The saved-card checkout is doing most of the persuading already.
Measure acceptance against eligible orders, not total orders. A wallet-heavy store that divides accepted offers by every order it took will conclude a good offer is failing, when half its buyers never saw the screen.
Run it for one full purchase cycle before judging it. Then change one variable at a time: the product, the price or the discount.

A single product, the price before and after, and one accept button. The countdown is the app's (Order Editing in this example) default setting, not a requirement.
Disclosure requirements
The buyer is one tap from a charge on a stored card, so the offer screen is the one place they're likely to read the terms.
What to show on the offer screen

Put the full charge amount, the product, any shipping change and the return terms in view, with nothing pre-selected and nothing the buyer has to untick. In Harris v. LoveShackFancy, a federal court in the Southern District of New York let claims proceed on the theory that a one-time shipping protection fee added through a pre-checked box can be a negative option feature under ROSCA.
That was a ruling on a motion to dismiss from one district court, so it isn't settled law, but bundled add-ons in a post-purchase offer carry the same exposure.
Subscription and trial offers
In the FTC's case against Uber, a federal court in the Northern District of California rejected the argument that billing details already on file are enough. Disclosures must come before the payment method is used. That was also a motion to dismiss ruling
ROSCA is the federal law that applies now
The FTC's 2024 click-to-cancel amendments were vacated by the Eighth Circuit in July 2025, and the FTC reopened rulemaking with an advance notice in March 2026, so no federal click-to-cancel rule is currently in force.
State automatic renewal laws still apply, and California tightened its own in July 2025 with new consent, reminder and cancellation requirements.
When to build a custom extension instead
A custom post-purchase extension pays for itself when the offer logic depends on data the app can't reach, when you need a layout the app's editor won't produce, or when the offer has to coordinate with an ERP or subscription platform.
Extensions are written in JavaScript or React and hosted by Shopify. Post-purchase extensions are still a beta surface, so a custom build has to be approved by Shopify before it runs on a live store, while published apps already hold that access. That work belongs alongside the rest of your checkout extensibility roadmap.
What to check first
Three things decide whether to run this at all. Your orders have to qualify, your 3PL has to handle the hold, and your reporting has to count the revenue.
If you want a second look at your checkout and post-purchase flow end to end, our CRO team can walk through it with you.