Which offers are earning?
"Bundles made money" is not actionable. "Two offers made all of it and the other nine made nothing" tells you what to do next.
Ask: "Which of my bundle offers earned the most in the last 90 days?"
Step 1 — Get the totals, with a range you chose
Call get_analytics with an explicit start and end. The default is the last 30 days, which is
rarely the window you had in mind.
| Field | Read it as |
|---|---|
additional_revenue | Extra revenue attributed to bundles, in USD |
bundle_orders | Orders that included a bundle |
total_orders | All orders in the range |
attach_rate | The share of orders containing a bundle — 0.0842 is 8.42% |
top_offers | The five highest-earning offers |
These figures are USD, whatever your store sells in. Orders are converted when they are
recorded. Before comparing against your Shopify reports, check the currency field — an assistant
that renders these under your own currency symbol has mislabelled them.
If the answer is "zero revenue", ask whether that was a real zero. When the analytics warehouse
cannot be reached the tool returns analytics_unavailable rather than zeros, precisely so that an
outage is never reported as a bad month.
Step 2 — Read the attach rate before the revenue
attach_rate is the honest health number. Revenue rises with traffic; attach rate does not.
- High revenue, low attach rate — a few large orders carried the month. Fragile.
- Low revenue, healthy attach rate — bundles are working, order values are just small. Raising the discount will not help; the offer composition might.
- Attach rate near zero with active offers — shoppers are not seeing the widget. That is why are my bundles not showing, not an analytics question.
Step 3 — Name the offers behind the numbers
top_offers gives ids and revenue. Turn the ids into something readable with get_offer_details,
and you have a ranked list with names, types and discounts attached.
Worth asking at this point: which type earns. Call get_offers with each type and compare
against the top five. A store where every earning offer is volume-discount and no fbt appears
has a finding — either FBT is misconfigured, or it is not placed where shoppers look.
Step 4 — Look at what is earning nothing
The offers that never appear in top_offers are the point of the exercise.
Call get_offers with status: "active" and a limit above your offer count. Anything active and
absent from the top five for 90 days is either invisible or unattractive — and step 1 of the
not showing recipe tells you which.
Narrowing to one offer
get_analytics takes an offer_id. Passing it scopes the whole result to that offer, which is the
clean way to answer "did the change I made last month help" — same range before and after, one
offer.
What you finish holding
A ranked list of offers by revenue over a range you chose, an attach rate to judge it against, and a list of active offers earning nothing. Two of those three come from one call.