If you are working out how to set up shipping on Shopify, the order matters more than any single setting. Add locations first, then product weights, then shipping profiles, then zones, then rates, then labels, then test. Most stores do it backwards: they open the rates screen, type a number, and find out what’s wrong when a customer complains or a label costs more than the customer paid.
This piece is for operators running a store at $3M or more in revenue on Shopify Plus or a paid subscription platform, where a shipping error is repeated thousands of times a month. If you’re still deciding whether to launch, this is not written for you, and the Shopify shipping rates article is a lighter place to start.
The proprietary claim here is narrow. Every ranking page lists the same screens. What they skip is the dependency order, and the one step that quietly corrupts everything after it: product weights and profile assignment.
How to set up shipping on Shopify: what are the steps?
You set up shipping on Shopify in seven steps: locations, variant weights, profiles, zones, rates, packages and labels, then a test. Each step depends on the one before it. The table shows what each step needs as input, where you do it in the admin, and what breaks when it’s wrong.
| Step | Where | Needs first | What breaks if wrong |
|---|---|---|---|
| 1. Locations | Settings, Locations | Nothing | Orders route to the wrong warehouse, or none |
| 2. Variant weights | Each product variant | Nothing | Weight-based and carrier rates misquote or vanish |
| 3. Profiles | Settings, Shipping and delivery | Steps 1 and 2 | Wrong product charged the wrong rate |
| 4. Zones | Inside each profile | Step 3 | No options at checkout for a region |
| 5. Rates | Inside each zone | Steps 2 to 4 | Margin leaks or customers abandon |
| 6. Packages and labels | Shipping and delivery | Steps 1 and 2 | Label cost diverges from checkout price |
| 7. Test | Live checkout | Every earlier step | You find out from customers |
Take one thing from the table: steps 1 and 2 need nothing, and everything else needs them. That is why they come first even though the rates screen is the one everybody wants to open.
Add your locations and origin addresses
Open Settings, then Locations, and confirm every place that ships an order: warehouse, 3PL, retail store, a founder’s garage that still holds sample stock. Each needs a correct street address, because the origin address feeds carrier-calculated quotes and label purchasing. Then check that fulfilment is switched on for the location. A location with fulfilment off never receives orders.
Two mistakes recur. The first is an old address left in place after a move, which makes calculated rates quote from the wrong postcode. The second is a location that exists only for stock tracking and gets fulfilment switched on by accident. Orders then route to a place with no one packing.
If you use a 3PL, that location’s address is the origin, not your head office. The Shopify 3PL integration article covers how a warehouse connects and who owns the location record.
Enter a weight on every variant
Weight is set on each variant, not on the product, so a product with twelve sizes has twelve weight fields. Enter the packed weight where you can, meaning the product plus its own packaging, and pick the unit deliberately. Mixed units across a catalogue are one of the quiet ways a rate goes wrong, because a value of 2 means very different things in kilograms and pounds.
Do this before you touch a rate. Weight-based rates need it. Carrier-calculated rates need it. Labels use it to pre-fill the parcel. If it’s empty, the platform has nothing sensible to compute from, and what happens next depends on the rate type and your plan, so read Shopify’s documentation for your account rather than guessing.
What is the step most teams get wrong when they set up shipping on Shopify?
The step most teams get wrong is product weight and profile assignment, done before rates and never audited afterwards. Rates are visible, so people fix them. Weights and profile membership are buried in product records, so an error can sit there for months, producing rates that look plausible and are wrong.
Here is how it fails in practice. A team imports 900 products from a spreadsheet. The weight column had grams for one supplier and ounces for another, and the import treated both as the same unit. Nothing errors. Nothing looks odd in the admin. Then a weight-based rate charges a 200 g accessory as though it were a 2 kg item, and a heavy item ships at the light rate. Margin leaks quietly on one side and conversion drops on the other.
Profile assignment fails in a related way. New products land in the General profile by default. A heavy product added later, say a furniture range or a case of liquid, gets the standard rate and nobody notices until finance compares shipping revenue with carrier invoices.
An honest assessment: a spreadsheet audit beats another look at the admin. Export products, filter for blank or zero weights, sort by weight within each product type, and eyeball outliers. It takes an afternoon. The stores that skip it run on rates they’ve never verified.
How do shipping profiles work on Shopify?
A shipping profile is a group of products with its own origin locations, zones and rates. The General profile holds everything by default, and custom profiles hold products that need different treatment. Checkout builds the shipping options for a basket by combining the profiles its items belong to.
Group products into shipping profiles
Keep the General profile for the ordinary case and add a custom profile only when a group of products needs a genuinely different rate, a different origin, or a different set of countries. Typical candidates are oversized items, fragile goods, products fulfilled from a separate supplier, and items you can’t ship overseas.
Keep the count low. Every profile multiplies the settings you must maintain, and a basket that touches three profiles produces a combined rate that’s harder to predict. A store with five well-defined profiles is easier to run than one with twenty, each created to fix a single complaint.
Assign products deliberately. Bulk-select by product type or collection, rather than dragging one at a time, and write down the rule you used. When the next hire adds a product, they need to know which profile it belongs in and why. The deeper rule engine, including conditions that native profiles cannot express, is covered in advanced shipping rules on Shopify.
Define shipping zones for each profile
A zone is a set of countries or regions that share rates. Add the ones you actually fulfil to, and be strict. Listing a country you can’t deliver to sounds harmless, but it lets a customer pay for an order you then have to cancel.
Zones sit inside a profile, so a custom profile needs its own zones. This trips people up when they create a freight profile and forget that it has no zone for the customer’s region. Checkout then offers no method for that basket at all. If you sell internationally, the tax and duty side is a separate problem, and Shopify international shipping deals with it.
Which shipping rate type should you use?
Pick the simplest rate type that reflects what a parcel costs you. Flat rates suit uniform products. Weight-based and price-based rates suit mixed catalogues with reasonable data. Carrier-calculated rates suit varied products and destinations, and they demand the best data. The comparison sets out what each needs and where it fails.
| Rate type | Best when | Needs | Fails when |
|---|---|---|---|
| Flat | Parcels are similar in size and weight | Nothing beyond a decision | A heavy item ships at the light price |
| Weight-based | Cost tracks weight closely | Accurate variant weights | Weights are blank or in mixed units |
| Price-based | Shipping is a lever on basket size | A margin model | Low-price, heavy items go out at a loss |
| Carrier-calculated | Destinations and parcels vary widely | Weights, sizes, origin address, plan support | Data is thin, or the account lacks the feature |
| Free with a condition | You’ve modelled the margin | Average landed cost per order | The threshold sits below your break-even |
Read the table for the last column: every rate type fails on a specific data problem, not on a design problem. Choose based on the data you have, not the data you plan to have.
Set rates for each zone
Inside each zone, add rates by type. Name them the way a customer would read them at checkout, such as “Standard” and “Express”, and avoid internal jargon. Where a carrier’s service level promises a delivery window, don’t repeat that promise in the rate name unless you’ll honour it.
Add a free shipping rate with a condition only after you understand cost. Work out the landed shipping cost per order over a recent period from your own carrier invoices (that’s a figure you must calculate, and it will differ per store, so it’s metric to confirm for your own account). Then place the threshold above the basket size where you’d break even, not at a round number that looks good.
A common second mistake is leaving a flat rate in place after a carrier changes its pricing. The rate that was fair last year quietly loses money. Put a review on the calendar. For discount mechanics beyond a threshold, see Shopify shipping discounts.
How do you set up packages and shipping labels on Shopify?
Add the box sizes you really use, with their empty weights, then choose how you buy labels. Shopify’s own label tools work in supported countries, and a shipping app or your 3PL’s system can take over. The label cost and the checkout price should be reconcilable for any given order, and the reconciliation is where you learn whether steps 1 to 5 were right.
Connect packages and labels
Under Shipping and delivery, define your standard packages: the carton, the padded mailer, the tube. Include the packaging weight, since a label is priced on the whole parcel. Use the sizes you keep on the packing bench, not the ideal ones. An operator who says “we mostly use the medium box” but has three sizes in the warehouse will get a rate quoted for one and a label bought for another.
Then decide where labels get bought. If it’s Shopify’s own tools, the order page pre-fills weight from your variant data, which is one more reason the earlier weight step matters. If it’s an app, confirm whether it writes tracking back to the order and triggers the shipping notification, because a label that never posts tracking becomes a customer service ticket. Label workflows have their own article: Shopify shipping labels. For a wider view of tools, see shipping software for ecommerce.
Also check what your 3PL does with orders. Some pull orders and buy their own labels, which means your native label settings never fire. That’s fine, provided the checkout price has been built from the same assumptions the 3PL will use.
How do you test your Shopify shipping setup before going live?
You test by placing real checkouts, up to the payment step, to at least one address per zone, with baskets designed to expose faults: one item, mixed profiles, one heavy item, one product with no weight. Then compare each rate with what a label for that parcel would cost.
Test with real orders before you go live
Build a small test matrix and write it down. One row per zone and basket type. Record the rate shown, the profile each item is in, and the cost from the label tool or carrier for that exact parcel. You aren’t looking for equality. Some gap is normal, because you may charge more or less than cost on purpose. You’re looking for gaps you can’t explain.
Three checks find most faults. First, an address on the far edge of each zone, since edge cases expose missing regions. Second, a basket that touches two profiles, since combined rates behave differently from single ones. Third, a basket with a product you know has a blank weight. If that product checks out without complaint, you’ve found a hole.
Run it again after any change to weights, profiles or carriers. Shipping breaks by drift, not by event, and a quarterly re-test costs an hour.
What does a shipping policy have to match?
Your published shipping policy has to match the settings, and it rarely does. If the policy says orders ship in a set window and the warehouse can’t meet it, the setting is right and the promise is wrong. Write the policy from the configured zones, methods and handling times, not from memory.
Customers read the policy when something goes wrong, and so do chargeback reviewers, so a mismatch turns a shipping delay into a dispute. Keep it short, specific and consistent with the checkout options. The Shopify shipping policy article gives the structure. Note that anything with legal effect, such as duties, restricted goods or consumer-law delivery obligations, belongs with your counsel, not with a template.
What breaks at volume when shipping is set up by hand?
Manual shipping settings break at volume because they depend on people remembering to update them. A new product goes into the wrong profile. A carrier changes pricing and nobody reruns the numbers. A warehouse is added and location priority isn’t revisited. Each is small, and each repeats on every order.
Picture a Monday: a merchandiser adds a new range of 40 heavy items and forgets to move them out of General. By Friday the store has shipped a week of orders at the light-parcel rate, and the loss appears only when the carrier invoice arrives. No single person did anything unreasonable. The process depended on someone remembering.
Automation earns its place here, and where it doesn’t. A scheduled check that flags any product with a blank weight, or any new product left in General when its type says otherwise, is cheap and reliable. Automation that quietly rewrites rates is not. Anything where a wrong change costs more than a human minute to review should ask for a person first.
Native Shopify handles a lot, but conditional logic by customer tag, delivery date, or order composition often needs Functions or an app. Before adding one, list the rule in a sentence. If you can’t write it in a sentence, the app won’t fix it.
Who is this setup not for?
This order of work is not for brands below the $3M floor who ship a handful of parcels a day, where a flat rate and a good box are enough. It is also not for stores whose 3PL sets rates and buys labels outside Shopify, where your job is to keep the checkout price aligned with their pricing, not to build Shopify’s rate tables from scratch.
This order of work also doesn’t cover customs, duties or tax registration, which vary by country and change. Those go to a customs broker or counsel.
Shipping setup is an operations automation problem
Getting shipping right once is a project. Keeping it right across new products, new carriers and new warehouses is an ongoing operations problem, because the data and the rules drift apart without anyone deciding they should. That’s the class of work we build under operations automation: audits for blank weights and misfiled profiles, reconciliation of checkout price against label cost, and alerts when they diverge, with a person approving any change to a live rate.
Sources
- No external figures are quoted. This article is written from Shopify’s long-standing shipping model (locations, variant weights, profiles, zones, rates) and from operating practice. Plan-specific features, carrier availability and admin layout change, so confirm them in Shopify’s current documentation for your account.