What am I actually upselling?
The setup of one offer, read back to you. This is where two different things get confused most often: the products that trigger an offer, and the products the offer sells.
What does my "Spring Sale" offer actually show, and at what discount?
1. Find it
search_offers with the name, then take the id from the row.
search_offers query: "Spring Sale"2. Who sees it, and when
get_offer_detail with that id. Returns status, schedule, the trigger conditions, and the
offer-level discount if it has one.
Trigger products are not the upsell. The products, collections and tags named in a trigger condition are what a shopper has to be buying for the offer to appear. They are not what the offer puts in front of them. Reading a trigger back as "you're upselling these" is the single most common way this gets answered wrong.
A condition can point at more values than are worth listing; the reply names the first several and counts the rest. A trigger resource that no longer exists in Shopify is marked as deleted.
3. What it sells
get_offer_stages with the same id. This is the tool that answers the question.
get_offer_stages id: gid://application/campaign/1234Per stage, it returns the products, the bundle-deal tiers, and any A/B-test variants.
| What you get | What to watch |
|---|---|
| Products per stage | Each product carries its own discount — a stage does not have one discount covering all of them. Some products have none, and "none" is part of the answer |
| Bundle deal | Tiered — quantity to discount |
| A/B test | A stage's A/B test replaces that stage's products and bundle deal. If a stage is running one, the variants are what shoppers see |
No prices, anywhere. A discount is not a price. Nothing here returns what a product costs or what a shopper pays, so any figure quoted as a price would be invented.
Stages, for post-purchase offers
Post-purchase offers branch. Each stage names the stage it follows and whether it comes after that one was accepted or declined — so the stages form a tree, not a sequence.
An answer that reads them back as "stage 1, then stage 2, then stage 3" has flattened a branch into a chain and is wrong about what a shopper sees. The other three placements have a single stage, and the question does not arise.
Putting it together
search_offers → the id
↳ get_offer_detail → status, schedule, triggers (who sees it)
↳ get_offer_stages → products, discounts, bundles, A/B (what they see)Two tools, deliberately. get_offer_detail returns nothing about what is being sold, and
get_offer_stages returns nothing about who qualifies. A complete answer needs both.
Related
- Tool guide — the four placements, and which tool suits which question
- Tools reference — every field these two tools return