Buy X Get Y is one of the better promotion types available on Shopify. It lifts average order value, it's a clean way to move slower-selling inventory alongside a bestseller, and shoppers generally like it more than a flat percentage off, getting something feels different from paying less for the same thing. It's also one of the easiest promotions to set up and have quietly do nothing at all, because of a native behavior most merchants don't find out about until they're wondering why a "successful" promotion produced zero extra orders.
Imagine running "Buy 2 candles, get 1 free" for a full month. You check the discount's usage report and the number sits at zero, despite plenty of orders containing two or more candles during that window. The promotion wasn't broken. It was working exactly as configured, and exactly as configured turns out to mean something most merchants don't expect.
We'll get to that part. First, the setup.
Setting it up natively, step by step
You don't need an app to create a basic Buy X Get Y promotion, it's a built-in discount type.
- From your Shopify admin, go to Discounts and click Create discount, then choose Buy X get Y.
- Give it a name. This shows up in your admin and on the customer's order, so make it something recognizable, "Buy 2 Get 1 Free, Socks" rather than "Promo4."
- In the Customer buys section, set the trigger: either a minimum quantity or a minimum amount spent, and which products or collections qualify. Using a collection rather than individual products means new arrivals can qualify automatically later without you editing the discount again.
- In the Customer gets section, set how many units the customer receives the discount on, and which products or collections those units come from. If you're running a true "buy this, get that" structure, this is usually a separate, specific product, if you're running "buy any 3, the cheapest is free," it can be the same collection used in the buy section.
- In At a discounted value, choose Free, a percentage off, or a fixed amount off.
- Choose whether it's an automatic discount or requires a code, then set the active dates, usage limits, and combination settings.
- Save.
A couple of things worth getting right while you're in there. If "Customer buys" and "Customer gets" point at the same collection, Shopify automatically treats the lowest-priced qualifying item as the free one, which is usually what you want, but worth double-checking if your collection has a wide price range. And if you're running more than one promotion at a time, check the Combinations settings on both, the same stacking rules that apply to percentage discounts apply here too.
To make this concrete: for "Buy 2 candles, get 1 free," you'd set Customer buys to a quantity of 3 from your Candles collection, set Customer gets to a quantity of 1 from the same collection, and set the discounted value to Free. Shopify handles picking out which of the three is the free one automatically, you don't need to designate a specific item as long as they're all from the same eligible collection.
A few structures worth knowing about
"Buy X Get Y" covers more ground than the classic BOGO. A few variations worth knowing since they all use the same setup screen, just different values:
Cross-sell gift with purchase. Buy product A, get a specific, unrelated product B free or discounted. Common for introducing a new product line to existing customers, or pairing a high-margin accessory with a hero product.
Tiered free item. Buy any 3 from a collection, get the cheapest one free. Works well for clearing inventory across a whole category rather than promoting one specific SKU.
Partial discount instead of free. The "get" item doesn't have to be free, a 50% off second item is technically the same discount type, just with a different value in the discounted-value step, and it's gentler on margin if a fully free item doesn't pencil out for your product.
Spend-based qualification. Instead of a quantity, "Customer buys" can be set to a minimum dollar amount, useful when the qualifying purchase could reasonably be any mix of products rather than a specific count of one thing.
All four use the exact same admin flow above, the only thing changing is what you put in the buys, gets, and discounted-value fields.
The part that breaks everything if you don't know about it
Here's the detail that catches almost everyone running their first Buy X Get Y promotion: Shopify's native discount engine never automatically adds the free or discounted item to the customer's cart. Not for automatic discounts, not for discount codes. The customer has to find the qualifying "get" product themselves and add it manually, the discount only ever reduces the price of something that's already sitting in the cart.
Think through what that actually means for a shopper who has no idea this is how it works. They add three T-shirts to their cart, the ones your "Buy 2 Get 1 Free" promotion is supposed to cover. Nothing visibly happens. No free item appears, no banner congratulates them, no line item changes. As far as they can tell, nothing about their cart reflects any kind of deal at all, because nothing does yet, the system is just waiting for them to also go find the specific free item and add it themselves, something they were never told they needed to do.
Most shoppers don't go looking for a step nobody told them existed. They check out with three full-priced T-shirts, or they get confused, assume the promotion is broken or fake, and abandon the cart out of mild suspicion. Either way, a promotion that looked successful in your admin, properly configured, active, no errors, produced exactly the same outcome as not running one at all.
This is also why usage reports on a poorly surfaced Buy X Get Y promotion can look misleadingly bad. A low redemption count doesn't necessarily mean shoppers weren't interested in the deal, it often just means they never found out there was a second step required to get it.
Why this hits Buy X Get Y harder than other discount types
A percentage-off discount has one job: be visible. Once a shopper has the qualifying item in their cart, the deal is already structurally complete, it just needs to be seen.
Buy X Get Y has two jobs stacked on top of each other. It needs to be visible, the same as any other discount, and on top of that, it requires an additional, specific action before it does anything at all, finding and adding a second product the shopper may not have even been shopping for. That's a meaningfully higher bar than just noticing a lower number on a price tag, and it's exactly why this promotion type quietly underperforms more often than simpler ones, even when it's configured perfectly.
It's worth comparing this directly to how a percentage discount fails versus how Buy X Get Y fails. An invisible percentage discount still produces a sale, just at a lower margin than you'd like and without the urgency a visible deal creates. An invisible Buy X Get Y promotion produces nothing different at all, the shopper checks out exactly as they would have if the promotion didn't exist. The downside risk is structurally worse, because there's no partial credit for a deal nobody acted on.
Two separate problems, two separate fixes
It's worth treating these as genuinely different problems, because the fixes aren't the same.
Making the offer visible in the first place. This is the more fundamental fix, and the cheapest one. A badge on the product page stating the actual terms, "Buy 2, Get 1 Free", a banner on the relevant collection page, a mention in the cart if a qualifying item is present but the free one isn't yet. None of this requires touching the discount logic itself, it's purely about making sure a shopper encounters the offer before they're deep enough into checkout that going back to add another item feels like a hassle rather than a discovery. Even something as simple as a sentence on the product description, spelled out in plain terms rather than assumed to be obvious, closes most of the gap for free. Show Discount handles this specific piece, it displays a badge synced to your active discounts including Buy X Get Y, so the offer is visible on the product page itself rather than living only inside the Discounts admin where customers never see it.
Reducing the friction of actually adding the free item. This is a separate, narrower problem; even a shopper who knows the deal exists still has to take an extra action to claim it. They have to remember which product qualifies, navigate to it, and add it, three steps for something that should arguably be one. A small category of apps exists specifically to auto-add the qualifying item to the cart once conditions are met, removing that step entirely, often by detecting the buy condition and prompting the shopper with a one-click add rather than a full product page visit. Worth knowing this category exists if the extra click is genuinely costing you conversions, though for most stores, simply making the offer visible and easy to understand solves the bulk of the problem without that added layer.
A few quick answers
Does the discount apply automatically, or does the customer need a code? Your choice during setup. Automatic discounts apply the moment the cart conditions are met, no code needed. Code-based ones require the customer to enter it at checkout, same as any other discount type.
What happens if a customer adds the "buy" item but never adds the "get" item? Nothing, in either direction. They're not charged incorrectly and nothing breaks, they simply check out at full price, having never claimed a discount that, from Shopify's perspective, was always available to them.
Can I run Buy X Get Y in my physical store too? Depends on your POS plan. It works at both online and in-person checkout on POS Pro. On POS Lite, Buy X Get Y discounts are limited to your online store and won't apply at in-person checkout.
Does this work on the post-purchase upsell page? No. Buy X Get Y discounts created in the Shopify admin don't apply to post-purchase offer pages, that's a separate system with its own discount handling.
Can I limit the promotion to new customers only, or specific customer segments? Yes, Buy X Get Y discounts support the same eligibility settings as other discount types, you can restrict it to specific customer segments, tags, or leave it open to everyone, all from the same discount setup screen.