← All posts

Shopify shipping: 5 lessons from years as a merchant

EXPERIENCE · by Stephan Wittmann · · 6 min read

The lessons below come from running a Shopify store in Germany; the carrier names, surcharges and DHL invoice mechanics refer to shipping from Germany.

I have run a Shopify store for years (alpen-werk.de, German) and I have made just about every shipping mistake there is. Mostly because I treated shipping as an afterthought for a long time: print the label, tape the box, on to the next order. Only as parcel volumes grew did it become obvious how much money and time hides in the details. Here are five lessons I live by today, and the reason we ended up building Karl.

1. Surcharges happen before the label, not on the invoice

My most expensive blind spot: remote-area and oversize surcharges that only showed up weeks later on the consolidated DHL invoice. At print time everything looked normal, the maths checked out, and then a few surcharge line items ate the margin of entire orders. The lesson: if you only see the surcharge on the invoice, you have already lost the lever. It belongs checked before you print. More on this in Why DHL surcharges only show up on the invoice, and how Karl builds that check into its DHL integration for Shopify.

2. A single carrier is a single point of failure

For a long time I ran everything through one carrier, one contract, one workflow: convenient. Until the carrier had issues, a destination suddenly got expensive, or a delivery promise broke. A second (and third) carrier is not a luxury: it is risk spreading and on many routes simply cheaper. The effort pays off at surprisingly small volumes. The honest calculation is in Multi-Carrier vs. Single-Carrier for Shopify.

3. The packing table is an engineering problem

Every extra hand movement per parcel multiplies by your volume. Find the order, pick the carrier, match the label, print: if that is five clicks instead of one scan, it costs hours on a good day. I learned to treat the packing table like a production line: scan, auto-load, print. How that can be solved technically is in Scan-to-Label in 5 seconds.

4. Returns are part of shipping, not an afterthought

I handled returns manually and chaotically at first: emails, one-off labels, sticky notes. That does not scale and it annoys customers. A clear returns process (self-service portal, predefined reasons, automatic labels) belongs in the setup from day one, not once the first pile of complaints lands on your desk.

5. The tool has to fit the shop, not the other way around

I tried shipping tools that were more integration project than app: shuffling data back and forth, system breaks, constant context-switching between the shop admin and an external dashboard. What actually helps is a tool that lives inside the Shopify context and adapts to my workflow, not one I have to adapt my workflow to. A decision aid is Sendcloud, Shipstation or Karl? The market overview is under Shopify shipping apps compared 2026. If you sell on eBay as well as Shopify, you want both channels at one packing table: how that works with Karl is covered under Shopify and eBay shipping from one interface.

Why this became Karl

These five points are no coincidence: they are the spec sheet I wish I had had as a merchant. That is exactly why we built Karl: pre-label surcharge protection, multi-carrier routing on your own contracts, scan-to-label, returns and a workflow that lives inside Shopify. Not designed on a drawing board, but out of the daily shipping routine of a Shopify store.

If that resonates: Karl is on the Shopify App Store. Start has no monthly fee (€0.25 per label, domestic shipping). Surcharge protection and returns come with Pro, with a 14-day trial.

Stephan

Let's talk.

Start Karl with no monthly fee

Install from the Shopify App Store →