Buy X, get Y free
Set up a BOGO offer where every complete set of Buy plus get units of the product gets the get units free.
A Buy X, get Y free offer sells the product on the page in sets: the shopper buys X units and gets Y more free. Buy 1, get 1 is the classic BOGO; Buy 2, get 1 makes every third unit free.
The free units are the same product as the paid ones (they can be different variants). The shopper picks the offer, clicks your theme's Add to cart button, and the cart receives all X + Y units. At checkout, the Y units of each complete set are 100% off. If you want free units of a different product, use a free gift on the offer, or a Mix & Match offer.
Two ways to create one
| Buy X, Get Y Free (BOGO) template | Add Offer → Buy X, get Y free | |
|---|---|---|
| Where | Home → Add new deal → Choose a Bundle Template | Offers tab of any bundle |
| What you get | A new bundle with one BOGO offer | One more offer at the bottom of the bundle you're editing |
| Bundle Name (only visible for you) | Buy X Get Y Deal | Unchanged |
| Block title | BUY X, GET Y FREE | Unchanged |
| Buy / get | 1 / 1 | 1 / 1 |
| Title | Buy 1, Get 1 Free | 1 pack |
| Subtitle | BOGO Deal | Standard price |
| Selected by default | Ticked | Unticked |
Use the template for a bundle that is only a BOGO. Use Add Offer to put a BOGO next to your quantity-break tiers, or to offer several BOGOs in one bundle (for example Buy 1, get 1 and Buy 2, get 2). The shopper picks one, and each is checked on its own at checkout.
An offer added from the menu keeps the quantity-break wording, so rewrite its Title and Subtitle.
Set one up
On the app Home page, click Add new deal. On the Choose a Bundle Template screen, click Create Bundle on the Buy X, Get Y Free (BOGO) card.
To add a BOGO to an existing bundle instead, open it, go to the Offers tab, click Add Offer below the last offer and choose Buy X, get Y free.
On the Offers tab, scroll past the feature cards to the Offers heading and open the offer (Offer #1, Offer #2…).
In the first row, set the two Quantity fields. The row reads Buy [Quantity] , get [Quantity] free! — the first number is how many units the shopper pays for, the second how many are free.
Write the Title and Subtitle. Type the numbers yourself — they don't follow the Buy and get fields. For Buy 2, get 1, use a Title such as Buy 2, Get 1 Free.
Optional: add an image, a badge, a Label, tick Selected by default, and add a free gift, upsell or highlights (see the table below).
Click Save. Check that the Status dropdown in the header says Active.
Open a product page, select the offer, add it to the cart and go through checkout. Check that the free units show a 100% discount.
Fields on a BOGO offer
| Field | What it does |
|---|---|
| Buy Quantity | Units the shopper pays for in each set. A whole number, 1 or more. Blank, 0, negative or decimal entries turn back into 1. There is no upper limit. |
| , get Quantity | Units that are free in each set. Same rules. |
| Title | Main line on the offer. Required — if you clear it, Save is blocked and a red There are some errors in the form banner lists Title is required. |
| Subtitle | Line under the title. Optional. |
| Image (Optional) | Same as on any offer. |
| Badge text + Badge Style | The flag on the offer. Hidden in the vertical layout. |
| Label | A small tag next to the title (horizontal layout), or a banner across the top (vertical layout). |
| Selected by default | Pre-selects the offer. Only one offer in a bundle can have it. |
| Add ons | Add Upsell, Add Free Gift, Highlights — see Add and edit offer tiers. |
| Show as Sold out | Same as any offer — see Sold out tiers. |
| Hide behind scratch-off | Only appears while the Scratch Deal card is on. |
A BOGO offer has no Discount Type, Discount per item or Show quantity selector. The discount is always "the get units are 100% off"; you can't make them 50% off.
Title, subtitle, badge and label accept text variables, but {{quantity}} and the per-item ones ({{new_price_per_item}}, {{original_price_per_item}}) use a hidden quantity that doesn't follow your Buy and get numbers. Leave them out.
What shoppers see
- The offer appears like any other, with your title, subtitle, label and badge.
- Its price is for the units the shopper pays for, not the free ones. With Use product compare-at price ticked (it is on in a new bundle), the struck-through price is the regular price — or compare-at price — of all the units. On a $10 product, Buy 1 get 1 shows
$10.00with$20.00struck through. With it unticked there is no struck-through price. See Pricing settings. - Show prices per item divides by the Buy quantity only, so with Buy above
1the struck-through price is not a per-item price. Leave it off for BOGO. {{saved_percentage}}and{{discount}}read0%and nothing unless Use product compare-at price is ticked. On a $10 product with no compare-at price, Buy 1 get 1 gives50%.- If the product has options and Let customers choose different variants for each item is ticked, the offer shows one picker for every unit, free ones included (
# 1,# 2…). Show variant selection for single quantity deal bar makes no difference, because a BOGO always has at least two units. See Variant settings.
Price after changing a picker
On a product with variant pickers, once a shopper changes a picker — or selects another offer and then comes back — the offer's price can switch to the total for all units, free ones included, with no struck-through price. This is display only; checkout still makes the free units free. Always check the total at checkout.
Keep Price rounding off with BOGO
Price rounding is applied to the price shown on the offer, but not to BOGO prices at checkout. With .99 on, a $10 paid price shows as $10.99 while checkout charges $10.00.
What goes into the cart
- The cart gets
Buy + getunits of the product: 2 for Buy 1, get 1; 3 for Buy 2, get 1. There is no separate free line and no $0 product. - Units of the same variant share a cart line. With per-unit pickers, each variant gets its own line.
- Free gifts and upsells the shopper ticked are added as extra lines.
- Because the discount lands at checkout, some themes show full price in the cart.
What checkout charges
Checkout counts the units of the product that were added through the offer. For every complete set of Buy + get units, the get units are 100% off. Units that don't make a complete set pay full price.
Free units = whole sets × get.
| Units in cart | Buy 1, get 1 | Buy 2, get 1 | Buy 1, get 2 |
|---|---|---|---|
| 1 | 0 free | 0 free | 0 free |
| 2 | 1 free | 0 free | 0 free |
| 3 | 1 free | 1 free | 2 free |
| 4 | 2 free | 1 free | 2 free |
| 6 | 3 free | 2 free | 4 free |
| 7 | 3 free | 2 free | 4 free |
- Paid units cost their normal price. The offer's hidden discount fields are ignored.
- The free units are 100% off, so there is no rounding and Price rounding, Amount Off and Fixed Price have no part in it. A percentage discount isn't affected by currency conversion in other markets.
- Checkout doesn't compare prices. It takes the free units from the cart lines in cart order, so if variants have different prices the free unit isn't necessarily the cheapest.
- The discount message is
Buy 2, get 1(your numbers). It is English only and not on the Translations page. It belongs to the one automatic discount Oxify Bundle Discount under Discounts in your Shopify admin.
How it works with other features
| Feature | With a BOGO offer |
|---|---|
| Quantity selector | Not available. |
| Free gifts | Free only while the cart still holds a complete set, and only up to the gift's quantity — they are not multiplied by the number of sets. |
| Upsells | Discounted only while the cart still holds a complete set. |
| Other offers in the bundle | Independent. If the shopper lowers the cart quantity below Buy + get, checkout falls back to the highest offer in the same bundle that the cart still reaches. |
| Sold out | Works as on any offer. |
| Markets | The bundle's Markets setting decides who gets the offer. |
| A/B tests | A BOGO offer can be in any version. Save every version. See A/B testing. |
| Translations | Title, subtitle, label, badge text and sold-out text appear on the Translations page as Offer #N - Title and so on. |
If it isn't working
- Offer doesn't appear: see Offer not showing.
- Customer pays full price: see Discount not applying at checkout. For BOGO, also check:
- The cart has at least Buy + get units, all added with the offer's Add to cart button.
- The customer didn't lower the quantity below a full set.
- The units are the same product — other products don't count.
- Only some units are free: that's the whole-sets rule above. 3 units on Buy 1, get 1 gives 1 free.