Express checkout: why gifts don't appear
When a customer clicks Buy Now or Shop Pay from a product page, Shopify creates a checkout directly without ever rendering the cart page. Valotrix Cart Rewards watches cart changes on the cart page and the cart drawer - but express checkout bypasses both.
This is a Shopify-platform constraint, not a Valotrix Cart Rewards bug. Every gift-with-purchase app on the platform runs into the same thing.
What happens at express-checkout time
The customer goes from product page → checkout. Valotrix Cart Rewards never sees a cart-page or cart-drawer change, so the engine doesn't add the gift. The discount that would apply at checkout has nothing to apply to.
Workarounds (in order of how often they help)
Option 1 - Turn on "Include express checkout" in Settings. Open Settings → Gift Delivery → Include express checkout. On by default. When on, Valotrix Cart Rewards intercepts express-checkout clicks and tries to inject the gift before the customer leaves the product page. It catches the majority of express orders. If you've turned it off in the past, switch it back on - this is the built-in fix.
Option 2 - Disable Shopify's dynamic checkout buttons for the products that trigger campaigns. In your theme's product-page settings, hide the dynamic checkout buttons on products that drive your campaigns. Customers route through the regular Add to cart → Cart page → Checkout flow, and the gift adds normally.
Option 3 - Accept the small share that slip through. Even with Option 1 on, a small slice of express-checkout sessions can still finish before the gift injects (depends on the customer's network speed and how the browser handles the checkout transition). For most stores express checkout is well under 10% of orders, and the gift-with-purchase lift on the standard flow more than makes up for it. Don't over-engineer.