Why a Post-Purchase offer didn't appear
A Post-Purchase-specific checklist for when the after-checkout offer page is skipped, plus accept-time errors and how to test correctly.
Post-Purchase offers behave nothing like storefront widgets, so the usual Campaign not showing checklist does not apply here. The Post-Purchase page lives on Shopify's native post-checkout surface, after payment but before the thank-you page. It needs no app embed and no theme block, and the reasons it gets skipped are entirely its own. Work through the checklist below in order.
Do not start with the storefront checklist. Post-Purchase has its own reasons for not appearing — payment method, a missing matching active campaign, filtered-out offer products, priority, plan limits, and health warnings. The app-embed and theme-block steps from Campaign not showing are irrelevant to Post-Purchase and will send you down the wrong path.
Quick checklist
Each item has its own section below. Run them top to bottom.
- You placed a real, completed order — not a cart, draft, or unpaid order.
- The order used a payment method that supports one-click post-purchase (a real card).
- A matching active Post-Purchase campaign exists and the order satisfies its conditions.
- The offer still has at least one available product after filtering.
- Another campaign didn't win the single slot on priority.
- The campaign isn't sitting inactive because of a plan limit.
- The campaign has no health warnings.
1. The page only shows on a real, completed order
The Post-Purchase page renders after the customer pays but before the thank-you (order confirmation) page loads. It is the one moment Shopify hands the app to present an offer. That means it never appears:
- on the cart page,
- inside checkout,
- on a draft order, or
- on any unpaid order.
There is no way to "preview" the offer from the cart or checkout. To see it, you must place an actual order and complete payment.
You cannot trigger the Post-Purchase page from the cart or the checkout step. If you are watching the cart or checkout waiting for the offer to appear, it never will — the offer is shown by Shopify only once payment is complete. Place a real order to test.
2. The payment method must support one-click post-purchase
The whole point of Post-Purchase is one-click acceptance: the customer adds the offer to the order they just placed without re-entering payment details. Shopify only shows the page for orders paid with a method that supports this. The page is skipped when the order uses:
- Manual or offline payment methods — for example cash on delivery (COD) or bank deposit / bank transfer.
- Gift-card-only payment — an order paid entirely with a gift card.
- Unpaid orders — anything where payment is not actually captured.
If the offer page is skipped for some orders but not others, payment method is the most likely cause. Always test with a real card so the one-click flow is supported. This restriction is enforced by Shopify, not by the app — it is the same reason an accepted offer can later fail with a "payment method is not supported" error (see It showed, but acceptance failed).
3. A matching active Post-Purchase campaign must exist
For the page to render, the app must find a Post-Purchase campaign that is both Active and whose conditions are satisfied by the order that was just placed. If no campaign matches, the page is skipped and the customer goes straight to the thank-you page.
Open the campaign in the app and confirm two things:
Confirm the campaign is Active
Only Active campaigns are evaluated. An Inactive or Draft campaign is never shown. Check the status in the campaign list.
Confirm the order satisfies the conditions
The conditions are evaluated against the order that was just placed, including its line items. Walk through each rule and confirm the test order matches it.
Conditions on a Post-Purchase campaign are evaluated against the order's contents. Common rules and why an order might fail to match:
| Condition | Matches when… | Why it can fail |
|---|---|---|
| Products in the order | A required product, variant, vendor, type, or collection is in the order | The order doesn't contain a matching item |
| Subtotal | The order subtotal reaches the threshold | The order total is below the threshold |
| Customer tags | A logged-in customer has (or lacks) the specified tags | The customer is a guest, or doesn't carry the tag |
| Applied discount codes | A specific discount code was applied at checkout | No code, or a different code, was used |
Customer-tag conditions only apply to logged-in customers. If you test as a guest, any rule that depends on customer tags can't match. Sign in as a customer who carries the right tag before placing the test order.
4. The offer must have available products
A matching campaign isn't enough — the offer it presents must contain at least one product that can actually be sold right now. When the app builds the offer for the page, it filters out variants that are:
- sold out (no available inventory),
- unpublished, or
- otherwise not available for sale.
It also excludes any variant that is already in the order the customer just placed — there's no point re-offering something they just bought.
If every offer variant is filtered out by these rules, the offer ends up with no products, and the page is skipped.
An offer that points at a single product can vanish the moment that product sells out, is unpublished, or is the same item the customer just ordered. Add a few backup products to the offer, or use a collection, so the offer still has something to show after filtering.
5. Priority — another campaign may have won the single slot
The Post-Purchase page has one slot. If several Post-Purchase campaigns could match the same order, the app evaluates them in the priority order you set and shows the first matching campaign only. Every other matching campaign is skipped for that order — they are not queued or shown later.
So a campaign can be perfectly configured, active, and matching, and still never appear because a higher-priority campaign matched first.
To fix this, reorder your campaigns so the one you want takes precedence, or tighten the conditions on the higher-priority campaigns so they don't both match the same orders. See Post-Purchase priority, downsell & timer for how ranking works.
Priority also explains a "wrong offer showed" report. If customers see Campaign B when you expected Campaign A, Campaign B is higher in the priority order and matched first. Move A above B, or make their conditions mutually exclusive.
6. Plan limits
Active campaigns count against your plan's limit. If you try to activate a campaign after you've hit that limit, the app saves it as inactive and shows a notification — and an inactive campaign is never evaluated for the Post-Purchase page (see step 3). Likewise, downgrading your plan automatically deactivates the newest campaigns that exceed the new limit.
If the campaign you expected is sitting inactive, free up a slot by deactivating a campaign you no longer need, or upgrade your plan, then re-activate it.
7. Health warnings
The campaign list shows a warning icon next to any active Post-Purchase campaign that may not run correctly. Open the flagged campaign and resolve the issue. Post-Purchase health warnings appear when:
| Health flag | What it means | Fix |
|---|---|---|
| Offer products unpublished or sold out | The offer's products can't be sold, so they get filtered out | Republish or restock, or swap in available products |
| Referenced collection deleted | The offer draws from a collection that no longer exists | Point the offer at an existing collection |
| Promo-code trigger points to a disabled discount | A condition requires a discount code that is no longer active | Re-enable the discount, or change the condition |
| No markets selected | An empty market list shows the offer to no one | Select the markets you want, or clear the market restriction so it shows everywhere |
| Schedule window not started or already ended | The current date is outside the campaign's date range | Adjust the start/end date and time |
A campaign with no markets configured shows to all markets, but a campaign with an empty market list shows to no one. These look similar in the UI but behave oppositely. If you meant to target everyone, leave markets unconfigured rather than selecting and then clearing them.
8. It showed, but acceptance failed
A different situation: the offer page did appear, but when the customer clicked accept, it failed with an error and the product wasn't added. When the offer is accepted, the app asks Shopify to add the product to the existing order. If Shopify can't apply that change, it returns one of these errors:
| Error shown | Cause |
|---|---|
| Insufficient inventory | The offer variant sold out between rendering the page and the customer accepting it |
| Payment method is not supported | The order's payment method doesn't support one-click post-purchase (see step 2) |
| Payment is not complete | Payment for the original order wasn't captured, so no charge can be added |
| Purchase has already been applied | The offer was already accepted and added to this order |
| Invalid purchase | The request to modify the order was rejected as invalid |
| Something went wrong | An unexpected error; retry or contact support |
"Insufficient inventory" at accept time is a race: the product was available when the page loaded but ran out before the customer accepted. Keeping a small inventory buffer on offer products, or offering products with healthy stock, reduces these failures.
9. How to test properly
Because the page only exists on a real, completed order, casual testing from the cart never works. Test like this:
Open an incognito or private window
This avoids cached pages and signed-in admin state, so you see what a real shopper sees.
Confirm the campaign should match
Build an order that satisfies the campaign's conditions — the right products, subtotal, customer tags (sign in if tags are required), and any required discount code.
Place a real order with a real card
Complete checkout with a card so the one-click post-purchase flow is supported. Don't use COD, bank deposit, or a gift-card-only payment.
Watch for the page after payment
The offer appears after payment completes and before the thank-you page. If it doesn't, return to step 1 of this checklist and work down.
Troubleshooting at a glance
Related guides
Campaign not showing (general)
The storefront-widget checklist — app embed, theme block, conditions. Use this for everything except Post-Purchase.
Post-Purchase priority, downsell & timer
How matching Post-Purchase offers are ranked and how the downsell fallback works.
Post-Purchase campaign
Set up the after-checkout offer, its discount, and its conditions.
Upsells not showing in Shop Pay
A separate issue for in-checkout upsell blocks missing from the Shop Pay flow.
If you've worked through every step above and the offer still doesn't appear, contact support with your store URL, the order number you used to test, the payment method on that order, and a screenshot of the campaign's conditions and status.
