WooCommerce BOGO: The Complete Setup Guide (Buy X Get Y, Same Product and Cross-Product)
WooCommerce Promotion Guide
Every BOGO Deal in One Place.
WooCommerce has no native Buy One Get One mechanism. This guide covers every variant — from Buy 2 Get 1 to cross-product Buy X Get Y — what each one costs you, when each one earns its keep, and how to set them up correctly.
Buy One Get One is one of the most effective promotions in retail — and one of the most confusing to implement in WooCommerce. The platform has no native BOGO feature. The plugin landscape that fills the gap ranges from solid to barely functional. And “BOGO” itself is shorthand for a whole family of deal structures that work differently, configure differently, and serve different goals.
This guide is the central reference for WooCommerce Buy One Get One deals. It maps every structure, explains when each earns its place, walks through the margin math, and gives you a working setup process. Where the topic branches into deep-dives — the pure technical setup, the free-vs-50%-off psychology, the same-product vs. cross-product mechanics — this guide links out to the dedicated post on that topic rather than trying to cover everything in one place.
What is a BOGO deal in WooCommerce?
A BOGO deal is a cart-level conditional discount: when a customer adds enough qualifying units to their cart, one or more additional units receive a discount. The defining characteristic is that the discount is tied to quantity, not to a flat cart value or a coupon code. Buy one, and the second costs less (or nothing). Buy two, and the third is free. Buy any coffee machine, and the matched bag of beans comes at a discount.
WooCommerce cannot do this natively. Its pricing model supports product-level sale prices (a stored number) and coupon codes (percentage off, fixed off, free shipping). Neither primitive can express “when the customer has N units of product X in their cart, discount Y units.” That logic requires a plugin that hooks into the cart calculation layer and modifies prices dynamically based on what’s in the cart and how much of it.
This architectural gap is why BOGO plugins vary so much in quality. Building reliable cart-level conditional logic — one that works across both the classic checkout and WooCommerce’s modern block-based cart, handles edge cases gracefully, and plays predictably with other active discounts — is genuinely non-trivial work. Knowing what “working correctly” looks like makes it much easier to evaluate whether a given implementation meets that bar.
The BOGO variants: a map of every structure
The label “BOGO” gets applied to several distinct deal structures. Here is what each one actually means, how to configure it, and what it costs you in effective discount rate.
Buy 1 Get 1 Free
The classic. One unit at full price, the second unit free. Configured as: buy quantity 1, get quantity 1, discount 100%. The effective discount per transaction is 50% — two units for the price of one. This is the most generous structure and should be reserved for high-margin products, trial scenarios, or situations where moving volume outweighs margin per transaction.
Buy 2 Get 1 Free
A softer version that is often better for stores with tighter margins. Two units at full price, the third free. Configured as: buy quantity 2, get quantity 1, discount 100%. The effective discount per transaction is 33% (one free unit across three). A customer adding six qualifying units gets two of them free — two complete sets of buy-2-get-1.
Buy 3 Get 1 Free (and other ratios)
As the buy quantity grows, the effective discount shrinks. Buy 3 Get 1 Free gives a 25% effective discount rate per set. Buy 4 Get 1 Free gives 20%. The formula is always the same: (get quantity × discount %) ÷ (buy quantity + get quantity). Any combination of buy and get quantities maps to a real number you can check against your margins before committing.
Buy X Get Y at a partial discount
Not all BOGO deals have to be “free.” You can set the get-side discount to any percentage from 1% to 100%. Buy 1 Get 1 at 50% off means: buy one at full price, get the second at half price. The effective discount per transaction is 25%. This structure is common for premium products where giving something away entirely would cheapen the brand, but rewarding customers for buying two still makes commercial sense.
Cross-product Buy X Get Y
A structurally different mechanic. Instead of working within a single product pool, cross-product Buy X Get Y operates with two separate product pools: a “buy” pool and a “get” pool. A customer meets a quantity threshold on the buy-side products; qualifying products from the get-side pool receive the discount. “Buy any camera, get a camera bag at 50% off” is the prototypical example.
This is not the same as same-product BOGO with a wider product scope. The configuration is different, the eligibility rules are different, and the edge cases are different. In Smart Cycle Discounts, same-product BOGO and cross-product Buy X Get Y are treated as separate campaign types — which is the architecturally correct approach. More on this split below.
All BOGO deals apply at the cart level, not the product page
The product page price does not change. The discount appears when the qualifying quantity is in the cart — as a reduced unit price on the eligible items. If you’re testing a BOGO deal and don’t see a discount on the product page, that’s expected. Test by adding the qualifying quantity to a cart and checking the cart total.
Same-product vs. cross-product: which structure do you need?
Before configuring anything, answer one question: do you want the “buy” and “get” products to be the same thing, or different things?
If they’re the same — a customer buys more of one product and the extra units get cheaper — same-product BOGO is the right structure. It’s simpler to configure and naturally handles multi-unit scenarios (a customer buying six units gets two free on a Buy 2 Get 1 deal). The product scope can be flexible: all products, a specific category, or a manually selected list.
If they’re different — a customer buys Product A and gets Product B at a discount — cross-product Buy X Get Y is the right structure. It requires a fixed, explicit list of buy-side product IDs and get-side product IDs. The discount fires only when the buy-side threshold is met, and it applies only to items from the get-side pool that are in the cart.
In Smart Cycle Discounts (version 2.1.3 at the time of writing), same-product BOGO is available in the free tier and has been since version 1.0.0. Cross-product Buy X Get Y is a Pro feature, introduced in version 1.9.0. This split reflects the difference in implementation complexity — the cross-product engine needs to manage two independent product pools and handle more edge cases.
| Question | Same-Product BOGO | Cross-Product Buy X Get Y |
|---|---|---|
| Are buy and get products the same? | Yes — one shared pool | No — two separate pools |
| Product scope flexibility | All products, category, specific list | Fixed product ID lists only |
| Use when… | Goal is volume of one product type | Goal is cross-sell or product discovery |
| In Smart Cycle Discounts | Free (strategy: bogo) |
Pro (strategy: buy_x_get_y) |
| Compatible with random / smart product selection | Yes | No — fixed pools required |
| Max applications cap | Supported | Supported |
For a deeper exploration of these two structures — including all six configuration fields for cross-product Buy X Get Y, the get-discount-target (cheapest vs. most expensive) setting, and the edge cases that trip stores up — see the dedicated guide to same-product vs. cross-product BOGO mechanics.
Running the margin math before you commit
BOGO deals are easy to misconfigure for the wrong margin. The psychological appeal of “free” can make the deal feel generous in a good way — but the gross-profit arithmetic is unforgiving if you don’t run it first.
The effective discount rate formula for any buy/get configuration is:
Effective discount = (get quantity × discount %) ÷ (buy quantity + get quantity)
Examples:
- Buy 1 Get 1 Free: (1 × 100%) ÷ 2 = 50% effective discount
- Buy 2 Get 1 Free: (1 × 100%) ÷ 3 = 33% effective discount
- Buy 1 Get 1 at 50% off: (1 × 50%) ÷ 2 = 25% effective discount
- Buy 3 Get 1 Free: (1 × 100%) ÷ 4 = 25% effective discount
Once you have the effective discount rate, apply it to your gross margin. If your product sells at $40 with a 60% gross margin ($24 gross profit per unit), a Buy 1 Get 1 Free deal means two units sell for $40. Cost of goods for two units is $32. Your gross profit on the transaction is $8 — a 67% drop from the single-unit baseline.
That might be worth it. Plenty of BOGO deals are worth the margin hit — trial-driving on new products, clearing slow inventory, extending the repurchase window on consumables. But you need to know the number before the campaign launches, not while reviewing the month’s P&L after it ends.
Cross-product margin math is different
For a cross-product Buy X Get Y deal, the margin math depends on the individual margins of the buy-side and get-side products. If the “get” product is a low-cost accessory with a 70% margin and a retail price of $15, giving it at 50% off costs you (0.5 × 70% × $15) = $5.25 per triggered deal. If the “get” product is a $120 premium item with a 40% margin, the math changes significantly. Calculate both sides separately and sum the gross profit before deciding on the structure.
The WooCommerce discount calculator on the Webstepper site can help you model this before committing to a specific buy/get ratio.
When to use BOGO (and when not to)
BOGO is not universally the right promotional structure. It earns its place in specific scenarios and underperforms in others.
When same-product BOGO works well
- Consumables with regular repurchase cycles. Coffee, protein powder, skincare, pet food — products customers will use again. Getting two units into a customer’s home extends the repurchase window, which is time a competitor can’t intercept them. The margin cost is real; the retention value is also real.
- Inventory clearance on a specific SKU. You have surplus stock, an end-of-season item, or a product being discontinued. A time-limited BOGO deal on that specific SKU can move it without discounting your broader catalog.
- Volume driving on a high-margin product. If gross margin is high (60%+), a Buy 2 Get 1 Free deal at a 33% effective discount still leaves meaningful margin per transaction while driving significantly higher units per order.
When cross-product Buy X Get Y works well
- Accessories and complementary products. Camera and memory card. Running shoes and insoles. Tea set and a tea sampler. The buy product does the traffic acquisition; the get product gets the trial it otherwise wouldn’t.
- Product discovery for overlooked items. You have a product that doesn’t rank well in search and doesn’t get browsed organically. Pairing it as the “get” item against a bestseller gives it visibility and trial it couldn’t generate on its own.
- Building a reason to return. The free or discounted “get” item creates a new consumable need. The free bottle capper means they need to buy caps. The free first bag of a new coffee blend means they’ll be evaluating it for next month’s order.
When to think twice before running BOGO
- Thin-margin products. If gross margin is below 40%, even a Buy 2 Get 1 Free at 33% effective discount can make the transaction unprofitable depending on your cost structure. Run the math first — not after.
- Products where “free” cheapens the perception. Luxury goods, premium apparel, high-end accessories — the word “free” can work against the brand positioning. A partial discount (get at 30% off, get at 50% off) often fits better here.
- Recurring promotions on the same product. If customers learn that Product X goes BOGO every six weeks, they stop buying it at full price. They’re not getting a deal — you’re just funding their timing preference. Monitor post-campaign sales velocity; if it drops below baseline for more than two weeks, you’ve pulled demand forward and need a longer recovery window before the next promotion.
Step-by-step: setting up a BOGO campaign
The following walkthrough uses Smart Cycle Discounts (free tier for same-product BOGO, Pro for cross-product Buy X Get Y). The decision logic in each step applies regardless of which plugin you use.
Step 1: Decide your structure before opening the plugin
Write the deal in plain language before configuring anything: “Buy 2 units of the summer blend coffee, get 1 unit free.” This gives you your buy quantity (2), get quantity (1), discount (100%), and product scope (specific product: summer blend). If you can’t write it in one sentence, the deal isn’t well-defined yet. Ambiguous deals produce misconfigured campaigns.
Step 2: Create a new campaign and name it clearly
Give the campaign a name that still makes sense in three months. “BOGO” is useless. “June BOGO — Summer Blend 500g — Buy 2 Get 1 Free” tells you what it is, what it targets, and roughly when it ran. Clear naming matters when you’re looking at a list of twenty campaigns, or when you’re duplicating last year’s promotion and need to know what the original covered.
Step 3: Select your product scope
For same-product BOGO: choose all products, a category, or a specific product list depending on scope. Be deliberate — a sitewide BOGO on all products is almost always too broad and too expensive. For cross-product Buy X Get Y: you must specify fixed product ID lists for both the buy pool and the get pool. Random and smart selection modes are incompatible with the cross-product engine.
Step 4: Configure the buy/get quantities and discount percentage
For same-product BOGO: set buy quantity, get quantity, and the discount percentage on the get units (1–100%). For cross-product Buy X Get Y (Pro): set the buy product IDs, buy quantity, get product IDs, get quantity, discount percentage, and the get discount target (cheapest or most expensive qualifying get-side item). Consider setting a max applications cap on cross-product deals to limit how many times the deal fires per cart.
Step 5: Set the schedule
Give the campaign a start date and an end date. This is where a campaign-based plugin earns its place over a basic BOGO rule toggle — the promotion activates and deactivates automatically. You don’t need to be available when the deal starts or when it ends. A campaign with no end date runs indefinitely; always set an explicit end date unless this is a permanent pricing decision.
Step 6: Check for conflicts before launching
If other discount campaigns are active on the same products during the same period, determine which takes priority. Smart Cycle Discounts uses a campaign priority system — the higher-priority campaign applies, others do not stack. Review priority settings before launch, especially if you have a sitewide percentage discount running alongside a product-specific BOGO deal. Unchecked conflicts produce double-discounting or silent overrides that neither you nor the customer expects.
Step 7: Test with an actual cart before going live
Add the qualifying quantity to a test cart and verify the discount appears correctly in the cart total. Test on both the classic cart and the block-based cart if your store uses the block checkout (go to WooCommerce → Settings → Advanced → Features to check). Test with a coupon code active if customers commonly use them — confirm the stacking behavior matches your intent. Five minutes of testing now is worth far more than a customer complaint during the promotion.
Common configuration mistakes
Setting Buy 1 Get 1 on a product with a 30% gross margin
On a product with a 30% gross margin, a true Buy 1 Get 1 Free means selling two units for the price of one. If the full-price cost of goods leaves you with 30% margin per unit, selling two for the price of one means gross profit is effectively zero (or negative once you include transaction costs). Run the gross profit calculation before choosing the ratio. Buy 2 Get 1 or Buy 1 Get 1 at 50% off may preserve enough margin to make the deal viable.
No end date on the campaign
A BOGO deal with no defined end date continues running until someone manually deactivates it. If you’re on holiday, dealing with another issue, or simply forget, customers continue receiving the discount after the promotional window has closed. Always set an explicit end date. If you intend the deal to be ongoing, that’s a permanent pricing decision — not a promotion — and deserves a different kind of scrutiny.
Using cross-product Buy X Get Y with category-level product scopes
Cross-product Buy X Get Y in Smart Cycle Discounts requires fixed product ID lists for both the buy pool and the get pool. Attempting to configure it with a category scope, an all-products scope, or a random selection will not work as expected. If you need category-level flexibility, same-product BOGO supports that. For cross-product deals, you need to explicitly specify which products qualify on each side.
Testing on the classic cart when customers use the block checkout
Many BOGO plugins were built for WooCommerce’s classic PHP-rendered checkout and have never been updated for the block-based checkout (which is now the default in WooCommerce). A deal that appears to work in testing can fail silently in production if you tested on the classic checkout but your customers land on the block-based one. Always test explicitly on the checkout type your store actually uses. For the full breakdown of why this happens and how to check your checkout type, see the technical guide to WooCommerce BOGO setup.
Forgetting that customers need to add the get unit themselves
Unless a plugin auto-adds the free product to the cart (an approach that creates its own friction problems), customers need to add the qualifying quantity themselves for the deal to trigger. A Buy 2 Get 1 Free deal doesn’t fire until the customer has three units in the cart. If your product pages or cart don’t clearly communicate this — “Add 3 to qualify for Buy 2 Get 1 Free” — customers who add only two will never see the discount and may not know they’re missing it.
Go deeper: the three specialist guides
This guide is the overview — the canonical starting point for anyone working with WooCommerce BOGO deals. Three dedicated posts cover specific dimensions in depth:
- The technical setup guide goes into why WooCommerce can’t do BOGO natively, the two technical approaches plugins use (auto-add vs. price modification) and why one consistently fails, the block checkout compatibility problem, and what a reliable BOGO implementation looks like under the hood. Read this if you’re evaluating BOGO plugins or debugging a deal that worked in testing but broke in production.
- BOGO free vs. BOGO 50% off covers the psychology and strategy behind the framing choice. The margin math is identical — two units for the effective price of 1.5 — but the customer’s response to “free” vs. “50% off” differs meaningfully depending on the product type, the goal, and whether this is a trial or a loyalty deal. It also covers when cross-product BOGO free is the smarter commercial play over same-product BOGO.
- Same-product vs. cross-product BOGO mechanics is the detailed technical comparison of the two structures. It covers all six configuration fields for cross-product Buy X Get Y, the get-discount-target (cheapest vs. most expensive) setting and its margin implications, variable product ID handling, max applications caps, and the edge cases that most stores discover too late.
The cluster of these four posts — this hub and the three specialist guides — covers the full territory of WooCommerce Buy X Get Y promotions. Use this guide to orient and decide; use the specialist guides when you need depth on a specific dimension.
Frequently asked questions
Does WooCommerce support BOGO deals natively?
No. WooCommerce’s native pricing model supports product-level sale prices and coupon codes, but has no built-in mechanism for cart-level conditional discounting. “When the customer has N units of Product X in their cart, discount Y units” requires a third-party plugin that hooks into the cart calculation layer. WooCommerce coupons can set minimum quantity requirements, but that applies a flat discount to the whole cart — not a specific discount on specific units based on cart contents.
Is BOGO free in Smart Cycle Discounts, or does it require Pro?
Same-product BOGO is free in Smart Cycle Discounts and has been since version 1.0.0. You can configure any combination of buy quantity, get quantity, and discount percentage (1–100%) in the free tier. Cross-product Buy X Get Y — where the buy and get products are different — is a Pro feature, available since version 1.9.0.
What is the effective discount rate for Buy 2 Get 1 Free?
Buy 2 Get 1 Free has an effective discount rate of 33% per transaction set. The formula is (get quantity × discount %) ÷ (buy quantity + get quantity): (1 × 100%) ÷ 3 = 33.3%. A customer adding six qualifying units gets two of them free — two complete sets of buy-2-get-1. For products where a full 50% effective discount (Buy 1 Get 1 Free) is too costly on margins, Buy 2 Get 1 Free is often the better starting point.
Why does my WooCommerce BOGO deal work in testing but not in production?
The most common cause is a mismatch between the checkout type you tested on and the checkout type your customers actually use. Many BOGO plugins were built for WooCommerce’s classic PHP-rendered checkout and use hooks that don’t fire correctly in the block-based checkout (now the WooCommerce default). If your BOGO deal applies in testing on the classic cart page but fails when a customer uses the block cart or block checkout, the plugin hasn’t been updated for block compatibility. Check specifically for block checkout compatibility — it is separate from HPOS compatibility and requires different development work.
Can I run a BOGO deal on a schedule so it starts and stops automatically?
Yes, with a plugin that supports scheduled campaigns. Basic BOGO plugins use a manual on/off toggle — you turn the rule on when you want the deal to start and turn it off when you want it to stop. A campaign-based plugin lets you define a start date, end date, and optionally a recurring schedule (weekly, monthly, custom intervals). The deal activates and deactivates automatically. Smart Cycle Discounts supports scheduled and recurring BOGO campaigns in both the free and Pro tiers.
What is “Buy X Get Y” — is it different from BOGO?
Buy X Get Y is the generalized form of BOGO. “Buy One Get One” (BOGO) is the specific case where the buy quantity and get quantity are both 1. Buy X Get Y covers any combination: Buy 2 Get 1, Buy 3 Get 2, Buy 1 Get 1 at 50% off. In practice, “BOGO” is often used loosely to refer to the whole family. In Smart Cycle Discounts, the term “Buy X Get Y” specifically refers to the cross-product variant — where the buy-side and get-side products are different items — as distinct from same-product BOGO, where both sides come from the same product pool.
Can a BOGO deal stack with a WooCommerce coupon code?
This depends entirely on how the plugin handles discount stacking and conflict resolution. Some BOGO plugins have no conflict logic and apply both discounts — the BOGO reduction plus the coupon percentage — which usually isn’t the intended behavior. Smart Cycle Discounts uses a campaign priority system: when a customer qualifies for multiple active campaigns on the same products, the higher-priority campaign applies and others do not stack on top. Always test coupon + BOGO combinations explicitly before a campaign goes live, especially during periods when sitewide coupons may be in circulation.
Key Takeaways
- WooCommerce has no native BOGO feature. All Buy One Get One logic requires a plugin that performs cart-level conditional discounting — and the quality of that implementation varies widely.
- Effective discount formula: (get quantity × discount %) ÷ (buy quantity + get quantity). Buy 1 Get 1 Free = 50%. Buy 2 Get 1 Free = 33%. Run this against your gross margin before committing to a ratio.
- Same-product BOGO and cross-product Buy X Get Y are different structures. Same-product works within one product pool. Cross-product uses two separate pools: a buy pool and a get pool.
- In Smart Cycle Discounts: same-product BOGO is free (since v1.0.0). Cross-product Buy X Get Y is Pro (since v1.9.0). Both run as scheduled campaigns with automatic activation and deactivation.
- Block checkout compatibility is separate from HPOS compatibility. A plugin can claim HPOS support without working on the block cart. Always test BOGO deals on the checkout type your store actually uses.
- Set an explicit end date on every BOGO campaign. A deal with no end date runs indefinitely. That’s a pricing decision, not a promotion.
- Monitor post-campaign sales velocity. If the promoted product’s sales drop below baseline for two or more weeks after the deal ends, you’ve pulled demand forward and need a longer recovery window before the next promotion.