Three merchants sell the same €30 product and each charges shipping a different way. One shows "Free shipping", one charges a flat €4.99, one shows "calculated at checkout". They will see different conversion rates, different average order values, and different margins — from the exact same catalogue. The shipping model you pick is a pricing decision dressed up as a logistics one, and on PrestaShop it isn't an abstract choice: each of the three maps to a concrete way of building a carrier in Shipping → Carriers, with its own ranges, costs and tax rules. This guide is about choosing between the three and wiring the winner into PrestaShop correctly — not the full carrier walkthrough (that lives in the complete shipping configuration guide), and not the deeper "does free shipping actually pay?" margin math (that's its own article).

One number to anchor the stakes: the Baymard Institute consistently finds "extra costs too high (shipping, tax, fees)" sitting at the top of stated cart-abandonment reasons — in the region of half of abandoners cite it. Treat that as directional, not a guarantee, but the direction is clear enough: shipping presentation is a checkout-conversion lever, not a back-office afterthought.

How PrestaShop actually charges for shipping

Before comparing models it helps to know the machine underneath, because all three are built from the same parts. In PrestaShop every shipping option is a Carrier (the Carrier class, ps_carrier table). A carrier bills in one of two ways, set per carrier under Shipping → Carriers → Shipping locations and costs: according to total price or according to total weight. You then define ranges (price brackets or weight brackets) and assign a cost to each range per zone (Europe, North America, and so on, configured under International → Locations).

Two global settings sit above the carriers and quietly decide a lot:

  • Shipping → Preferences → Free shipping starts at (price / weight) — the store-wide free-shipping threshold (PS_SHIPPING_FREE_PRICE / PS_SHIPPING_FREE_WEIGHT). Set a value here and PrestaShop zeroes shipping above it across all carriers, no module required.
  • Shipping → Preferences → Handling charges (PS_SHIPPING_HANDLING) — a flat fee added on top of carrier cost, useful for packaging, and excluded automatically once the free-shipping threshold is hit.

One trap worth flagging up front: a carrier set to "according to total weight" will quote a useless or zero price if your products have no weight entered. Calculated-by-weight shipping is only as honest as the Weight field on every product. Keep that in mind — it decides which of the three models is even realistic for your catalogue.

The three models, head to head

ModelHow you build it in PrestaShopCustomer seesStrengthWeak spot
Free shippingFree-shipping threshold in Preferences, or a carrier with €0 cost ranges"Free shipping" (above threshold)Highest conversion pull; pushes AOV when gated by a thresholdYou absorb the cost somewhere — priced in or eaten
Flat rateCarrier billed "according to total price", one range €0–∞, single costOne predictable number, e.g. €4.99Simple, no sticker shock, margin is easy to modelOver/undercharges across a varied catalogue
CalculatedCarrier billed by weight/price with multiple ranges per zone, or a real-time carrier moduleA figure computed at checkoutMost accurate; never lose money on a heavy itemUncertainty + sticker shock; needs clean weights/dimensions

Free shipping

The strongest conversion pull of the three — and the most misunderstood, because "free" is never free; you've moved the cost, not removed it. In PrestaShop you implement it two ways. Store-wide above a threshold: set Shipping → Preferences → Free shipping starts at to a price above your average order value, and PrestaShop drops shipping to zero once the cart clears it. The behavioural payoff is the bit merchants underuse: a customer at €42 with the bar at €50 is being nudged to add an item, which lifts AOV while you only absorb shipping on the larger orders that can carry it. Pair the threshold with a cart message ("You're €8 away from free shipping") so the nudge is visible — that prompt is exactly the kind of thing checkout-experience modules add, but even a themed block in the cart summary works.

The alternative — pricing shipping into every product and showing "Free shipping" sitewide — is a margin and competitiveness decision, not a configuration one. Whether the threshold approach actually pays for your catalogue, and where the break-even sits, is the whole subject of our free-shipping margin article; don't commit to it on vibes.

Flat rate

The most honest model for a uniform catalogue. In PrestaShop it's the simplest carrier you can build: according to total price, a single range from 0 to a high ceiling, one cost per zone. Customers know the number before they reach checkout, and you can model your margin exactly because shipping revenue is fixed. The risk is structural — a €4.99 flat rate that's fair on a €30 parcel quietly loses money on a 20 kg order and feels steep on a €4 add-on. Flat rate works when your products ship similarly; it breaks the moment your catalogue spans a keyring and a kettlebell. A common, sensible use is flat rate as the stepping stone toward free shipping — a €4.99 line is psychologically easier to eventually absorb than a €14 calculated quote.

Calculated (real-time)

