Bulk editing guides

How to round Shopify prices to .99 in bulk

Updated August 2026

Charm pricing is the oldest trick in retail: price something at $19.99 instead of $20 and it tends to outsell the round number, because shoppers read the leftmost digit first, so $19.99 registers as “nineteen dollars and change” rather than “basically twenty.” Shopify has no setting that rounds your whole catalog to that ending in one pass. If you are still hand-typing four hundred prices to make each one land on .99, this guide covers the ways to do it in bulk instead, the Shopify setting that looks like the answer but isn’t, and how to confirm the rounding actually applied before you walk away from it.

Short on time? SureEdit rounds prices to .99, .95, or any ending you choose across your filtered products, with a before → after preview and verification of every write. Free plan, up to 50 products per edit.

What charm pricing is, and why $19.99 reads differently than $20

The mechanism is called the left-digit effect: people process the first digit of a price faster and more heavily than the digits after it, so $19.99 gets mentally filed with the “$19s” rather than the “$20s.” That’s why .99 (and to a lesser extent .95 and .97) endings show up across nearly every retail category, from grocery shelf tags to online checkout pages. It is not universal: some premium and luxury positioning deliberately uses round numbers, because a clean $200 can read as confident rather than bargain-hunting. The right ending is a positioning choice, but once you’ve made it, the job is applying it consistently across the catalog, not just on the products you happen to edit by hand.

Shopify has no built-in “round everything to .99” tool

Two Shopify features get mistaken for this, and neither one is it.

Merchants who go looking for a bulk “round to .99” option in Shopify’s admin generally don’t find one, which is why the workaround is almost always a spreadsheet or an app.

Three ways to round prices in bulk

Manual entry in the native grid works for a handful of products: open Bulk edit, do the arithmetic yourself, and type each new price. It does not scale past a page or two before the math errors start.

CSV export, formula, re-import. Export your products, then in the spreadsheet write a formula against the Variant Price column, something like =CEILING(price,1)-0.01 to round up to the next whole dollar and land on .99, adjusted if you want .95 or .97 instead. Paste the results back over the price column and re-import with “overwrite existing products” enabled. It works, but a formula error propagates to every row silently, a spreadsheet app that swaps commas and decimal points for your locale can mangle the values, and there is no preview before the import commits. Our guide to bulk editing prices in Shopify covers the tradeoffs of the CSV route in more depth.

A bulk editor app. The better ones offer round-to-ending as a named rule: filter your products, pick an ending, preview every before → after price, and run the change as one operation instead of a manual grid or a spreadsheet round-trip.

Choosing an ending: .99 vs .95 vs .97

.99 is the default for most categories: it is the most recognized charm ending and reads as “standard pricing” rather than a special deal. .95 is common in mid-market apparel and in currencies or regions where five-cent increments feel more natural. .97 shows up where a store wants to stand slightly apart from the sea of .99 prices around it, without landing on a round number. None of the three is objectively best; what matters more is consistency. A catalog with $24.99 next to $25.00 next to $24.95 looks like nobody checked, not like a pricing strategy, and that inconsistency is exactly what a bulk rounding pass exists to fix.

Rounding after a percentage-off sale without breaking your endings

A straight percentage-off calculation almost never lands back on a charm ending. 20% off $49.99 is $39.992, which different systems round differently, and the result rarely matches the ending you use everywhere else. The safe order is two verified passes on the same filtered products rather than one blended calculation: run the percentage adjustment first and confirm it landed, then run a round-to-ending pass on the resulting prices so the sale prices land back on .99 (or whichever ending you use) instead of a decimal your theme has to reformat on the fly. Doing it as two separate, verified steps also means you can undo the rounding pass alone if you picked the wrong ending, without touching the percentage change underneath it.

Verifying the rounded prices actually landed

A bulk price write is still hundreds of individual API calls, and not all of them necessarily succeed: rate limits, a locked variant, or a market-specific price override can cause a handful to fail while the rest go through fine. A tool that reports “done” without checking back can leave a slice of your catalog on its old, unrounded price, invisible until a customer or a pricing report catches it. The fix is re-reading each price from Shopify after the write and comparing it to the ending you asked for, with an itemized list of anything that didn’t land so you can retry just those instead of re-running the whole batch.

Undoing a rounding pass if you picked the wrong ending

Rounding is a one-way calculation unless something recorded what came before it. If you round to .99 today and decide .95 fits better tomorrow, rounding the .99 values a second time compounds the error rather than fixing it: you need the prices from before the first rounding pass, not the ones it produced. That means the originals have to be journaled at the moment of the first edit, not reconstructed afterward from memory or an old export.

Doing this with SureEdit

SureEdit’s price rule includes round to ending (.99, .95, or a custom ending) alongside setting a fixed price and adjusting by a fixed amount or a percentage. Filter to the exact products, preview every before → after price as a dry run, then run the edit: each write is re-read from Shopify and the run only reports verified once every price is confirmed, with failures itemized and one-click to retry. Original prices are journaled before the change, so if an ending turns out to be wrong, undo restores the exact prior values, not a recalculation of them. Rounding is free up to 50 products per edit; compare-at price is a separate set-or-clear edit, not part of the rounding rule.

WRITEREADMATCH ✓

Run this edit with proof, not hope

SureEdit rounds prices to .99, .95, or any ending you choose, previews every before → after value, and verifies each write against Shopify: free up to 50 products per edit.

Install free on Shopify

FAQ

Does Shopify have a built-in way to round all prices to .99?
No. Shopify’s Markets rounding setting (Settings → Markets) only rounds currency-converted prices for a specific market’s display, not your base catalog, and it isn’t a per-product ending you choose. Rounding your whole catalog to .99, or any other ending, needs manual entry, a CSV formula, or a bulk editor app.

Will rounding to .99 change my compare-at price too?
Not unless you set it to. SureEdit’s round-to-ending rule applies to the selling price; compare-at price is a separate bulk edit (set a value or clear it). If you want a compare-at price that also ends in .99, set that directly, in the same edit session or a separate one.

Can I round prices after running a percentage-off sale?
Yes, as a second pass. Apply the percentage adjustment first and verify it landed, then run SureEdit’s round-to-ending rule on the same filtered products so the sale prices land on a clean .99 instead of a decimal your theme has to reformat. Each pass is verified and journaled on its own, so either one can be undone without touching the other.