Blog/Operations
OperationsSeptember 29, 2026·11 min read

Shopify shipping rates explained, and why they drift

A shipping rate nobody has touched in months can still start charging the wrong amount. The rate did not change. Something it reads from did.

AY
Anand Yadav · Founder, ReccordSOP
·Last reviewed October 2, 2026

The short answer

A Shopify shipping rate is either a price you set or a price a carrier calculates. Either way, the number at checkout depends on values stored somewhere else: product weights, your default package weight, box sizes and the carrier's own pricing rules. Any of those can change while the rate itself sits untouched.

That is why a rate can be right in March and wrong in October without anyone editing it. The fix is not a better rate. It is a short record of which stored value feeds which rate, who is allowed to change it, and when someone last checked.

How Shopify rates are built

Shopify rates sit inside three layers, and most confusion about shipping comes from people looking at different layers.

  1. Shipping profiles. Every store has a general profile that covers all products. You can add up to 99 custom profiles when some products need different rates, such as fragile items that cost more to ship.
  2. Shipping zones. Inside each profile, zones group countries or regions. Within one group of locations in a profile, a country can only be in one zone.
  3. Shipping rates. Inside each zone, you add the rates customers choose from at checkout.

Shopify offers four rate types:

Rate typeHow the price is setWhat it depends on
FlatOne price you set for all ordersNothing except your own number
Order amountDifferent prices for different order valuesThe order total
WeightDifferent prices for different order weightsProduct weights, plus your default package weight
Carrier or app calculatedThe carrier works out the priceWeight, box size, destination and the carrier's own formula

So when someone says "the rate is wrong", the first question is which rate, in which zone, in which profile. Two people can both be looking at the shipping settings and still disagree about what a customer was charged.

The inputs that change the price

Every rate type except flat reads a value stored somewhere else. That is where drift starts.

Weight rates read product weights, and Shopify is blunt about the consequence: without accurate weight information, shipping rates don't calculate correctly at checkout. On top of that, your store default package weight is added to each product. So the weight a rate reads is never just what someone typed on the product page.

Carrier-calculated rates read even more. Shopify lists the factors carriers use: shipping origin, destination, weight, value, box dimensions, dimensional weight and delivery speed. Change your box and the price changes, even though no shipping setting moved.

Then the carriers change their own formulas. Two examples from this year:

  • USPS changed the number it uses to turn a box's size into a billable weight, from 166 to 139, across all domestic services from 12 July 2026. A smaller divisor means a higher billable weight, so the same box started costing more to ship overnight.
  • UPS updated its Rate and Service Guides effective 7 September 2026.

Neither change touched a single setting in your Shopify admin. Both changed what shipping costs you. If you charge customers a flat or weight-based rate, that gap comes straight out of your margin until someone notices.

Shipping cost reduction SOP for DTC brands

The cost side of the same problem: cost per order, right-sized packaging, invoice audits and negotiating your rates.

The rate-name trap

This one catches stores with more than one shipping profile, and it comes straight from Shopify's own help pages.

When an order contains products from two profiles, Shopify adds together the rates that have the same name. Standard plus Standard, Express plus Express. The customer still chooses between them.

But if the names differ between profiles, Shopify adds together only the cheapest options and shows a single line called "Shipping". The choice disappears.

A rename can remove your express option

Rename "Express" to "Express (1-2 days)" in one profile, leave the other alone, and customers buying from both profiles can no longer pick express at all. Nothing looks broken in the admin. Keep rate names identical across every profile, and treat a rename as a change that needs checking.

Try it on one of your own procedures.

Record a process once, AI writes the structured SOP. 3 free SOPs, no credit card.

Start for free →

Why free shipping breaks first

Free shipping usually gets edited in a hurry before a sale, which is exactly when mistakes creep in. How it behaves depends on whether the rate has conditions.

  • On a rate with no conditions, free shipping applies to every order the rate covers.
  • On an order-amount or weight-based rate, free shipping only applies when the order falls inside a band you have set up.

Shopify's instruction is to make sure your bands cover the full range of order totals or weights. A gap between bands is silent. An order that falls in the gap simply does not get the rate you intended.

Weight bands make it worse. A product saved with no weight lands in the lightest band, whatever it really weighs. Nothing in the admin warns you.

And a free shipping discount code is a separate thing again. Customers enter it at checkout, and it waives what they pay without changing your rate settings at all. Track promotions and rates separately, or nobody will know which one caused a strange checkout.

Three checks for a stale setup

All three use tools you already have.

