Magento buy one, get one free (different products)
Advanced promotions creation in Magento  part 3
In this series, we cover Magento price cart rules in depth. This is the second part of our promo series, and it will deal with the
Other articles in these series:
 Part 1  percentage discount, fixed discount, and fixed discount for the whole cart in Magento
 Part 2  Magento builtin buy x get y promotion (Buy x get y  same product)
Magento outofthebox BOGO promotion works only for the same product
As we saw in part 2 of this guide, the Magento outofthebox buy x get y promotion only works for multiple quantities of the same products.
That is, for the following examples, the Magento builtin buy x get y promo won’t work:
 1+1 on tshirts (cheapest)
 Buy a watch, get a bag for free
 3 for 2 on all products
To implement these promotions, we will need an advanced promotions extension for Magento. In the following examples, we will use the Mexbs Additional Promotions extension.
Lets see how to implement the promotions above using the extension.
1+1 on tshirts (cheapest)
This promotion applies a 100% discount to half of the cheapest tshirts. For example, if the customer adds 4 different tshirts, 2 of the cheapest will be free.
Promo configuration
To configure it, choose “N + M / Percent Discount” in the “Apply” field
We need to define the promo configuration so that it behaves exactly as we want. Let's see how to do that in this specific example and discuss all the fields and their meanings:
We fill the fields in the following way:
 Buy [ 1 ] items, Get the subsequent [ 1 ] items with [ 100 ]% discount  because our promo is 1+1
 Category is one of 31,32  because these are the categories of the tshirts in our store (women’s tshirts and men’s tshirts)
 [label for upsell cart hints—singular: [ tshirt ], plural: [ tshirts ]]—these are the hint messages that will appear in the cart, encouraging the customer to add more items. For example, “Get another tshirt for free.” We will discuss the upsell cart hints later in detail.
 Ordered by [most expensive]  the promo extension first looks at what items not to discount, so if we order by most expensive, the cheapest ones will get the discount

Discount method = Edge  the extension has two methods of discounting
 Discount each alternative item (that is, discount method = Spread Out). In this case, the extension orders the items and discounts each alternative one (in our example one yes and one no)
 Discount a sequence of items (that is, discount method  Edge). In this case, the extension orders the items and discounts them subsequently (in our example, the cheapest half of them).
Save the promo.
Promo results
Adding two different tshirts to the cart
In the cart and the minicart, we can see that if we add two different tshirts, we get the cheapest one for free.
Adding four tshirts to the cart
Similarly, if we add four tshirts, we get the two cheapest tshirts for free.
Magento 2 buy x get y free  where x and y are different product groups
Buy a watch, get a bag for free
Another type of BOGO promotion is when the two products belong to different groups/categories.
For example: Buy a watch, get a bag for free
Unlike in the previous example, where the 1+1 promo was valid within the same category (tshirts), here, one product belongs to one category, “watches,” and the discounted product belongs to another category, “bags.”
Let's see how to configure it using the Additional Promotions extension.
Promo configuration
To configure it, choose “BOGO: Buy x, get different y / Percent Discount” in the “Apply” field.
Let’s see how we configure the cart rule:
Let’s explain the rule fields in detail:
 Buy [ 1 ] items for which ALL of the following conditions are TRUE—the 1 identifies the number of watches you need to add to get a free bag. (If we insert 2 instead, the promo will be “Buy two watches to get a bag for free”
 Category is 12  this is the category ID of watches in our Magento store.
 [label for upsell cart hints—singular: [ watch ], plural: [ watches ]]—these are the hint messages that will appear in the cart, encouraging the customer to add more items. For example, “Add another watch to get another bag for free.” So, the word “watch” is taken from this configuration. We will discuss the upsell cart hints in detail later in this series.
 Get the [ 1 ] first [ cheapest ] items  we want to discount the 1 cheapest bag for each watch added. (If we change the 1 to 2, the promo will be “Buy a watch to get two bags free”)
 [label for upsell cart hints—singular: [ bag ], plural: [ bags ] ]—Similar to before, the cart hints will use these keywords to encourage the customer to complete his purchase.
 Category is 10  this is the category ID of the bags in our Magento store.
Save the promo.
Promo results
Adding a watch and a bag to the cart
We can see that a 100% discount is applied to the bag.
Two watches and a bag in the cart
If we add another watch, so we have two watches and one bag in the cart, we will see the hint message saying, “Add one tshirt to get the next tshirt for free!”.
Two watches and two bags in the cart
If we add another bag, we will see that both of the bags got discounted.
One watch and two bags in the cart
If we remove one watch, so we now have a watch and two bags, we will see that the cheapest bag will get discounted.
Wrapup
This article taught us how to configure the buy x, get y free promotion in Magento 2 for different products. Note that this is impossible with Magento outofthebox, so we had to use an advanced promotions extension for Magento. We looked at the most classic examples of advanced promotions: “1+1 on tshirts” and “Buy a watch, get a bag for free.”
In the next articles, we will discuss more complex BOGO promotions that we can create with the Additional Promotions extension. For example, “3 for 2 on all products,” “Buy watch and bag, and get a free bottle,” “2+2 on orders above $100,” and “1+2 on tshirts in your birthday month.”