Promotion is often misread as “higher conversion rate is better.” In real operations, the best promotion is not the one that creates the most orders. It is the one that gets the right buyers to buy the right product at the right margin without damaging inventory, cash flow, support capacity, or future price expectation. Discount codes, automatic discounts, free shipping, buy X get Y, and bundles can all lift conversion, but they buy different behaviors.
Shopify supports discount codes, automatic discounts, sale prices, amount discounts, percentage discounts, free shipping, and buy X get Y. Shopify Bundles lets merchants create fixed bundles and multipacks with a first-party app, and bundle discounts can be allocated across components, but there are also component, variant, inventory, and channel limitations. The real question is not discount versus bundle. The real question is what job the promotion must perform.
What each promotion type is really buying
A discount code buys urgency and trackability. Buyers enter a code, and the team can connect orders to a channel, creator, email, or campaign. It can also train shoppers to search for a bigger code before purchasing. Automatic discounts buy low-friction conversion because the shopper does not need to remember anything, but poor rules can create stacking problems or confusion about why the price changed.
Free shipping buys AOV or checkout completion, but it can directly consume contribution profit when fulfillment cost is high. Buy X get Y buys add-on behavior and inventory movement, but it makes returns and discount allocation more complex. A bundle buys higher AOV, clearer use cases, and inventory pairing, but bad bundle pricing, component stock, or variant rules can create support problems.
How to choose code, automatic discount, free shipping, or bundle
Use a discount code when you need attribution for a channel or creator. Use an automatic discount when the main problem is first-order friction. Use a free-shipping threshold when abandonment spikes after shipping appears. Use a bundle when the goal is AOV lift, complete use-case education, or moving complementary inventory. The decision should come from the promotion job, not from which admin button is easiest.
Small teams should write one promotion job statement before launch: raise AOV, clear inventory, acquire new customers, reactivate existing customers, test price sensitivity, or reduce checkout friction. Then write a stop condition. Promotions without stop conditions slowly become permanent discount habits. Buyers learn to wait, and the team loses confidence in full-price selling.
Margin stress test before launch
Run at least four scenarios before launch: full price, discount price, free-shipping price, and bundle price. For each, review contribution profit, contribution margin, AOV, refund assumption, available CPA, and inventory days. Do not stop at “we still have 40% margin after the discount.” If free shipping adds $8 cost and contribution profit was only $12, conversion rate must improve meaningfully before the offer is healthy.
Bundles need their own stress test. Review component inventory, return rules, discount allocation, tax, weight, and fulfillment cost. Shopify Bundles documentation explains that bundle discounts are calculated on the parent bundle product first, then allocated to individual products by weighted price. SKU handling, inventory tracking, and bundle weight can also behave differently than a normal product. Finance and fulfillment need to understand that before launch.
Inventory and AOV scenarios
When inventory pressure comes from slow-moving SKUs, a bundle can pair the slow item with a stronger product. But be careful not to dilute the main product value. If a $59 hero product and a $19 refill are bundled for $62, AOV rises only slightly while COGS and fulfillment rise meaningfully. Contribution profit may fall. A bundle should explain why the combination is better for the buyer, not simply hide unwanted stock.
When the goal is AOV, compare free-shipping thresholds with bundles. Free shipping works when the buyer can add one lightweight item to cross a threshold. Bundles work when the buyer wants one complete use case solved. Discount codes are useful for short campaigns, not for teaching customers to wait forever. The closer a promotion is to a real usage scenario, the easier it is to preserve price trust later.
Stop/go rules for small stores
A launchable promotion has three traits: clear job, contribution profit above the floor, and a written stop condition. For example: raise AOV from $52 to $68, keep contribution profit above $18, reduce inventory days by 20%, and review after seven days. A risky promotion usually starts with a vague sentence: “conversion is weak, let’s discount.”
After launch, do not watch conversion rate alone. Review promotional AOV, contribution profit, refund rate, support questions, new-customer share, repeat quality, and inventory movement. If the discount creates low-quality orders, higher refunds, or support stress, pause the campaign even if platform ROAS looks acceptable.
Promotion decision table
| Promotion type | Best use | Hidden cost | Stop condition |
|---|---|---|---|
| Discount code | Channel tracking, creators, short campaigns | Code hunting, margin dilution, attribution noise | Code users refund more or profit falls below floor |
| Automatic discount | Low-friction first order | Stacking rules and unclear price changes | Discount stacks or AOV does not improve |
| Free shipping | Checkout completion or cart lift | Shipping subsidy eats margin | New orders lack contribution profit |
| Buy X Get Y | Add-ons, inventory movement, use-case education | Returns and allocation complexity | Gift drives low-quality orders |
| Bundle | AOV lift, complete use case, inventory pairing | Component stock, weight, price updates, return rules | Bundle margin falls or inventory becomes harder to manage |
Turn this into a repeatable operating loop
Do not treat this article as a one-time reading task. Turn the decisions around What each promotion type is really buying / How to choose code, automatic discount, free shipping, or bundle / Margin stress test before launch into a small operating loop that your team can run before a launch, after a platform change, or when performance data starts to look inconsistent. The practical output should be a dated note, a checklist status, and a short owner comment, not a vague memory that someone "looked at it." That habit gives future reviews something concrete to compare against.
The table on Promotion decision table starts with Discount code / Automatic discount / Free shipping. Use those rows as the minimum evidence set. If one row cannot be verified, mark the page, campaign, feed, event, or policy as not ready and write down the exact missing proof. This protects the team from a common ecommerce failure mode: a visible metric moves, everyone reacts, but no one knows whether the store, tracking, content, or offer was actually in a valid state.
After you apply the checklist, connect the result to the linked Ecomwith tool, tutorial, or answer page. The blog should help you make the first decision; the next route should help you calculate, audit, document, or repair the issue. That is also what makes the page useful for search and AI discovery: it states the operating question, shows the evidence, and then points to the next page where the reader can act with more context.