Shopify apps · October 2026 · 3 min read

    Free gifts that vanished at Shop Pay, and the checkout extension that fixed it

    A free-gift offer that worked in the cart and silently failed for every buyer who used an express button. What caused it, and how a checkout UI extension closed the gap.

    A Buy X Get Y offer set up in the Shopify admin: the funnel name, the trigger product and the gifts it adds

    By Cristian Daron

    The offer looked healthy. Buyers added a water flosser, a free gift appeared in the cart, and the order went through. What nobody could see was every buyer who never opened the cart at all.

    Where the gift went missing

    The gifts were added by an auto-add-to-cart app, which does its work in the cart. Shop Pay and the other express buttons skip the cart and go straight to checkout. So a buyer who tapped Shop Pay on the product page bought into the offer and never received the gift. Nothing errored and nothing was logged. The leak was silent, which is the worst kind.

    Moving the logic to where every order passes

    The fix was to stop relying on the cart. I built a checkout UI extension, which runs inside Shopify checkout itself, so it sees the order however the buyer got there: the cart, Shop Pay, or any other express path.

    Each offer is an entry in the Shopify admin: a funnel name that matches the funnel in the auto-add app, so both tools describe the same offer, the products that trigger it, and the gifts it gives. When checkout loads, the extension checks the order against every offer and adds any gift that is missing. Gifts are tagged when they are added, so a gift can never count as the trigger for another gift.

    Quantities and subscriptions

    Not every offer is one gift per order. Quantities come from settings on each gift product: one gift per unit bought, a fixed multiple, or tiers such as two gifts for one bottle. Where a product is sold on a subscription plan, the gift is added on that plan too, so the order matches what the buyer chose.

    Holding payment until the gifts land

    Adding a gift takes a moment, and a buyer on an express path can reach the Pay button before it arrives. So the extension blocks payment while it is still checking or adding, and shows a short message naming the gift being added, which clears as soon as the order settles. Gifts are added one at a time and skipped when they are already there, so a gift is never doubled when the cart changes mid-check.

    What I would check on any store running gift offers

    Place a test order through every path a buyer can take, not just the cart: Shop Pay, the other express buttons, and a direct checkout link. If the gift logic lives in the cart, at least one of those paths will skip it. On this store the app went out per product line as the catalogue grew, so each new offer is a new entry in the admin rather than new code.

    Sources

    1. This site: the Buy X Get Y app case study