A free gift with purchase is one of the oldest and best-behaved promotions in retail. It lifts the average order, it clears slow stock, it turns a maybe into a checkout, and it makes the customer feel looked after instead of discounted at. So you set one up: spend seventy-five dollars and a travel-size version of your best seller comes free. You write the banner, you set the threshold, and you wait for it to work. Then the first orders come in at eighty and ninety dollars with no gift attached, and a day later the emails start: I spent over seventy-five, where is my free item. What went wrong is not your banner. It is that Shopify never put the gift in the cart, because putting an item in a cart is the one thing a Shopify discount cannot do.
This is the quiet reality of running any gift-with-purchase offer on Shopify, and the merchant communities are full of the same question asked a dozen ways. How do I get the free item to add itself when someone crosses the threshold. Why does my Buy X Get Y not show the gift in the cart. Can Shopify give a free gift when a customer spends over an amount on anything. The answers underneath are always some shape of not natively, use an app, or edit the theme. The merchant is not asking for anything exotic. They want the obvious thing that every promotion depends on: the customer earns the gift, so the gift appears, free, without the customer having to know it exists and go find it.
A discount can make the gift free. It cannot make the gift show up. So the promotion you advertised only works for the customers who already knew about it and went looking, which is nearly the opposite of the point.
What Shopify does and does not do about free gifts
Give Shopify credit for the part it does, because it is real and it is where the confusion starts. Shopify has a native Buy X Get Y discount, and it genuinely handles one version of a gift: buy this specific product, or something from this collection, and get this other item free or at a percentage off. If your offer is buy any two tees, get the third free, and all three are in the cart, Buy X Get Y prices the cheapest one to zero cleanly. For a fixed, product-specific bundle, it works, and it is worth using.
The trouble is that most gift-with-purchase offers are not shaped like that, and the native discount runs into three walls the moment they are. First, it only ever reduces a price, it never adds the item. Buy X Get Y discounts the gift if the gift is already in the cart, so if the customer has not added it themselves there is nothing for the discount to touch and nothing appears. The platform will happily make a product free and still leave it entirely to the shopper to know about it, find it, and put it in the bag. Second, there is no store-wide cart-value trigger. Buy X Get Y fires on the presence of particular products or collections, not on a total spent across anything, so the most common offer of all, spend one hundred dollars on whatever you like and get a free gift, is not something the native rule can express. Third, it supports only one tier per discount and will not stack: you cannot natively say spend seventy-five for the small gift and one-fifty for the big one in a single offer, and because Shopify applies only the larger discount when two would land on the same item, an existing sale can silently swallow the gift.
The gift Shopify shows on the banner but never puts in the cart
The heart of a gift-with-purchase offer is a single move Shopify does not make: watch the cart, and the instant it earns the gift, place the gift in it, free, so the customer sees it there without lifting a finger. That is what makes the promotion feel like a promotion. Everything Shopify gives you stops one step short of it. The discount can zero the price, but the adding is on the customer. So the merchant, or their theme, becomes the thing that puts the item in the cart, and that is exactly the work that is fiddly to build and easy to break. It is the same shape of gap as the minimum order Shopify will not enforce: the platform can describe a rule about the cart but has no reliable native hook to act on the cart on every path a customer takes to checkout.
And that phrase, every path, is where the usual fix quietly fails. The common workaround is code on the cart page that adds the gift when the subtotal crosses the line. But a modern Shopify store has many doors into checkout that never touch the cart page: the Shop Pay, Apple Pay, and Google Pay wallet buttons that jump straight from the product page, a saved cart link, a buy-it-now button, a checkout permalink shared in an email. A gift that is added by cart-page code is simply absent on all of those. Worse, the cart is not a one-way street. A customer who earned the gift can remove the qualifying item, or change their mind and drop below the threshold, and now the gift should come back out. Cart-page code that only ever adds is how a shopper walks away with a free item on a forty-dollar order, and how your margin leaks one gift at a time.
Why the usual workarounds don't hold
Faced with a platform that can price a gift but will not place one, merchants reach for a handful of moves, and each one gives back something you did not want to lose.
"I will use Buy X Get Y." The right tool for a fixed, product-specific bundle, and the wrong shape for most gift offers. It cannot trigger on a cart value across the whole store, it holds only one tier, it loses to a larger discount on the same item, and above all it never adds the gift, so unless the customer already put the item in the cart there is nothing to discount. You have automated the pricing of a gift the customer still has to find on their own.
"I will add cart-page code." The classic fix, and the one that leaks. A script that adds the gift when the subtotal crosses the threshold works on the cart page and is invisible on every other path into checkout, so the wallet buttons, the buy-it-now flow, and the shared checkout link all skip it, the same blind spot that undoes a cart-page minimum. It also breaks on the next theme update, and it rarely handles the reverse case, so it happily leaves a gift on a cart that has fallen back under the line.
"I will build a Flow." Reasonable instinct, wrong moment. Shopify Flow reacts to an order after it is placed, so it can tag an order that qualified or notify you, but it runs too late to do the one thing that matters, which is to put the gift in the cart before the customer pays. By the time Flow sees the order, the checkout is already done and the gift is already missing. Flow can tell you the offer should have fired. It cannot make it fire.
"I will install a free-gift app." Often the right call, and still a fixed rulebook bolted to your store. The good ones do add the gift and can watch a cart value, which is real progress and proof the native gap exists. But an app applies the rules you set in advance the same way to every cart: it does not notice that the gift is about to sell out and should fall back to another, that a shopper is gaming the offer to collect three gifts on one order, that a returned order kept its free item, or that this cart already has a bigger promotion running and stacking the gift would give away too much. It adds. It does not judge.
What the automation actually has to do
The real job is not "make the gift free." It is "watch each cart, and the moment it earns a gift, put the right gift in it free, on whatever path this customer takes to checkout, take it back out if the cart no longer qualifies, upgrade it if they reach a higher tier, never gift something you cannot ship, and pull in a human only for the calls that are genuinely judgement." That is a read, a decision, an action on the live cart, and a set of corrections as the cart moves. As a Dugong playbook, in plain prose, it reads like this:
# trigger
On a cart changing
# steps
1. Read the cart: subtotal after discounts, the items
in it, and who the customer is
2. Decide the gift from your rules: the threshold
crossed, the tier reached, the segment, any exclusions
3. Add the gift and price it to zero, so the customer
never has to find it or pay for it
4. Hold on every path in: cart page, wallet buttons,
saved links, and checkout permalinks
5. Swap or remove the gift when the cart drops, upgrades
a tier, or loses the qualifying item
6. Honor stock and tell the customer what they earned
and how far to the next tier
7. Hold a near-empty gift, a gamed cart, a kept-gift
return, or a risky stack for a human
Seven lines. The compiler fills in the rest: reading the subtotal after other discounts rather than before, choosing among several gifts and tiers instead of one flat offer, adding the item on the cart page and on the wallet-button path that never touches it, taking the gift back out the instant the cart falls under the line, swapping to the next gift when the first runs low, and showing the customer both what they earned and how little more they need to reach the next reward. The merchant never wrote a line of theme code or reconciled a wallet-button edge case. They described how a careful promotions manager would run the offer, and let the compiler run it on every cart, in real time.
Why this is a compiler problem, not an app problem
There are capable free-gift and BOGO apps on the Shopify App Store, and a store running gift offers should look at one. But the thing that makes an automatic gift safe is not one more rules table. It is judgement about each specific cart: is the gift in stock enough to keep offering, is this customer collecting gifts across split orders, does this cart already carry a promotion that the gift should not stack on, did a partial refund just pull the order under the line, and is the gift landing on the wallet-button path as well as the cart page. Those answers change per cart, per customer, and per hour of a sale, which is exactly what a fixed rulebook handles badly and a person cannot watch across every live cart at once. It is the same reason running a sale by rule resists a single setting: the right call lives in the specifics, not in one threshold.
A natural-language compiler fits because a gift-with-purchase offer was never a single action. It is a read of the cart, a decision about which gift and tier apply, an action on the live cart on whatever path the customer took, and a stream of corrections as the cart changes under it. You can describe the whole behavior in a paragraph. You could never keep up with it by hand across every cart, every checkout path, and every change of mind. It sits in the same family as the repeat customer your store treats like a stranger, where the right reward depends on reading who the customer actually is, and the abandoned cart that gets one email, where the demand you already paid to create is won or lost in the details of the follow-through.
The workflow worth building this week
If you run any free-gift, gift-with-purchase, or spend-and-get offer, and you have ever watched orders come in above the threshold with no gift attached, or answered a where-is-my-free-item email, this is the automation to set up now, because a gift offer is a lever on both your average order and your conversion, and a broken one quietly works against both. It pairs naturally with the promotion work we have written about, like the sale you have to start by hand, since a gift usually rides alongside a sale and the two have to agree on what stacks, and the minimum order Shopify will not enforce, which is the same act-on-the-live-cart-on-every-path problem pointed the other way, and it feeds the same flywheel as the Shopify automations no one builds, where the work that compounds is the part merchants never get to.
Describe it the way you would brief a careful promotions manager: watch every cart, and the moment it earns a gift, put the right one in free on whatever path the customer is using, take it back out if they drop below the line, move them up a tier if they cross the next one, never offer a gift I cannot ship, and bring me anything where a gift is about to sell out, a cart is gaming the offer, or a refund would leave someone holding a free item they no longer earned. That is the whole brief. The compiler does the reading, the deciding, the adding, and the corrections, on every cart, in real time. Your customers see the gift they were promised sitting in the bag, and your margin stops leaking one missing or mistaken gift at a time.
If you are a Shopify merchant who has built something that adds the right gift on every checkout
path and pulls it back out cleanly when a cart no longer qualifies, or you have a story about a
gift promotion that leaked more than it earned, the inbox is open:
field-notes@dugong.live. We are collecting case studies for the next issue.