Everything at $20: what happens to items already under $20
How a fixed-price or amount-off sale treats Shopify variants that are already cheaper than the rule: blocked, never raised, with the preview showing why.
By Beacon Wave Studio · · 8 min read
"Everything in the clearance collection, twenty dollars." It is one of the oldest promotions in retail and one of the easiest to say. It is also the one that trips up bulk price tools most often, because a collection called clearance rarely contains products that all cost more than twenty dollars. Some are at eighteen already. Some have variants at twelve. And a rule that says "set the price to 20" will, if nobody stops it, set the price of the twelve-dollar item to twenty and call it a sale.
This post is about how SafeSale handles the three rule types it offers, percentage off, amount off and fixed sale price, when the arithmetic produces something a sale should never produce: a higher price, a zero price, or no change at all. The behaviour is the same in both mechanisms, automatic discount and compare-at price rewrite, because it is decided in the preview before either one runs.
Three rule types, one engine
A SafeSale sale has one default rule and any number of per-variant overrides. The default rule is one of:
- Percentage off. The original price minus a percentage, computed in whole cents with half-up rounding. 20% off 19.99 is 15.99.
- Amount off. The original price minus a fixed amount in the store currency. 5.00 off 19.99 is 14.99.
- Fixed sale price. The price becomes the amount you typed, whatever it was before. The sale page labels this rule "Now" followed by the amount.
All three run against the original price captured in the sale's snapshot, never against whatever the variant happens to cost at the moment, which is what keeps a second sale from compounding on a first; that part is covered in running a bulk sale without compounding. The point for this post is that a percentage can never go above the original price, but the other two rules can, and a fixed amount off can also go below zero. The engine has to decide what to do about that, and it decides it per variant.
The three outcomes for a variant
For every variant in the target, the preview computes the sale price and compares it with the original. There are only three possibilities.
Lower. The normal case. The row shows the new price, the discount percentage, and in rewrite mode the compare-at that will be written (always the original price, so the strike-through is honest). If the percentage is above your confirmation threshold, 50% by default, the badge turns amber and you will have to type the sale's name before publishing. If it is above the hard cap, 90% by default, the row is blocked. Both limits are per store and live in Settings; the reasoning behind them is in pricing errors, cancelled orders and guardrails.
Equal. A fixed price of 20.00 on a variant that already costs 20.00. The row is marked "Price is unchanged" and is simply left out when the sale is applied: no discount line for it, no compare-at written, nothing to restore later. It is not an error, just a variant that happens to sit exactly on the rule.
Higher. A fixed price of 20.00 on a variant at 12.00, or an amount off that would somehow land above the original. The row is marked blocked with the note "Rule would raise the price from 12.00 to 20.00", the sale price column reads "unchanged", and a banner above the table counts how many variants are in that state. A sale is a reduction. SafeSale will not write an increase, and there is no setting to make it.
Amount off on cheap items
Fixed prices produce the "higher" case. Amount-off rules produce a different problem: the result goes negative. Take 25.00 off a 20.00 item and the arithmetic says -5.00.
The engine clamps the result to 0.00 and attaches the warning "Sale price is 0.00". Then it computes the discount percentage, which is 100%, and 100% is above the hard cap, so the variant is blocked. The item keeps its price. You do not need to find these items yourself; they surface in the same banner and with the same badge as the price-raise case.
The interesting band is just above that. Take 25.00 off a 40.00 item and the result is 15.00, a 62.5% discount: allowed, but over the confirmation threshold, so the sale asks for its name to be typed. Take 25.00 off a 27.00 item and you are at 2.00 and 92.6%: blocked by the cap. An amount-off rule across a range of prices is a discount of a different depth on every item, and the preview is the only place that shows the spread. Read the Off column top to bottom before confirming; a flat amount that looks modest on your hero product can be savage on accessories.
What blocked means once the sale is live
Blocked is not a preview-only label. When you confirm the sale, SafeSale records a per-variant rule of 0% for every blocked variant. That rule travels with the sale into whichever mechanism you chose:
- In automatic discount mode, the Shopify Function that computes the discount at checkout reads the variant rules first, sees 0% for that variant and leaves the line alone, even though the product is inside the targeted collection.
- In price rewrite mode, the apply job skips the variant: no new price, no compare-at, nothing to restore later. Shopify's compare-at price on that variant stays exactly as it was.
The practical effect is that a blocked variant sits inside a sale collection at its everyday price, with no badge from a theme that keys badges off compare-at, and no reduction in the cart. Whether that is acceptable depends on the promotion. For "everything $20" it usually is: the item is already under twenty, the message is still true. For "$25 off everything" it is not, because a shopper who adds the 20.00 item expects something to happen. In that case the fix is the per-variant override, below.
Fixing the rows you do not like
Every row in the preview has a Rule column, and clicking it opens an override editor for that variant. The override can be any of the three rule types, with its own rounding, and it replaces the default rule for that variant only. This is the same mechanism used to protect a brand's price floor in a sale on one vendor with MAP pricing, and it is the right tool here too:
- A 12.00 item in an "everything $20" sale: leave it blocked, or give it a 10 override so it gets a reduction of its own. Either is defensible; blocked is the default because it changes nothing.
- A 20.00 item in a "$25 off" sale: give it a fixed price of 5.00 or a percentage of 50%, so it participates without hitting the cap.
- A whole tier of cheap accessories: if there are dozens, do not fix them one by one. Narrow the sale target so the tier is excluded, then run a second sale with a percentage rule for the accessories. SafeSale will not let one variant be in two sales at once, so the two sales cannot overlap or compound.
Overrides are stored with the sale, so if you duplicate the promotion next quarter the exceptions come along. They also survive edits to the default rule: change the headline fixed price from 20 to 18 and the preview recomputes every non-overridden row, re-blocks whatever is now under 18, and leaves your overrides as they were.
Rounding and fixed prices do not mix
The rounding options, end in .99, end in .95, whole number, run after the rule. They are built for percentages, where 20% off 24.50 lands on 19.60 and you would rather show 19.59 or 19.99. On a fixed price they are mostly surprising: "Now 20.00" with .99 rounding becomes 19.99, because the rounding step is not allowed to go above the unrounded price and 20.99 would. Whole-number rounding on 19.99 goes to 20.00, which is up; the rounded result is then checked against the original price like any other, so it is blocked only if that step pushes it above the original. If you typed a fixed price, you meant that price; leave rounding on None. The full rounding rules are in sale prices ending in .99.
When nothing would change
Occasionally a rule blocks or leaves unchanged every single variant. A fixed price of 30.00 on a collection whose most expensive item is 28.00 does it; so does a 0% test rule. SafeSale refuses to publish that sale with the message "This sale would not change any price". There is nothing to apply, so creating a Shopify discount or a set of snapshot rows would only leave clutter behind, and clutter is exactly what sale tools are supposed to avoid, as how sale apps leave wrong prices behind goes into. Fix the rule or the target and preview again.
One more safeguard sits underneath all of this. The preview is fingerprinted against the prices it saw. If a colleague edits a price between your preview and your confirm, the confirm is rejected with "Prices changed since you previewed this sale" and you look at the new preview before anything is published. A variant that was blocked at 12.00 and has since been repriced to 25.00 would, on the fresh preview, be an ordinary 20% reduction, and you get to see that rather than discover it.
A short checklist for flat-price and flat-amount sales
- Preview, then read the blocked banner before anything else. The count tells you how much of the target the rule does not fit.
- Read the Off column. Amount-off rules hide their deepest discounts on the cheapest items.
- Decide per blocked row: leave it, override it, or move it to a second sale with a percentage rule.
- Keep rounding on None for fixed prices.
- If the sale needs a typed confirmation, treat that as a prompt to scan the table once more, not as a formality.
The promise of a flat price is that it is simple to say. SafeSale keeps the storefront side of that promise, every item at twenty or less, and shows you the exceptions in a table before shoppers see them in a cart. Start a sale on SafeSale and look at the preview; the blocked rows are the ones to think about.
Frequently asked questions
Will a fixed-price sale raise the price of items that are already cheaper?
Not in SafeSale. The preview computes the sale price for every variant from its original price, and any variant whose rule result is higher than that price is marked blocked. Blocked variants keep their current price in both the automatic discount and the price rewrite mechanism; the sale is published around them, not over them.
What does a $25-off rule do to a $20 item?
The result goes below zero, SafeSale clamps it to 0.00, flags it as rounded to zero, and because 0.00 is a 100% discount the variant is blocked by the hard cap (90% by default). The item keeps its price. Items between the rule amount and the cap, say a $40 item at $25 off, are allowed but exceed the 50% confirmation threshold, so you type the sale name before publishing.
Can I set a different fixed price for a few variants in the same sale?
Yes. Every row in the preview table can carry its own rule: a different fixed price, a different percentage, an amount off, or 0% to leave it alone. Overrides are stored per variant with the sale and apply in both mechanisms, so one sale can say 'everything $20, these six at $15, this one unchanged'.
Why does the preview say the sale would not change any price?
Every variant in the target was either blocked or already at the rule's price. SafeSale refuses to publish a sale that changes nothing rather than creating an empty discount or writing identical prices. Widen the target, lower the fixed price, or switch to a percentage rule.