Selling across borders in Europe should be easy. Single market, free movement of goods, harmonized regulations - that is the pitch, anyway. The reality is a mess of edge cases, and if you ship enough parcels you will eventually hit every single one of them.
European cross-border e-commerce hit 237 billion euros in 2023, growing at roughly twelve percent year over year. Massive opportunity. But I have watched too many merchants expand into new markets and then get blindsided by problems that have absolutely nothing to do with demand.
Let me walk you through the ones that actually bite.
The VAT situation is worse than you think
Since July 2021, the EU scrapped the old twenty-two-euro VAT exemption for imports. Every single item shipped across EU borders now needs VAT handled correctly. The IOSS system - Import One-Stop-Shop - was supposed to simplify this. In some ways it did. In other ways it created an entirely new set of headaches.
Here is what trips people up. VAT rates differ everywhere. Germany charges nineteen percent. Poland takes twenty-three percent. Hungary sits at twenty-seven. Luxembourg is at seventeen. Your checkout needs to know the destination country's rate and apply it correctly.
IOSS registration is mandatory if you are selling to EU consumers from outside the EU, or even within the EU above certain thresholds. And - this is the part that catches people off guard - carriers need the IOSS number printed on the label. Miss it, and the parcel gets held at customs. The customer pays VAT again at the door. Then you get the angry email. I have seen this play out dozens of times.
We built IOSS number injection directly into our label generation. You pass the number once in your account settings and it shows up on every cross-border shipment automatically. Small feature. Saves enormous headaches.
Address formats are a quiet nightmare
I will be honest - this one does not get enough attention in conversations about cross-border shipping. European address formats are wildly inconsistent, and bad addresses are the number one reason parcels get returned or delayed in cross-border scenarios.
Poland puts the apartment number after a slash. "ul. Marszalkowska 10/5." Many validation systems reject that slash. The Netherlands uses letter suffixes on house numbers - "Keizersgracht 123A" - where the A is not an apartment. It is part of the house number itself. Germany sometimes varies whether the street number goes before or after the street name depending on the region. And "Strasse" versus "Str." will trip up strict matching systems.
Belgium is its own special adventure. Three official languages mean the same city can be Liege, Luik, or Luttich depending on which language you use. All three are correct. Your system needs to handle all three.
Our Address API validates and normalizes addresses against postal databases for more than thirty European countries. It catches the weird stuff before you print a label and discover the problem three days later when the parcel bounces back. I wrote a whole separate post about how address validation reduces failed deliveries if you want the deep dive.
Choosing the right carrier for each country
This is where things get strategic. There is no single carrier that is best everywhere in Europe. Not even close.
In Germany, DHL dominates. Over sixty percent of German consumers prefer DHL, and their Packstation locker network is unmatched in the country. In Poland, InPost is king. Their locker network covers the entire country, and their prices for domestic and inbound parcels are hard to beat. In France, Colissimo handles standard delivery well, but Mondial Relay wins for pickup points - about forty percent of French customers choose relay points over home delivery. In the Netherlands and Belgium, PostNL is the default for consumer deliveries. DPD is strong for B2B. In the Nordics, PostNord is the obvious choice, but Budbee is gaining ground fast in urban areas.
The takeaway is clear. If you are shipping to five countries, you probably need at least three carriers to offer competitive delivery options in each market. That is exactly the kind of complexity our Shipment API is designed to hide. One integration, and you get access to the right carrier in every market. Check our carriers page for the full list.
Customs still exists - even within the EU, sort of
Wait, are customs not gone within the EU? For most goods, mostly yes. But there are exceptions that catch people off guard with depressing regularity.
The Canary Islands, Ceuta, and Melilla are Spanish territory but sit outside the EU customs union. Ship there and you need a customs declaration. Northern Ireland has its own special protocol after Brexit - goods moving from Great Britain to Northern Ireland need customs paperwork, but Northern Ireland to the EU does not. Switzerland and Norway are geographically right in the middle of Europe but are not in the EU. Every single parcel needs a CN23 customs form.
And for anything coming from outside the EU - like if your warehouse is in the UK post-Brexit - customs declarations are mandatory for every shipment regardless of value. I remember helping a UK-based client last autumn who was stunned to learn that every single parcel they sent to their German customers now needed customs documentation. They had been shipping without it for weeks and wondering why so many parcels were getting stuck.
We handle customs document generation automatically when you create a shipment through UniShip. The system knows which routes need declarations and which do not. You provide the item descriptions and HS codes, and we generate the paperwork. One less thing to worry about.
The return problem
Cross-border returns are expensive and complicated. A return shipment from Spain back to a warehouse in Germany might cost more than the original outbound shipping. Let that sink in.
Return rates for cross-border orders average fifteen to twenty percent, higher for fashion. Sixty-three percent of consumers check the return policy before buying from a foreign store. And a poor return experience makes seventy-two percent of shoppers unlikely to buy again. Those numbers should terrify anyone trying to grow internationally.
The practical solution is local return addresses or return consolidation points. Several carriers offer return drop-off at local pickup points, which get collected and bulk-shipped back to your warehouse weekly. It costs less per parcel and the customer experience is dramatically better than asking someone in Madrid to figure out international return shipping on their own.
I helped a fashion retailer set this up last year for their Spanish customers returning goods to a Polish warehouse. Their return shipping cost per item dropped by about forty percent, and customer satisfaction scores for the return process went up significantly.
Making it all work
Cross-border shipping in Europe is not going to get simpler anytime soon. The regulatory landscape keeps shifting. Consumer expectations keep rising. New carriers keep entering the market.
The companies that succeed are the ones that treat shipping as infrastructure, not an afterthought. That means having the right carrier in each market, validating addresses before printing labels, automating customs paperwork, and offering return options that do not make customers regret buying from you.
That is what we are building at UniShip. A single API layer that handles the complexity so you can focus on selling. Have a look at our cross-border e-commerce use cases to see how it works in practice.
Europe is one market with twenty-seven sets of quirks. The trick is having software that knows all of them. And having a partner who has already made all the mistakes so you do not have to.