Free shipping over an amount raises the average order value and is easy to explain to customers. But the moment you also run discount codes, the two promotions can work against each other. A customer adds products for 549 kr, uses a code for 110 kr off, and still gets the free shipping you meant for orders over 500 kr. This guide explains why that happens and how to stop it.
How a free shipping threshold works in Shopify
Shopify's own shipping rates live under Settings, Shipping and delivery. Each shipping profile has zones, and each zone has rates. A rate can have a condition.
- Open the zone, for example Denmark, and add a rate.
- Name it "Free shipping" and set the price to 0.
- Add the condition "Based on order price" with a minimum, for example 500 kr.
- Add a second rate, for example "Standard shipping" for 39 kr, with a maximum order price just below the threshold.
The customer now sees the free rate when the cart is over 500 kr and the paid rate below. This works well for a store with one carrier and no discount codes.
Where the limits are
Shopify's conditions are based on order price or weight only. You cannot combine them with product tags, customer tags or zip codes. And a condition does not show the customer a pickup point. For that you need a rate from a carrier app, which Shopify receives through the Carrier Calculated Rates feature. Read more in the guide on Carrier Calculated Rates.
Why discount codes break the threshold
The problem is the order of events in the checkout. The customer enters a discount code and the cart total drops. But the free shipping condition is not always checked against that lower total.
- Depending on the discount type and on how the rate is calculated, the threshold can be checked against the cart value before the code is deducted.
- A rate-calculating app often gets the cart from Shopify without the discount code. The app then sees 549 kr, not 439 kr.
In both cases the customer gets free shipping below your threshold. The exact behaviour depends on your setup, so do not assume. Test it (see below).
Here is the example in numbers, with a threshold of 500 kr:
- Products: 549 kr
- Discount code SUMMER20: minus 110 kr
- Order value the threshold should use: 439 kr
- Correct result: under the threshold, so shipping costs 39 kr
If the threshold uses 549 kr instead, you give away both the discount and the shipping. On a small order that can be most of your margin.
Set the threshold with Pakkeshopper
Pakkeshopper deducts discount codes from the order value before it applies your shipping rules. The free shipping threshold then uses 439 kr in the example above, and the customer pays for shipping. Read about the feature on the discount codes page.
Set up a free shipping method
- Install Pakkeshopper from the Shopify App Store. Your store needs Carrier Calculated Rates: Advanced and Plus include it, and on Grow you ask Shopify support for the add-on.
- In Pakkeshopper's dashboard, create a shipping method for your carrier, for example GLS parcel shop, with a price of 0.
- Add a rule on order value: show the method when the order value is at least 500 kr.
- Duplicate the method with one click, set the price to 39 kr and change the rule to an order value below 500 kr.
- Place the free method at the top of the checkout list so the customer sees it first.
The order value rule is included in all plans, also the free Starter plan. See all rule types on the shipping rules page.
The per-shop setting
The discount deduction is a setting for the whole shop. It is on or off for all shipping methods at once. Turn it on when you want discount codes deducted before the threshold. Turn it off if you prefer the cart value before discounts, for example during a campaign where free shipping is part of the offer.
Test it
Shopify caches shipping rates for up to 24 hours. A test that looks wrong is often just an old cached rate. Follow these steps.
- Create a discount code in Shopify admin, for example TEST20 with 20 percent off.
- Add products to a cart so the total lands just above the threshold, for example 549 kr with a 500 kr threshold.
- Go to the checkout and confirm that free shipping shows.
- Enter the discount code. The cart drops to 439 kr. Free shipping should disappear and the paid rate should show.
- If the rates do not change, change the house number or add a product to the cart. Shopify then asks for fresh rates.
- Delete the test code when you are done.
Use a real address with a house number when you test. Pakkeshopper's address validation blocks the checkout until the address has one.
Related tactics
A free shipping threshold is rarely the only rule in a store. Two other rules often go together with it.
Quantity-based prices
Some products should not ship for free even over the threshold, for example heavy items that cost you more per unit. With quantity-based prices, Pakkeshopper multiplies a price by the number of qualifying items in the cart, with an optional cap. A method can charge 20 kr per bag of soil and stop at 100 kr.
Product groups for bulky items
Mark bulky products with a product tag, or put specific variants in a product group. Then add a rule that hides the free shipping method when the cart contains them, and show a pallet method instead. The dashboard warns you when a tag used in a rule is missing on the products. The product tag and customer tag filters are in the Max plan.
Ask the assistant
If a rate does not show in the checkout, ask the AI assistant in the dashboard. It explains which rule blocks the rate and can edit the method with a preview before anything changes. The Shopify shipping guide covers the rest of the shipping setup.