Skip to main content
Discount types & pricing

How to set up a Buy X Get Y (BOGO) offer

A Buy X Get Y (BOGO) offer rewards shoppers with free units when they reach a quantity you set, for example "Buy 2, Get 1 free." In Bundlex you build it as one offer inside a bundle deal, then Bundlex makes the cheapest qualifying units free at checkout.

Before you start

A BOGO offer lives inside a bundle deal, the same place you set up your quantity tiers. Open the bundle deal you want to add it to (or create a new one), then add or edit an offer. Each offer has a discount type, and Buy X Get Y is one of the options.

Set up the offer

  1. In the offer, open the discount type selector and choose Buy X Get Y.
  2. Three quantity fields appear: Buy, Get, and Total.
  3. Set the Buy quantity, the number of units the shopper pays for to qualify.
  4. Set the Get quantity, the number of free units they receive.
  5. Total fills in automatically and is read-only. It is simply Buy plus Get, the number of units that must be in the cart for the offer to apply.

For a classic "Buy 2, Get 1 free," set Buy to 2 and Get to 1, and Total shows 3. For "Buy 1, Get 1 free," set both to 1 and Total shows 2.

How the free units are chosen

Bundlex makes the cheapest qualifying units in the group free. When the cart qualifies, Bundlex sorts the matching units from cheapest to most expensive and applies a 100% discount to the free ones. If your variants are priced differently, the lowest-priced units are the ones that come off, which is the standard, customer-friendly way to run BOGO.

The offer repeats as the quantity grows. With "Buy 2, Get 1 free" (Total 3), a cart of 3 gets 1 free unit, a cart of 6 gets 2 free units, and so on. Quantities between full sets do not unlock an extra free unit until the next Total is reached, so 4 or 5 units still give 1 free unit, and the 6th unlocks the second.

Write the offer text

You can reference the quantities in your offer title, label, subtitle, and badge so the copy always matches the numbers you set. Two template variables are made for BOGO:

  • {{buy_quantity}} resolves to your Buy quantity (Total minus Get).
  • {{get_quantity}} resolves to your Get quantity.

For example, an offer title of Buy {{buy_quantity}}, get {{get_quantity}} free reads as "Buy 2, get 1 free" once the variables are filled in, and it carries through to the checkout label. Using the variables instead of typing the numbers means the text updates automatically if you change the quantities later.

BOGO offers stay isolated

Unlike plain volume tiers, BOGO offers do not auto-merge with your other offers. Volume tiers (percentage, fixed amount, exact price) form a ladder, so as a shopper adds more of the same product they roll up into the next tier automatically. BOGO is treated as its own commitment instead: its buy and get math does not combine with percentage tiers, so Bundlex keeps it separate rather than folding it into a higher discount.

In practice, this means a BOGO offer applies on its own terms. It is not silently promoted into, or out of, by reaching a different tier's quantity.

How it appears at checkout (attribution)

For attribution, Shopify attaches the discount allocation to the free unit. That is the line that receives the 100%-off amount, so when you review an order the BOGO saving shows up against the free unit rather than spread across the items the customer paid for. This is expected and does not change what the customer pays.

Tip: the checkout label that shoppers see comes from your offer title, with any {{buy_quantity}} and {{get_quantity}} variables resolved. If you set a discount-level checkout name in the bundle's Discount name area, that overrides the per-offer title for every line in the discount.

Quick checklist

  • Discount type is set to Buy X Get Y.
  • Buy and Get are filled in, and Total computed the value you expected.
  • Offer text uses {{buy_quantity}} and {{get_quantity}} so the copy matches the numbers.
  • The bundle is published and applies to the product the shopper is viewing.

Was this article helpful?

Your feedback helps us improve our docs.

Thanks - we'll keep improving this article.

Want to chat with our team? Still have a question?

Still need help?

Our team is one click away. Send us a message and we'll get back to you.

We use a few cookies to keep this site working, measure how it is used, and power our chat widget when you open it. See our cookie policy.