The most accurate, and the one customers like least, because accuracy isn't what they're shopping for — predictability is. PrestaShop does basic "calculated" natively: a carrier billed according to total weight with several weight ranges per zone approximates real cost without any third-party call. For genuine live carrier rates (a real DHL/UPS quote for this exact parcel to this exact address) you need a carrier module — a class extending CarrierModule that implements getOrderShippingCost() and getOrderShippingCostExternal(), which PrestaShop calls at checkout so the module returns the cart's shipping cost from its own logic or the carrier's API. Setting those up is its own job: see setting up carrier modules and the integration guides for DHL, DPD and UPS. Calculated earns its keep on heavy, oversized or high-value goods — furniture, equipment, machinery — where one flat rate would either bleed you on the heavy lines or scare off the light ones.

The hybrid most stores actually run

In practice the winning answer is rarely one model — it's all three, layered, and PrestaShop is built to stack them because a cart can be offered several carriers at once. A common shape:

  • Free shipping above a threshold for domestic orders — the global Free shipping starts at threshold is store-wide, so it will zero shipping on international carriers too; to keep "free over X" domestic-only, use a country-restricted cart rule or zero-priced domestic carrier ranges rather than the global threshold.
  • Flat-rate carrier below the threshold — a single predictable domestic number for small baskets.
  • Calculated (weight-range or module) for distant zones — where one flat rate would either overcharge nearby customers or lose money far away.

You assemble this with multiple carriers, each restricted to the right zones under Shipping → Carriers, plus the global free-shipping threshold on top. The customer is shown only the carriers valid for their address, so a Lisbon shopper sees the calculated option while a domestic shopper sees the flat rate — same store, same back office, no code.

Zones beat one EU-wide rate

If you ship across Europe, a single rate for the whole continent is the costly default. Germany→Austria and Germany→Portugal are not the same parcel economically, and one flat number either overcharges the near customer or subsidises the far one. PrestaShop's zone system exists precisely for this: group countries under International → Locations (DACH, Western EU, Southern/Eastern EU), then give each carrier different range costs per zone. The global free-shipping threshold isn't itself per-zone, so to vary free shipping by region you approximate it with zero-priced carrier ranges per zone or carrier/country-restricted cart rules. The deeper multi-country mechanics (relay points, country-specific carriers like InPost Paczkomaty or Colissimo, and GLS multi-country setup) are their own topic; here the point is narrower: model your zones before you price them.

Where the customer sees the cost — and why timing converts

The model is half the battle; when the customer learns the number is the other half. The single most expensive mistake is hiding shipping until the final checkout step — that's the moment Baymard's "extra costs" abandonment fires. PrestaShop gives you several places to surface it earlier:

  • A header/announcement message — "Free shipping over €50" or "€4.99 flat shipping" visible site-wide, typically via a theme block or a header module.
  • The cart summary — PrestaShop shows shipping in the cart before checkout; make sure your carriers and thresholds are configured so the number that appears there is the real one, not a placeholder.
  • The progress-to-free-shipping nudge — the "€8 away from free shipping" prompt that turns the threshold into an AOV lever.
  • Estimated delivery alongside cost — customers weigh "when" as heavily as "how much". A clear arrival estimate next to the price removes a second source of hesitation; our Estimated Delivery Date module shows expected arrival on product pages and in the cart, and the reasoning behind that is in setting realistic delivery expectations.

And the room where all of this either pays off or doesn't is the checkout itself. Carriers, costs and delivery estimates that are clear, on one screen, before payment — that's the difference between an informed buyer and a startled one. Our Checkout Revolution module presents shipping options, the running total and estimated delivery in a single-page flow, so the shipping number a customer first met in the cart is the same one they confirm at payment — no surprises, no sticker-shock abandonment at the last step.

Run the numbers before you pick

None of the three models is "best" in the abstract — the right one falls out of four figures specific to your store. Pull these first:

  • Average shipping cost per order — what a typical parcel actually costs you to send.
  • Average order value — the anchor for any free-shipping threshold.
  • Gross margin — whether you can absorb shipping and stay profitable.
  • Weight/size spread across the catalogue — uniform points to flat rate; wide spread points to calculated.

A worked sketch: average shipping €5, gross margin 40% on a €60 AOV means absorbing shipping costs €5 against €24 gross profit — roughly a fifth of the profit on that order. If free shipping lifts conversion enough to more than cover that, you win; if it doesn't, you've handed away margin for nothing. That break-even is exactly where the free-shipping margin article does the full arithmetic, and for stores too small to absorb much at all, shipping strategy for small stores weighs cost against speed.

The shipping model isn't a set-and-forget setting. Pick the one your catalogue and margins point to, build it cleanly in Shipping → Carriers with the right zones and threshold, surface the cost early, then watch your conversion and AOV for a real stretch of orders before you judge it. The store that matches its shipping model to its actual numbers — rather than copying whatever the last blog post praised — is the one that stops leaking orders at the line where the price finally appears.

Share this post:
David Miller

David Miller

Over a decade of hands-on PrestaShop expertise. David builds high-performance e-commerce modules focused on SEO, checkout optimization, and store management. Passionate about clean code and measurable results.

Enjoyed this article?

Get our latest tips, guides and module updates delivered to your inbox.

Comments

No comments yet. Be the first!

Be the first to ask a question or share useful feedback.

Loading...
Back to top