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:
| Status | Means |
|---|---|
active | Live right now |
scheduled | Starts later — a real cause, and the one merchants most often miss |
expired | Ended or paused |
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/1234Read 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.
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 allWhat 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.