Average order value is the easiest ecommerce metric to move and the easiest one to move in the wrong direction. This is a practical guide to how to increase average order value on Shopify using the three mechanics that genuinely do it: product bundling, upselling and cross selling, and a free-shipping threshold. It’s also a guide to the arithmetic underneath each one, because thresholds and bundles both have a documented path to raising the number on your dashboard while taking cash out of the business, and upsells have their own way of flattering the report.
Vendor numbers are labeled as vendor claims. App pricing and review counts are a snapshot from August 31, 2026, and they move.
Average Order Value Is a Diagnostic, Not a Goal
Start with the definition, because the one in Shopify’s admin is more specific than the one in general circulation. Shopify’s analytics reference defines average order value as the “Average value of orders placed, excluding any post-order adjustments” (Shopify analytics data points reference). AOV, then, is built on order value as Shopify computes it, and that computation leaves out more than most operators assume.
What Shopify Counts in Average Order Value
The Shopify sales reports documentation breaks the components apart: gross sales are “product price x quantity (before taxes, shipping, discounts, and sales reversals),” net sales are “gross sales – discounts – sales reversals,” and total sales are “gross sales – discounts – sales reversals + taxes + duties + shipping charges + fees.” Shipping revenue, taxes and duties live in total sales, not in the AOV numerator.
Three consequences fall straight out of that. AOV is a product-revenue metric rather than a cash metric, so a store that raises AOV by giving away its shipping revenue watches the metric climb while cash per order drops. Discounts sit inside the numerator, so a bundle discount mechanically pushes AOV down for any customer who’d have bought the components anyway. And sales reversals are excluded from AOV while they hit net sales, so an upsell that raises AOV and raises the return rate reads as a clean win in one chart and a loss in another.
Three Ways the Number Rises While the Business Gets Worse
The first is arithmetic rather than merchandising: removing the bottom decile of orders raises the mean of what remains. A minimum order value, a punitive small-order shipping fee, or dropping a cheap entry SKU all raise AOV without raising a dollar of profit. The randomized experiment in the next section shows the related, less comfortable result: the mechanic most stores reach for cuts order count without lifting order value at all.
The second is mix. A paid campaign that skews toward a higher-priced collection raises AOV with zero on-site change, which is why you segment AOV by acquisition channel and by new-versus-returning before you credit a bundle for anything. The third is the failure signature that matters most: rising AOV alongside falling total revenue, which is what a threshold set too high or an upsell that adds friction looks like on a dashboard.
Revenue Per Session Settles What AOV Only Suggests
AOV multiplied by conversion rate approximates revenue per session, so a change that lifts AOV by suppressing conversion can leave revenue per session flat or negative. Shopify defines conversion rate as the “Percentage of online store visits (sessions) that resulted in a sale” in the same analytics reference, and that definition says nothing at all about value. The two aren’t interchangeable and shouldn’t be discussed as though they were.
Shopify’s analytics fields reference doesn’t expose a native revenue-per-session field by name, so build it yourself as sales divided by sessions in a custom report or in GA4. The best illustration of what happens when you trust the wrong proxy comes from a KDD 2014 paper by Kohavi, Deng, Longbotham and Xu, drawing on experimentation practice at Microsoft, LinkedIn, Amazon and Booking.com. The case below is one they report rather than one they ran.
The team tested a redesign of a page with a strong call-to-action button. The key metric the team wanted to test is the actual purchases, or purchases-per-user. However, tracking the actual purchases required hooking to the billing system, which was hard at the time. So the team decided to use "clicks on revenue generating links" assuming clicks * conversion-rate = revenue, where the conversion-rate is from click to purchase. To their surprise, there was a 64% reduction in clicks per user. This shocking result made people look deeper into the data. It turns out that the assumption of a stable conversion rate from click to purchase was flawed. The Treatment page, which showed the price of the product, attracted fewer clicks, but those users were better qualified and had a much higher conversion-rate.
The full paper is available as a PDF from Kohavi’s Stanford directory, and its sample-size rule returns in the measurement section below.
Free Shipping Thresholds Raise Average Order Value and Can Still Lose Money
The free-shipping threshold is native on every Shopify plan, with no app required for the rate itself. Shopify’s shipping documentation calls them order amount-based rates: “Order amount-based shipping rates, also known as price-based rates, let you charge different shipping prices based on the total value of the order” (setting up shipping rates). You add them under Add conditions, then Based on order price, then a minimum price. No app is required for the rate itself, only for the progress bar in the theme.
Two configuration details from that same doc bite people. “Free shipping applies only when an order falls within a tier that covers its total or weight,” and for an order above your highest tier when that tier has a maximum value set, “no rate applies and the customer receives a shipping error at checkout.” And “When an order contains products from multiple shipping profiles, Shopify combines the applicable price-based rates.”
What the Research Says About Thresholds and Average Order Value
Two peer-reviewed studies with stated methods anchor this section, and both point away from the standard advice. Lewis, Singh and Fay analyzed transaction data from an online retailer that had experimented with a wide variety of shipping-fee schedules, using an ordered probability model that accounted for consumer heterogeneity, and published the result in Marketing Science in 2006. They found that “promotions such as free shipping and free shipping for orders that exceed some size threshold are found to be very effective in generating additional sales,” and then this: “the lost revenues from shipping and the lack of response by several segments are substantial enough to render such promotions unprofitable to the retailer.”
That data is from 2006, before Prime normalized free shipping across the category, so treat the mechanism as sound and don’t transplant the magnitude to 2026. The stronger design is more recent. Lepthien and Clement ran a randomized field experiment, assigning online-shop visitors across seven different shipping fee structures that varied minimum order sizes, shipping fees and threshold-based free shipping levels, published in Marketing Letters in 2019.
Their findings run directly against the category consensus. Threshold-based free shipping “decreases purchase incidence (but not purchase value),” while the authors “do not find negative effects of minimum order value on purchase incidence or purchase value.” Threshold-based free shipping also “leads across all customers to a higher number of strategic returns because they tend to return more items,” meaning customers add items to clear the bar and send them back. If you’ve built a returns policy around exchanges rather than refunds, that interaction is worth modeling against how your Shopify returns process actually handles exchanges.
The advice to set your threshold 30% above your AOV has no primary or methodologically-stated source behind it. The instances I could trace lead back to marketing blogs restating each other, and the rule never mentions the variable that decides the outcome. Do the arithmetic instead.
Worked Example: Average Order Value Up 3.85%, Contribution Margin Down 8.64%
This is a BLKDG model, not a benchmark. Every input is an assumption and is labeled as one, with the single exception of the payment rate, which comes from Shopify’s published pricing for the Grow plan’s US online card rate of 2.7% plus $0.30 per transaction.
| Input | Value | Basis |
|---|---|---|
| Unit price | $30.00 | Assumption |
| Product gross margin | 60% (COGS = 40% of price) | Assumption |
| Outbound parcel cost to merchant | $9.00 flat | Assumption, set above the USPS Ground Advantage retail floor to reflect real 2-3 lb DTC parcels |
| Customer-paid shipping, pre-threshold | $8.00 flat | Assumption |
| Payment processing | 2.7% + $0.30 per transaction | Sourced: Shopify Grow plan, US online card rate |
| Fee base | Percentage applies to the full amount charged including shipping; the $0.30 applies once per order | Assumption, stated explicitly |
| Sales tax | Excluded | Collected and remitted, not revenue |
| Proposed threshold | Free shipping over $75 | The thing being tested |
For reference on that parcel assumption, USPS publishes Ground Advantage as starting “From $7.90 at the Post Office” and “From $6.93 for Commercial Pricing” on its business prices page. Shopify says only that “discounts for shipping labels vary based on your Shopify plan” on the Shopify Shipping help page and publishes no schedule of those percentages, so model your own negotiated or platform rate rather than a number you read somewhere.
Three per-order cases fall out of those assumptions. A two-unit order paying $8.00 shipping charges $68.00 and contributes $32.864 after $24.00 COGS, $9.00 parcel and a $2.136 payment fee. A three-unit order taking free shipping charges $90.00 and contributes $42.27 after $36.00 COGS, $9.00 parcel and a $2.73 fee. A three-unit order that paid $8.00 shipping, which is what a $90 buyer looked like before the threshold existed, charges $98.00 and contributes $50.054 after $36.00 COGS, $9.00 parcel and a $2.946 fee.
| Case | Customer pays | COGS | Parcel | Payment fee | Contribution |
|---|---|---|---|---|---|
| 1. Two units, pays $8.00 shipping | $68.00 | $24.00 | $9.00 | $2.136 | $32.864 |
| 2. Three units, free shipping (a mover) | $90.00 | $36.00 | $9.00 | $2.73 | $42.27 |
| 3. Three units, pays $8.00 shipping (pre-threshold) | $98.00 | $36.00 | $9.00 | $2.946 | $50.054 |
Two numbers drive everything from here. A customer who steps up from case one to case two gains you +$9.406, because the extra $30.00 unit adds $18.00 of gross profit, you forgo $8.00 of shipping revenue, and the percentage fee rises by $0.594. A customer who was already buying three units, case three moving to case two, costs you -$7.784, which is the $8.00 of shipping revenue you gave away less the $0.216 of fee you no longer pay on it.
Now the mix, per 1,000 orders. Before the threshold: 600 orders at $90.00 plus $8.00 shipping, and 400 orders at $60.00 plus $8.00 shipping. After it, assuming a strong 25% step-up rate among sub-threshold orders, 100 of those 400 move: 700 orders at $90.00 with free shipping and 300 orders at $60.00 still paying $8.00.
AOV before is $78.00 and AOV after is $81.00, a change of +3.85%. Contribution margin dollars before are $43,178.00 and after are $39,448.20, a change of -$3,729.80, or -8.64%. Same change, same week, same dashboard, opposite directions.
The Rule That Replaces "Set It 30% Above Your Average Order Value"
Ask how many movers it would take for that threshold to break even. Total subsidy cost is 600 already-qualifying orders times $7.784, which is $4,670.40. Gain per mover is $9.406. Dividing gives 497 movers required, and there are only 400 sub-threshold orders in the entire population. Even at a fictional 100% step-up rate, 400 movers produce $3,762.40 of gain against $4,670.40 of cost, so the threshold still loses $908.00 per 1,000 orders.
No amount of progress-bar copy fixes that, because it isn’t a psychology problem. A free-shipping threshold is a subsidy question, and it pays for itself only when the orders it subsidizes are few relative to the orders it moves. State it as an inequality and you can test any threshold against your own order distribution in a spreadsheet this afternoon:
- Share of orders already above the threshold, multiplied by shipping revenue forgone net of the payment fee on it
- Must be less than or equal to the share of orders that step up, multiplied by the incremental contribution of that step-up
When the left side wins, raise the threshold until the already-qualifying share is small, or abandon the threshold and price shipping into the product. The threshold in the worked example fails because 60% of orders already cleared it, and no step-up rate recovers a subsidy that large.
A $75 Threshold Is a $93.75 Threshold During a 20% Promo
Shopify’s shipping rate troubleshooting doc states the evaluation order plainly: “The checkout determines shipping rates based on the total value of the cart after applying discounts, but before applying taxes.” Run a 20% site-wide code against a $75 free-shipping threshold and a customer now needs $93.75 of list-price value to clear it, because 0.80 times $93.75 equals exactly $75.00. That’s 25% more list-price spend than the threshold normally asks for, applied silently, to the exact customers you were promoting to.
The same fixed-amount logic drifts across borders. Under Shopify Markets, “fixed-amount values are converted between currencies at checkout,” and on the Markets pricing page, “By default, prices are converted automatically using the current market exchange rate, but you can set exchange rates manually”, and then rounding rules applied to keep price endings consistent. Your threshold therefore floats with FX while your cost to ship into that market is fixed by the destination carrier’s terms, which makes one global threshold a single margin bet with a moving strike price. Shipping options by market are supported, so set per-market thresholds from per-market landed cost if you’re selling internationally through Shopify Markets.
Product Bundling Moves Average Order Value in Both Directions
Shopify Bundles is “a free first-party bundles app that allows you to create and edit fixed product bundles and multipacks right from your Shopify admin, and is available on all Shopify plans” (Shopify Bundles help documentation). For fixed bundles and multipacks, that’s the whole tool, and it costs nothing. Customized mix-and-match bundling is a different build entirely, covered below.
Bundle Limits That Change the Average Order Value Math
The documented limits are specific. Fixed bundles take up to 30 components, dynamic bundles up to 150, with up to 2,000 units per component and a “maximum of 3 options and 100 variants total per bundle.” “Bundles must use the Online Store or Headless storefronts. Other sales channels are unsupported,” so the free first-party app doesn’t reach POS. Bundles “don’t track inventory by location, but by overall stock,” and when a component’s price changes, “the bundle price doesn’t update. You need to manually update the bundle price.”
Inventory is gated by the scarcest component, and Shopify’s own example makes the mechanic clear: a bundle needing two chairs, with 15 in stock, and one desk, with 8 in stock, yields 7 sellable bundles rather than 8. That store-wide number also isn’t location-aware, so for a multi-warehouse brand the sellable figure may not be true at any single fulfillment location.
Then the compatibility wall. Per the bundle eligibility documentation, “bundles aren’t compatible with purchase options,” and the developer documentation says the same thing from the other side: “Bundles can’t be sold with selling plans, such as subscriptions, pre-orders, and try-before-you-buy” (shopify.dev bundles overview). The Shopify Subscriptions considerations page confirms it a third time: “Bundles aren’t compatible with the Shopify Subscriptions app.” A native subscription bundle isn’t a thing you can build, which is a real constraint on any Shopify subscription program that wants a starter kit as its entry offer.
One more limit connects the bundling section back to the threshold section: “Bundles don’t have their own shipping profiles. Instead, shipping rates are calculated based on the shipping profiles of the individual products within the bundle.” You can’t give a bundle its own free-shipping treatment.
What about mix-and-match bundles, where the customer picks the components? That path runs through a Cart Transform Function, and it’s effectively gated to Plus. The Cart Transform Function API reference states that “only development stores or stores on a Shopify Plus plan can use apps with lineUpdate operations” and repeats the same restriction for update operations. It also caps you at one cart transform function per app per store, rejects lineExpand, linesMerge and lineUpdate when a selling plan is present, and lists Order Edit as unsupported. That last exclusion matters, because a post-purchase upsell is an order edit.
Worked Example: Why 65% of Bundle Buyers Have to Be Incremental
BLKDG model again, all inputs assumptions. Product A sells for $40.00 with $16.00 COGS. Product B sells for $25.00 with $10.00 COGS. Both run 60% gross margin. Bundle them together at 15% off.
Undiscounted bundle value is $65.00 against $26.00 of combined COGS. The 15% discount is $9.75, so the bundle price is $55.25 and bundle gross profit is $29.25. Gross margin falls from 60.00% to 52.94%, a drop of 7.06 points, and margin dollars per bundle fall by exactly 25%, because COGS doesn’t move when you discount and the entire discount comes out of margin.
Whether that trade made money depends entirely on who’s buying. A customer who’d otherwise have bought only Product A brings incremental gross profit of +$5.25, since A alone yields $24.00 and the bundle yields $29.25. A customer who’d have bought both at full price brings -$9.75, which is the discount, exactly. Setting those against each other, the break-even share of “A only” buyers is 65%.
At least 65% of your bundle buyers must be people who’d otherwise have bought only Product A, or the bundle destroys margin dollars. And the reported metric lies in both directions here. The A-only buyer’s order goes from $40.00 to $55.25, raising AOV by $15.25. The both-anyway buyer’s order goes from $65.00 to $55.25, lowering AOV by $9.75. A bundle’s effect on your AOV chart depends on a mix that the AOV chart can’t show you, which is why the attach-rate and items-per-order measures in the last section beat the mean.
Bundles Can't Be Used in Exchanges
Shopify’s bundle eligibility and considerations page puts it without qualification: “Bundles can’t be used in exchanges even when exchanging for an identical bundle.” That’s the operational break most bundle programs discover after launch. The same page states that “the return eligibility of a bundle is based on whether the individual products within the bundle are set as final sale items,” and individual products can be returned separately when eligible.
So a customer buys a three-item bundle at 15% off and wants to swap one item. The components come back individually, but the exchange path, the one that retains the revenue, is closed. The refund arithmetic is also genuinely ambiguous: does that returned item refund at list price or at its discounted share of the bundle? Shopify’s docs don’t resolve it, so write the policy down before you launch bundles rather than discovering it in a support queue. If your returns strategy leans on exchange-first returns management, bundles are a direct exception to it.
Tiered Discounts and Volume Pricing After the Shopify Scripts Deprecation
If you’re on Plus, check this before you plan anything else, because a live piece of your discount stack may already be dead. Shopify Scripts “were available only on the Shopify Plus plan,” so this section is scoped to Plus merchants and to anyone who inherited a Plus store. Shopify’s Scripts deprecation changelog post, dated March 12, 2026, states that “Shopify Scripts will be deprecated on June 30, 2026. As of April 15, you can no longer edit or publish Scripts.” Both dates are behind us. Any tiered discount, spend-X-get-Y rule or custom shipping-discount logic you built in a Ruby Script is past its deprecation date, and the migration path Shopify names is to Shopify Functions or a public app.
A Shopify help page on B2B quantity pricing gives a different Scripts end date of August 28, 2025. Reading the two together, that date looks like a different deprecation: the checkout.liquid and Thank you plus Order status deadline for Plus merchants, confirmed on Shopify’s checkout upgrade page, which lists “August 28, 2025 … Additional scripts and checkout.liquid aren’t editable.” For the Scripts engine itself, the changelog is the document to trust.
Native volume pricing does exist, with “up to 10 price breaks per product,” but it lives inside B2B catalogs rather than your DTC storefront. For DTC quantity breaks the path is a Discount Function, and the Discount Function API supports exactly this use case: “tiered discounts on products, orders, and shipping when orders include qualifying item, subtotal, and delivery requirements.” Functions run on all plans except Shopify Starter per Shopify’s checkout technologies reference, with a caveat that merchants carrying checkout.liquid customizations “need to upgrade to Shopify Extensions in Checkout to use Function APIs.”
Shopify Stacks Percentage Discounts Additively, Not Sequentially
Shopify’s combining discounts documentation states that when multiple order discounts using percentages apply, “both percentages are calculated on the original subtotal,” and gives the worked case: 10% and 20% on a $100 order results in $70. Most merchants model that sequentially, at $100 times 0.90 times 0.80, and get $72. Shopify’s rule gives away $2.00 more per $100 of subtotal than the multiplicative assumption predicts.
That gap compounds against Shopify’s stacking ceilings. “Customers can use a maximum of 5 product or order discount codes and 1 shipping discount code on the same order,” a store can hold “a maximum of 25 active automatic discounts,” and you can activate at most 25 discount functions, which “all run concurrently, and have no knowledge of each other.” Product discounts apply first to individual items, order discounts apply to the revised subtotal after them, and shipping discounts apply last. Combining multiple product discounts on the same line item is Shopify Plus only. If you’re running tiered rewards, model the interaction between a bundle discount, a welcome code and a loyalty program’s tier discounts on the same order, because Shopify will happily let all three land.
Is gift with purchase native? Yes. A Buy X Get Y automatic discount with the “get” value set to Free is the native GWP, per Shopify’s Buy X Get Y documentation, with caps for max uses per order, total uses and one per customer. One behavior explains why GWP attach rates disappoint: “customers must add all items to their cart manually,” so the free item isn’t auto-added to the cart. The same page limits it: “Buy X get Y discounts created in the Shopify admin don’t apply to the post-purchase page at checkout,” so a native GWP can’t be attached to a post-purchase upsell. The offer has to carry its own pricing.
Cross Selling That Raises Average Order Value Instead of Suspicion
Cross selling is the cheapest of these mechanics to deploy and the easiest to deploy badly. Shopify’s Online Store 2.0 and Horizon themes ship related-products sections, but there’s no native rules engine behind them, so relevance is either a merchandising job you do by hand or an app you buy.
Relevance is the whole game, and the benchmark evidence is unflattering. Baymard found that “52% of desktop sites we benchmarked present cross-sells in the cart, or in the ‘Added to Cart’ confirmation, that are either completely irrelevant or based only on what other customers bought,” in research published January 2021. Their usability testing found the cost of getting it wrong is not proportional: “even 1 questionable recommendation was observed to cause users to lose faith in all of the product suggestions and subsequently ignore them all.” One test participant put it directly: “I think this site is super annoying; there’s way too much info. Because I buy a speaker, I might also be interested in buying a USB stick?”
That’s the argument for fewer, better cross-sells rather than more of them, and it’s an argument to place them where the shopper is still choosing rather than where they’re trying to leave. The PDP and the cart drawer behave differently under that pressure, and the placement decisions are the same ones you’d already be testing in a structured PDP test program.
The cost side is worth carrying into that decision. Baymard’s cart abandonment benchmark, an average across 50 studies from 2006 to 2025 with the most recent data from August 2025, puts the documented average abandonment rate at 70.22%. Setting aside the 42% who were just browsing, the top reason is 40% citing extra costs being too high, covering shipping, taxes and fees, with 13% abandoning over an unsatisfactory returns policy. Baymard’s own honest caveat sits alongside those numbers: “a large portion of cart abandonments are simply a natural consequence of how users browse ecommerce sites.” A cross-sell that adds perceived cost at the cart is fighting the single largest documented abandonment driver.
Upselling Before and After Payment: Two Different Average Order Value Bets
Upselling inside checkout and upselling after checkout are separate products with separate plan requirements, and collapsing them into “install an upsell app” is how brands buy a tool they can’t legally run. Shopify’s checkout technologies reference publishes the gating verbatim.
| Technology | Availability, verbatim from Shopify |
|---|---|
| Checkout UI extensions | “Shopify Plus. Thank you and Order status extensions are available to all plans except Shopify Starter. Market overrides are available to Advanced.” |
| Checkout UI extensions: post-purchase | “All plans except Shopify Starter. Currently in beta. Can be used without restrictions in a dev store. To use post-purchase extensions on a live store, you need to request access.” |
| GraphQL Admin API (checkout look and feel) | “Shopify Plus” |
| Shopify Functions | “All plans except Shopify Starter. Some Function APIs are only available in feature preview. Merchants that have checkout.liquid customizations need to upgrade to Shopify Extensions in Checkout to use Function APIs.” |
| Web pixel extensions | “All plans except Shopify Starter.” |
An upsell inside checkout is a Plus feature. An upsell after checkout is open to every plan except Starter, still in beta, and requires an access request before it runs on a live store. An upsell in the cart drawer or on the PDP is a theme-and-app job on any plan. Those are three different budgets.
The post-purchase mechanic is worth understanding at the technical level, because it explains why it converts. Shopify’s product offers documentation describes post-purchase offers as ones that “prompt a customer to add more products to their initial order after they’ve completed payment” and calls them “order-modifying offers.” Rendering the offer has a precondition: “for render to be true, all the required conditions must be met. For example, the customer’s credit card must be vaulted before the post-purchase offer is displayed.” The card is already on file, there’s no second payment form, and accepting edits the existing order. That’s why a post-purchase upsell doesn’t cost you conversion on the primary order.
What a Post-Purchase Upsell Costs You
It costs you fulfillment time, and Shopify documents the mechanism: “Shopify places a hold on fulfillment for all orders undergoing a post purchase cross-sell flow. Holds are released either when the customer visits the Order status page, or after a set amount of time, if the customer doesn’t complete the post-purchase flow.” When a customer abandons the flow by closing the browser, “the fulfillment hold is lifted one hour after submission of the initial checkout.” Running post-purchase offers means any order can sit up to an hour before it’s releasable to your WMS, which is a live constraint against a same-day shipping cutoff.
It also costs you a slot. Only one post-purchase app can be selected on a store, so this is a single-vendor decision rather than a stack. And it’s incompatible with two things you may already run: Shopify’s subscriptions documentation states that “the order edits API doesn’t support subscriptions,” and the Cart Transform Function reference lists Order Edit as unsupported, so mix-and-match bundling and post-purchase upselling don’t coexist.
Does Shopify charge the fixed payment fee again on a post-purchase upsell? Shopify doesn’t document it, and the ambiguity is expensive enough to matter. On a $15.00 post-purchase add-on at the Grow rate of 2.7% plus $0.30, a percentage-only fee is $0.405, or 2.70% of the add-on. A second full transaction fee is $0.705, or 4.70%. That’s a 2.00-point swing in the effective take rate on every post-purchase order. There’s no Shopify document stating which applies to charges arising from order edits, and third-party summaries repeat the plan rates while staying silent on this exact question. Run a small post-purchase upsell, pull the payout detail for that order, and read the fee off your own account rather than modeling a guess.
The Measurement Gap in Post-Purchase Reporting
Two reporting problems attach to the post-purchase surface. The first is on your own dashboard. Shopify’s analytics field defines AOV as “excluding any post-order adjustments,” while the order reports documentation defines AOV more loosely as “the average dollar amount per order during the selected time period” and notes that an order edited after the day it was placed “displays as a separate order” in Orders over time, treated “as though it’s a new order, even though a new order hasn’t been created.” A post-purchase upsell lands seconds after checkout, so that rule most likely doesn’t catch it, which is itself worth confirming on your own reports. Two Shopify docs, two definitions, and a post-purchase upsell is implemented as an order edit. Confirm in your own reports where that revenue lands before you credit the app for an AOV lift.
The second problem costs money outside Shopify. From the same product offers documentation: “third-party analytic services that use the Shopify Pixel API (such as Google Analytics, Facebook, Pinterest and Snap) report only the purchase event and value for the initial purchase.” Post-purchase upsell revenue doesn’t reach the ad platforms’ purchase events, so ROAS is understated on every order that took an upsell. That bias runs against exactly the campaigns bringing in upsell-receptive traffic, and the bidding algorithms act on it. Post-purchase upsells are the hardest AOV mechanic to measure and the easiest to over-credit.
How to Increase Average Order Value on Shopify Without Stacking Four Apps
An order bump is a checkbox add-on placed next to the buy or checkout action, on the PDP, in the cart, in the cart drawer, or inside checkout on Plus. Shopify has no native order bump object, so every one of these is an app decision. Pricing, ratings and review counts below are a snapshot from August 31, 2026 and change constantly.
| App | What it does | Pricing, 2026-08-31 | Rating / reviews |
|---|---|---|---|
| Shopify Bundles (first-party) | Fixed bundles and multipacks from the admin | Free, all Shopify plans | n/a |
| Selleasy by Logbase | Frequently-bought-together bundles, add-ons, in-cart upsell, cart drawer, post-purchase | Free to 50 orders/mo; $9/mo to 500; $19/mo to 1,000; $29/mo above | 4.9 / 2,537 reviews |
| AfterSell | One-click post-purchase upsells, thank-you page customization, checkout widgets | $34.99/mo (0-500 orders), $54.99/mo (501-1,000), $99.99/mo (1,001-2,000) | 4.8 / 912 reviews |
| Zipify OCU | Post-purchase, product page, pre-purchase, slide cart, checkout (Plus) and thank-you page offers | Unlimited from $8/mo, scaling with generated upsell revenue | 4.5 / 503 reviews |
| Rebuy | Upsells, cross-sells and product discovery across cart, PDP, search and checkout | From $25/mo for one package; Platform One $534/mo, order-volume dependent; Premium Support $499/mo | 4.7 / 748 reviews |
Start at the cheap end. Selleasy covers frequently-bought-together bundles, add-ons, in-cart upsells and post-purchase offers, is free to 50 orders a month and $29 a month above 1,000 orders, and carries 4.9 stars across 2,537 reviews with 98% of them at five stars. That’s an order of magnitude cheaper than the heavy end of this category, and it answers the question for most stores before anyone signs a platform contract.
AfterSell at $34.99 a month up to 500 orders, rising to $99.99 at 1,001 to 2,000 orders, holds 4.8 stars across 912 reviews, with checkout widgets requiring Shopify Plus. Zipify OCU starts at $8 a month with usage-based scaling tied to generated upsell revenue and sits at 4.5 stars across 503 reviews, where 86% are five-star and 6% are one-star, which is a wider tail than the others in this set. Rebuy is the heaviest of the group, spanning cart, PDP, search and checkout, and its build-your-own pricing starts at $25 a month for a single package while Platform One runs $534 a month depending on order volume, with Premium Support a further $499 a month.
Two vendor claims deserve labels rather than repetition. Rebuy’s pricing page markets that “Rebuy guarantees a positive ROI for all customers using our products,” with no definition of ROI, no measurement window and no method attached, so treat it as a marketing claim. Separately, Rebuy Monetize advertises earnings of “$0.20-0.35+ per order” and an “estimated $175 monthly earnings,” and AfterSell markets that you can “earn up to $0.80 per order by displaying premium offers on your confirmation page.” Those are third-party ad revenue from offers shown on your confirmation page, which is a different line on your P&L than average order value and shouldn’t be counted as an AOV improvement.
What does the app layer cost your storefront? Shopify’s app performance documentation sets the bar: “to be published in the Shopify App Store, your app must not reduce storefront Lighthouse performance scores by more than 10 points.” That rule is per-app, not per-stack. Three AOV apps that each sit inside the allowance could, at the documented worst case, put you 30 Lighthouse points down with all three still qualifying for the App Store. Treat 30 as a ceiling on permitted degradation rather than a prediction, since real-world stacking isn’t necessarily additive.
There’s a second gap in how that ceiling is enforced. Shopify measures app impact as “a weighted average of score from the following pages: Home 17%, Product details 40%, Collection 43%” (storefront performance documentation). The cart isn’t weighted at all, so an app whose script cost lands in the cart drawer is largely invisible to the metric gating the App Store. Shopify’s theme performance best practices are blunt about the mechanism: “JavaScript, whether your own theme code or scripts from installed apps, runs on the main thread and directly competes with the browser’s ability to render content and respond to user input.” Shopify also publishes a page on identifying and removing fake performance apps, which is the right answer to the obvious temptation: the fix for an app-induced Lighthouse drop isn’t another app. If your cart and checkout are already slow, fixing checkout speed beats adding an offer to it.
One more architectural note on thresholds. Shopify’s checkout performance guidance warns that “the response time of your shipping app impacts a customer’s experience at checkout” and recommends “storing backup carrier rates to avoid blocking the checkout.” A free-shipping threshold implemented as a native price-based rate can’t block checkout. One delivered through a carrier-service app can.
How to Measure an Average Order Value Change You Can't A/B Test
Most DTC brands cannot run a valid A/B test on order value, and the reason is statistical rather than organizational. Kohavi, Deng, Longbotham and Xu give the rule in Seven Rules of Thumb for Web Site Experimenters: “our rule of thumb for the minimum number of independent and identically distributed observations needed for the mean to have a normal distribution is 355 x s² for each variant, where s is the skewness coefficient of the distribution of the variable X,” recommended “when the |skewness| > 1.”
| Metric | |Skewness| | Sample size | Sensitivity (% change detectable at 80% power) |
|---|---|---|---|
| Revenue/User | 18.2 | 114k | 4.4% |
| Revenue/User (Capped) | 5.3 | 9.7k | 10.5% |
| Sessions/User | 3.6 | 4.70k | 5.4% |
| Time To Success | 2.1 | 1.55k | 12.3% |
Now apply their rule to their own commerce figure. The paper reports that “at a commerce site, the skewness for purchases/customer was >10 and for revenue/customer >30.” Running 355 times 30 squared gives 319,500 users per variant, which is 639,000 users across a two-armed test, and users are not sessions: at more than one session each, the session count is higher still. That’s the requirement for the sample mean to be normal enough for the test to be valid, not the sample size needed to detect a 3% lift, and those are different questions that both have to be satisfied. Either way, a store doing 40,000 sessions a month isn’t running this test.
Calibrate your expectations for what a win looks like too. In the same paper, describing thousands of experiments run annually, the authors report that “most fail, and those that succeed improve key metrics by 0.1% to 1.0%, once diluted to overall impact.” A vendor case study claiming a 30% AOV lift is claiming something 30 to 300 times larger than a typical successful experiment at an organization with a mature testing program. The authors also title their third rule “Your Mileage WILL Vary” and write: “we are skeptical of many amazing results of A/B tests reported in the literature. When reviewing results of experiments, ask yourself what trust level to apply, and remember that even if the idea worked for the specific site, it may not work as well for another.”
What to Measure Instead of Average Order Value
Five moves, in the order we’d run them.
- Measure the attach rate of the mechanic, meaning the share of orders containing the bundled or upsold item. It's a proportion rather than a revenue metric, so it's far less skewed and far cheaper to read.
- Look at the distribution rather than the mean: median order value, the share of orders above your threshold, and the histogram of items per order. A bundle that's working shows up as a bump in the two-item and three-item bars before it shows up in AOV.
- Cap or trim the revenue metric, and pre-register the cap before you look at the data. Kohavi's capped revenue metric detected a change 30% smaller at the same sample size, and capping changes what you're measuring, so decide it in advance.
- Split 50/50 when you do split. The paper notes that with an equally sized split, "the distribution of the delta will be approximately symmetric," which is what makes the rule of thumb stop binding.
- Judge on revenue per session and decide on contribution per session. When a true split isn't possible, run before-and-after against a control metric such as a channel or segment the change didn't touch, and state that weakness out loud rather than hiding it.
One measurement that takes ten minutes and beats any benchmark you’ll find: tag your upsold and bundled line items, then pull the return rate on those tags against everything else. No vendor publishes a credible return-rate figure for upsold items, and your own data answers the question exactly for your catalog. Given that Lepthien and Clement found threshold-based free shipping drives more strategic returns, the same tagging exercise applied to threshold-clearing orders is where you’ll find out whether your progress bar is buying you revenue or round-trip freight.
The Average Order Value Work Worth Doing First
Knowing how to increase average order value on Shopify starts with refusing to treat it as the goal. AOV rises when you kill small orders, moves with channel mix, and falls when a bundle discount lands on a customer who was buying both items anyway. Revenue per session tells you whether a change worked. Contribution per session tells you whether to keep it.
In order: check whether any tiered discount logic on your store still runs on Shopify Scripts, because the deprecation date has passed. Run your own order distribution through the subsidy inequality before you launch or keep a free-shipping threshold. Model your bundle against the incremental-buyer share it needs and write your bundle returns policy before launch, since bundles can’t be used in exchanges. Confirm on your own account where post-purchase revenue lands in Shopify’s reports and whether the fixed payment fee applies twice. Then measure attach rate and distribution, not the mean.
That’s a week of arithmetic that will save you a quarter of chasing a number in the wrong direction. If you want a second set of eyes on the math before you commit budget to it, schedule a free Growth Audit. No assumptions. No selling you on work you don’t need. If the bottleneck turns out to sit further down the funnel, our ecommerce checkout optimization and conversion funnel analysis work picks it up from there.
You built something worth finding. Make sure the numbers you’re steering by are worth trusting.
Not sure where the gap is? That's exactly what the Digital Marketing Growth Audit is for.
A free, no-obligation look at where your site can win more traffic and conversions, with a clear digital marketing roadmap to get there. Just a straight read on where your digital presence stands and where it's headed.