First, place test orders. Shopify recommends a test order to see the rates customers can actually choose from. Customers see no rates until they enter an address, they only see rates that apply to their order, and the cheapest is selected by default. What failure looks like: a rate you did not expect, a region told no shipping is available, or a heavy product landing in your lightest band.

Second, compare what you charged with what the label cost, order by order, for a month. A loss on one zone or one weight band points at a single rate. A loss everywhere points at your pricing, not a setting.

Third, check you are showing the right carrier prices. Retail rates are what you would pay at a post office counter. Commercial rates, available through shipping platforms, are usually lower. If your checkout shows retail rates, you are probably overcharging customers, and possibly losing sales to it. Showing rates from your own carrier accounts at checkout also depends on your Shopify plan or an extra monthly fee, so confirm what your plan actually includes.

Shopify test order QA after every theme edit

How to run the test orders above safely on a live store, and what to check in admin once they land.

The rate record

Keep one row per rate. Not per profile. The rate is the thing that charges customers.

FieldExample
Profile and zoneGeneral profile, US lower 48
Name shown at checkoutStandard (3 to 5 days). Must match across profiles
Rate typeWeight
What it depends onProduct weight plus default package weight
Who can change itOne named person, plus who signs off
The check that proves it rightA test order with the heaviest product in this zone
Last checked, and by whomA date and a name

The "what it depends on" column is what makes this useful to someone in their second week. It shows that a weight rate is a consequence of a product field, not a price somebody chose. When the rate goes wrong, that column tells them where to look.

ShipStation carrier rate setup SOP

The label side of the same setup: how the rates behind what you pay for postage are configured.

What a record cannot do

Three honest limits, because a record you over-trust is worse than no record.

It describes what should happen, not what just happened. The record says the Standard rate reads product weight. It cannot tell you that yesterday someone saved a product with no weight.

It goes stale on dates you do not control. Carrier changes like the USPS one above move your costs without touching your settings. What lasts is the mapping of which input feeds which rate. The dollar figures do not.

It cannot fix a rate that was wrong from day one. A flat rate set below your label cost, perfectly documented, is a perfectly documented loss. Only the label-cost comparison catches that.

SOP drift: why your documentation is lying to you

Why a record written in spring quietly stops matching the store by autumn, and how to catch it early.

This is where ReccordSOP fits. Record the rate check once, and it becomes a step-by-step procedure anyone on the team can follow. Record it again later and ReccordSOP compares the new run with the documented one and shows what changed, instead of overwriting it. What it will not do is watch your rate settings or your carrier invoices. Catching a product with no weight still depends on someone running the check.

Start with four test orders: your lightest product and your heaviest, each in the two zones you sell to most. Write down what each one charged, compare it with the real label cost, and put a name and today's date next to each rate. Any rate that charges less than the label cost is the one to fix first.

Frequently asked questions

How are Shopify shipping rates calculated?

It depends on the rate type. A flat rate charges one price you set. An order-amount rate charges by order value, and a weight rate by the order's weight, which is the product weights plus your store default package weight added to each product. A carrier-calculated rate is priced by the carrier from details such as weight, box size, destination and delivery speed.

Why is Shopify charging the wrong shipping rate?

Usually because a value the rate reads has changed, not the rate itself. Common causes are a product saved without a weight, a changed default package weight, a new box size, a carrier changing its pricing formula, or rate names that differ between shipping profiles. Place a test order with the affected product to see which rate it lands in.

Why does a heavy product get the cheapest shipping rate?

Most often it has no weight saved. Shopify says rates do not calculate correctly without accurate weights, so a product with an empty weight field can fall into your lightest band. Check the product's weight, then run a test order to confirm the right rate appears.

Does a free shipping discount code change my shipping rates?

No. Customers enter it at checkout and it waives what they pay, but your rate settings stay exactly as they are. Keep promotions and rates as separate entries in any record, with separate owners.

How often should shipping rates be checked?

When something that feeds them changes rather than on a calendar: a new product or variant, a new box, a new fulfilment location, a renamed rate, a new promotion, or a carrier price change. Record the date and the name of whoever ran the last check.

Ready to record your first SOP?

3 free SOPs to start. No credit card required. See if drift detection keeps your docs honest.

Start for free
AY
Anand YadavFounder, ReccordSOP

I built ReccordSOP after watching too many DTC ops teams lose months to undocumented workflows. These SOPs are battle-tested with Shopify operators running $1M to $50M brands.

Last reviewed October 2, 2026

Related reading