Nine times out of ten this is not a bug. Buy X Get Y behaves in a specific way that surprises most merchants the first time, and the cause is usually one of a short list. Work down it in order — the first two account for the large majority of cases.
The Y item is not in the cart. Shopify's Buy X Get Y discounts the Y line if the shopper adds it. It does not add Y for them. A cart containing only X will show no discount at all, and nothing is wrong — this is the documented behaviour.
Another discount is already applied. By default a discount is not combinable. If an automatic discount or a code is already on the cart, your Buy X Get Y may simply not be the one that applied.
Then check the scope. Collection, product, variant, minimum quantity, customer eligibility, and market. A rule scoped to a collection the cart does not touch cannot fire.
Then check the dates. Start date, end date, and timezone. A discount scheduled in the store's timezone can look live to you and be inactive for a shopper in another region.
This is the single most common cause and it is not a fault. A native Buy X Get Y automatic discount evaluates the cart and discounts the qualifying Y line. If the shopper never adds Y, there is no line to discount, so the cart looks exactly as if the discount did not exist.
Merchants usually discover this after a campaign underperforms: the discount was configured correctly, the banner was live, and almost nobody got the free item — because almost nobody knew to add it. Testing it yourself hides the problem, since you know what to add.
There are three ways out. Tell the shopper explicitly, on the product page and in the cart, that they must add the gift. Accept the loss in acceptance. Or use an app that inserts the line itself — see auto-adding the free gift for how that works and what it changes.
Shopify groups discounts into product, order, and shipping classes, and each discount has explicit settings for which other classes it may combine with. Those settings default to not combining.
Open both discounts and check the combination checkboxes on each. They are per-discount settings, not a store-wide preference, so a new discount does not inherit what you set last time. Discount stacking covers the full matrix.
Collection membership. Automatic collections are rule-based and a product can silently fall out of one when a tag, price, or inventory value changes. Check the product is actually in the collection the discount points at, not that it should be.
Variant versus product. A discount scoped to specific variants ignores the others. If you added variants after creating the discount, they are not included.
Minimum quantity or amount. "Buy 2" means two of the qualifying items, and whether a single product with quantity 2 satisfies it depends on how the rule was built. Test with the exact cart a shopper would build, not with a cart you assembled to pass.
Customer eligibility. A discount limited to specific customers or segments will not fire for a logged-out shopper, including you in an incognito window — which is also the correct way to test it.
Markets and currency. If you sell in multiple markets, check the discount applies to the market you are testing from. A minimum-amount threshold also converts across currencies, so a $50 minimum is not a fixed number everywhere.
Active discount limits. Shopify limits how many automatic discounts can be active at once. If you have accumulated old automatic discounts, a new one may not be active even though it looks scheduled. Deactivate what you are not running.
Draft orders, POS, and subscriptions. Automatic discounts created for the online store do not necessarily apply to draft orders, in-person POS sales, or subscription contracts. If the discount works on the storefront and not elsewhere, this is usually why.
One more that looks like a bug: caching. If you are testing in a browser that has a stale cart, clear it or use a fresh incognito session. A cart created before the discount went live may not re-evaluate.
Testing from your own logged-in admin browser is how most of these causes stay hidden. Do it the way a shopper would:
Most often because the shopper has not added the Y item. Shopify discounts the Y line if it is in the cart but does not add it for them, so a cart containing only X shows no discount. The second most common cause is another discount already applied, since discounts do not combine by default.
No. This is the documented behaviour, not a bug. The shopper must add the Y product themselves for the discount to have a line to apply to. Inserting it automatically requires an app that owns the cart surface.
Usually a combination conflict or an eligibility rule that is evaluated at checkout — customer segment, market, or shipping-class interaction. Always test all the way through to the checkout page rather than stopping at the cart.
Only if both are explicitly marked as combinable with the other's class. Shopify separates product, order, and shipping discounts, and the combination settings default to off on each discount you create.
Yes, Shopify caps the number of simultaneously active automatic discounts. If you have accumulated old ones, a newly scheduled discount may not actually be active. Deactivate anything you are not running and re-check.
Because you are testing logged in, in a browser with a warm cart, from your own market. Test in a fresh incognito window, logged out, with an empty cart, from the market the customer is in.
Not necessarily. Automatic discounts configured for the online store may not apply to POS sales, draft orders, or subscription contracts. If the discount works on the storefront only, check the sales-channel scope.