Measure AOV and Margin on a Shopify WhatsApp Bundle Campaign
A bundle campaign can lift average order value and still leave you with less money. Measure contribution per recipient against a holdout, not just AOV.
To measure a Shopify WhatsApp bundle campaign, compare contribution per recipient (revenue after discounts, minus product, shipping, payment and Meta message costs) between the people you messaged and an eligible holdout who weren't messaged. AOV alone misleads: a bundle can turn a $40 order into a $55 one and leave you with less money per sale. Record both numbers before deciding to run the offer again.
The extra items cost money. Discounts, packing and shipping can eat the difference, and Meta bills every delivered marketing template. Here's a way to measure that fits on one sheet.
Why AOV isn't enough
Average order value is sales divided by orders. It goes up when people buy bigger baskets, which is the point of a bundle. But it ignores what those baskets cost you, and it ignores how many orders you got.
Three numbers tell you more:
Metric
Formula
What it answers
AOV
Sales Γ· orders
Did baskets get bigger?
Contribution per order
(Revenue after discounts β product cost β shipping and packing β payment fees) Γ· orders
(Total contribution β Meta message cost) Γ· people in the group
Did sending the campaign make money overall?
The last one is the decision number. It works the same way for a send group and a holdout, so you can compare them directly.
Set up the comparison before you send
Pick one bundle, one campaign link and one window. Seven days after the send is a sensible default for a single bundle offer.
Tag the link. Shopify's marketing performance page says traffic with a utm_campaign parameter is attributed to marketing. The default model is last non-direct click, and you can switch to first click, last click, any click or linear. Pick one and write it down.
Use a code unique to this send if the offer allows it. Some buyers come back another way, and codes get shared, but redemptions are a useful second signal.
Hold out a slice. Take your eligible, opted-in audience and keep 15β20% back. Same audience, no message. Without a holdout, call the result an observed difference, not a lift.
Check stock. For Shopify bundles, the lowest-stock component limits how many bundles can sell. Selling out on day two ruins the comparison.
If a bundle app changes line prices, remember that Shopify's automatic discounts page says automatic discounts calculate from those changed prices. Use revenue after discounts from the orders themselves, not list prices.
A worked example with real-looking numbers
Everything below is hypothetical. Prices are in USD to keep it simple, and the Meta rate is the UK marketing rate as of November 2026 ($0.0635 per delivered message).
You have 2,000 opted-in UK customers. You send a three-for-$55 skincare bundle to 1,600 and hold out 400.
Cost per order type:
Bundle order
Ordinary order
Revenue after discounts
$55
$40
Product cost
$29
$16
Shipping and packing
$8
$4
Payment fees
$2
$2
Contribution
$16
$18
Results after seven days:
Send group (1,600)
Holdout (400)
Bundle orders
40
0
Ordinary orders
24
10
AOV
$49.38
$40.00
Contribution
$1,072
$180
Meta message cost
$101.60
$0
Contribution per recipient
$0.61
$0.45
Read it in order. AOV went up 23%. Contribution per order went down, from $18 to $16.75, because the bundle has thinner margin. But the send group placed far more orders per person, so contribution per recipient rose by about $0.16. Across 1,600 people that's roughly $250 the campaign added after message costs.
That's a campaign worth repeating, and worth improving. If the bundle's shipping cost came down to $5, every bundle order would earn $19 and beat an ordinary order outright.
Now run the same maths with a worse result. Say only 15 people bought the bundle, mostly customers who'd have bought anyway, so ordinary orders fell to 25. AOV is still up, at $45.60. But contribution is $690, minus $101.60 for Meta, which is $0.37 per recipient against the holdout's $0.45. A higher AOV with a loss. That's the case this method exists to catch.
Where to find each number
Orders, revenue after discounts, AOV: Shopify orders filtered by your UTM campaign or discount code.
Delivered messages and replies: WhatFlow's broadcast dashboard and message funnel. Meta charges per delivered template, so use delivered, not sent.
Meta cost: delivered count Γ the country rate. Meta bills these directly; WhatFlow passes them through with zero markup, and the pricing page has the country table.
Product, shipping, payment costs: your own cost sheet.
Refunds: add them once the return window has passed, then recalculate.
Use WhatFlow to check delivery and replies. Use Shopify orders and your cost records to calculate order value and margin.
Count the replies, too. A bundle campaign usually generates βdo these count together?β questions, and each one is a chance to close a sale. If the inbox can't keep up, your order numbers understate what the offer could do. The bundles and quantity breaks guide has saved replies for those chats.
Common mistakes
Comparing against βlast weekβ instead of a holdout. Seasonality and paydays swamp the effect.
Using sent count for Meta cost and delivered count for conversion. Pick delivered for both.
Counting the bundle revenue before refunds settle.
Changing the attribution model between campaigns.
Calling a rise in AOV a win without checking contribution.
Holding out a group that isn't comparable, such as last year's lapsed customers against this month's buyers.
Forgetting the WhatFlow plan fee. It's small (the Starter plan is $4.99 a month for 2,000 messages as of November 2026), but if a campaign is marginal, allocate it.
One more: judging a campaign on a single send. Run the same bundle offer two or three times with the same setup before you decide it works or doesn't.
Run WhatsApp for your Shopify store with WhatFlow
Free plan available. Templates, COD confirmation, Shopify Flow automations and a shared team inbox with no seat fees. Every feature is included on every plan, including Free.
Put the contribution-per-recipient row into your weekly review so every campaign gets judged the same way. The 30-minute metrics review shows where it fits, and the cost per order budgeting guide turns message costs into a budget before you send. When you're ready to run the next one, the WhatFlow broadcast guide covers the send and the delivery report. WhatFlow includes broadcasts and reporting on every plan, the Free plan included.
Frequently asked questions
How do I calculate AOV for a WhatsApp campaign on Shopify?
Divide the campaign group's sales by its number of orders over a fixed window, using the same sales definition you use for your comparison group. Decide whether that's gross or net of discounts before you start, and keep it the same next time.
What attribution model does Shopify use by default?
As of November 2026, Shopify's marketing attribution defaults to last non-direct click, with last click, first click, any click and linear also available. Traffic arriving with a utm_campaign parameter is attributed to marketing.
What is a holdout group in a WhatsApp campaign?
A holdout is a slice of eligible, opted-in customers who deliberately don't receive the message. Comparing their orders with the send group's shows what the campaign added beyond sales that would have happened anyway.
Should Meta message costs go into the margin calculation?
Yes. Meta charges per delivered marketing template, and the rate depends on the recipient's country. Subtract it from the send group's contribution so a cheap-looking campaign in an expensive market doesn't fool you.