I wanted to share this in case it saves another Shopify merchant some time.
I was setting up a free gift threshold in UpCart. The goal was simple: when the cart reached $100, UpCart would automatically add a Mystery Gift.
The problem: UpCart adds the product to the cart, but it does not make the product free. Per UpCart’s documentation, the price has to be handled in Shopify.
At first, I tried using a Shopify Buy X, Get Y automatic discount to make the gift free. This created a loop:
- Cart reached the UpCart reward threshold.
- UpCart added the gift product.
- Shopify automatic discount made the gift free.
- Cart subtotal recalculated.
- UpCart no longer saw the cart as qualifying.
- UpCart removed the gift.
- The discount disappeared.
- UpCart added the gift again.
So the gift kept adding and removing itself from the cart.
Resolution — the stable fix:
- Duplicate the gift product in Shopify.
- Set the duplicate product price to $0.00.
- Set the product to Active and publish it to the Online Store channel only.
- Use that $0 product as the UpCart reward product.
- Disable/remove the Shopify automatic discount for the gift.
- Set Shopify’s
seo.hiddenmetafield on the $0 gift product so it does not appear in SEO/search. - Make sure the metafield is active for the relevant access/options, including API, Analytics, and Smart Collections, so the product is not exposed in storefront collections.
- If using Shopify’s default “All Products” collection, be aware that the
seo.hiddenmetafield does not necessarily remove the product from that default collection. I had to replace/adjust All Products as a smart collection so the free gift product would not appear publicly. - I created a new smart collection titled “All Products” and changed the URL handle to
/collections/all.
After switching to the duplicate $0 product, UpCart could add the reward at the threshold without triggering the Shopify discount/subtotal loop.
Hopefully this helps someone else setting up UpCart free gift rewards. Before finding this solution, I experienced similar behavior while testing other cart apps as well. In my case, the issue was not the app itself; it was the setup.
I am grateful for UpCart because their documentation got me 90% of the way there, but the seo.hidden metafield and the All Products smart collection pieces were a self-discovery process.