Skip to content

Shopify Dude Fix

How to Stop Shopify Sale Pricing From Double-Discounting Recharge Subscriptions

How to keep one-time Shopify sale pricing from also discounting Recharge subscription lines by separating merchandise eligibility from purchase type.

Quick answer

If a custom Shopify sale is meant for one-time purchases only, exclude subscription cart lines from the discount logic. Recharge subscriptions use Shopify selling plans, so the important signal is not simply the product or variant ID; it is whether the cart line is being purchased with a selling plan.

Then make the storefront use the same rule. If the subscription selector shows one price while the Discount Function quietly applies another discount at checkout, the customer can still end up with confusing or unintended pricing.

On this page

Why the double discount happens

A subscription product can have two pricing systems in play at once. The selling plan can already adjust the product price, and a separate automatic or Function-based sale can apply another reduction.

If your custom sale logic only asks “is this the eligible variant?” it can treat the subscription line exactly like the one-time line. That is how a one-time promotion becomes an accidental subscription promotion.

The product is not the purchase type

This distinction matters: the same Shopify variant can be bought as a one-time purchase or through a selling plan. Checking product ID, variant ID, tag, collection, or metafield tells you what the merchandise is. It does not by itself tell you how the buyer is purchasing it.

For subscription-aware pricing, inspect the selling-plan context available on the cart line and make eligibility depend on it.

A safer rule

For a one-time-only custom sale, the pricing decision should be roughly:

  1. Is the custom sale active for this merchandise?
  2. Is there a valid sale amount lower than the current eligible price?
  3. Is this cart line a one-time purchase rather than a selling-plan purchase?
  4. If yes, apply the custom discount.
  5. If not, leave the subscription line to its selling-plan pricing.

The exact Function input and output depends on the Discount Function API version you are using, but the business rule should stay this simple.

The theme has to make the same distinction

Fixing checkout alone is not enough. Subscription widgets commonly switch the visible price when the buyer chooses Subscribe & Save versus one-time purchase. If your theme replaces the normal one-time price with a custom sale price, make sure that replacement only happens for the one-time state.

Otherwise the storefront can advertise the sale against the subscription option even though the backend correctly excludes it.

Do not assume Recharge is the discount engine

Recharge may control the subscription purchase experience and selling plan, while Shopify still controls other discount behavior. When debugging a double discount, identify each pricing layer instead of treating “Recharge price” as one thing.

Ask which system is responsible for the subscription adjustment, which system is responsible for the promotion, and which layer is only rendering a number.

Mixed carts are where bugs become obvious

A cart containing a one-time sale item, a subscription item, and a normal item is a much better test than a cart containing one product. It proves that eligibility is being evaluated per line instead of globally.

If your Function returns a broad discount target without filtering lines carefully, the cart can look fine in a simple test and fail as soon as purchase types are mixed.

What to check when the math looks wrong

  • Whether the line has a selling plan attached.
  • Whether the custom sale logic targets all eligible variants or only eligible purchase types.
  • Whether Recharge is already applying a selling-plan adjustment.
  • Whether another automatic discount is also combining.
  • Whether the theme is displaying a custom price that checkout never applies.
  • Whether a quick-add or cart app is losing the selected selling plan.

Common misunderstanding

A subscription product is not automatically a subscription cart line. The same variant can be purchased once or with a selling plan. Discount logic that only identifies the merchandise cannot reliably identify the purchase type.

How to test this

  • Add the product as a one-time purchase and verify the custom sale applies.
  • Add the same variant as a subscription and verify the custom sale does not apply.
  • Put both purchase types in the same cart if the storefront allows it.
  • Add a non-sale product to make sure unrelated lines are untouched.
  • Test the cart drawer and full cart as well as checkout.
  • Test any automatic discounts that are allowed to combine.
  • Confirm the final order line prices match the purchase option the customer selected.

Sources and further reading