aov-post-purchase-upsell
🤖 MCP
Recipes
Why is my offer not showing?

Why is my offer not showing?

An offer you believe is live, that shoppers are not seeing. Four causes account for nearly all of them, and they are cheapest to rule out in this order.

My "Spring Sale" post-purchase offer isn't showing. Can you work out why?

1. Is it actually active?

search_offers with the name.

search_offers  query: "Spring Sale"

The row carries a status, and it is one of exactly three:

StatusMeans
activeLive right now
scheduledStarts later — a real cause, and the one merchants most often miss
expiredEnded or paused
There is no "draft" status. An offer that was never finished still reports as one of the three above, so "it's still a draft" is never the answer here.

If the status is scheduled or expired, you are done — the fix is in the app, and Claude will give you the link to that offer rather than changing it.

2. Does anything match its trigger?

get_offer_detail with the id from step 1.

get_offer_detail  id: gid://application/campaign/1234

Read the trigger conditions. Two things decide the answer:

  • Every condition must be met together. They are ANDed, not ORed. Two conditions that each match plenty of orders can still have no overlap between them.
  • A trigger resource deleted from Shopify is marked as deleted. A condition pointing at a collection that no longer exists cannot match anything, and the offer never fires.

This is the step that resolves most "it's active but nobody sees it" cases.

3. Is another offer taking the slot?

list_offers_by_priority for that placement.

list_offers_by_priority  placement: "Post-purchase upsell"

Position 1 is shown first. If a broader offer sits above yours and matches the same orders, yours never gets its turn.

⚠️
Priority restarts at 1 inside each placement, so placement is required — there is no shop-wide display order to ask for. If you have not said which placement, that is a question to answer, not a "no offers found".

4. Is the placement covered at all?

get_offer_coverage — no arguments.

It separates two things that look identical from the outside: a placement with no offers created versus one that has offers but none active. If you were expecting a coupon offer and the Coupon offer placement has never had one created, the search in step 1 was looking in the wrong place.

Putting it together

search_offers            → status
  ↳ get_offer_detail     → trigger conditions, deleted resources
  ↳ list_offers_by_priority (that placement) → is something above it
  ↳ get_offer_coverage   → is the placement live at all

What this cannot tell you

Nothing here proves a shopper reached the placement. An offer that is active, matched and first in line still shows nothing if no order met its conditions in the period. Check that with get_offer_stats for that placement — zero impressions with a healthy setup means the traffic, not the offer.

Product
Install AppWebsiteAvada Apps
Resources
DocumentationFAQPrivacy Policy
Company
Avada GroupContact
© 2026 Avada Group. All rights reserved.