The hell of taxes when building a SaaS in Europe

Published on December 7th, 2018

This post refers exclusively to my personal experience when I tried to build my brand new SaaS project - a simple Website and SSL Monitoring platform.

In the end, one thing should be clear: Even if you build your project for fun at first, it should still make money at the end of the day. When my project was about to be launched, and the prices of the respective plans were set, there was one thing I had to take care of. The implementation of the payment.

You might think this isn't really that complicated. Use Stripe, its great integration possibilities and that's it. Then you can earn money. It's not that easy. At least not if you, like me, live in Germany and are bound by German and European laws. Why? Let me explain it to you.

One of the biggest problems is the billing. Here in Germany, the legislator sets quite clear requirements for the writing of invoices. In addition to mandatory information such as consecutive invoice number, date and complete recipient information you must also have some other things on it. For example, the total amount and how it is composed of the net amount plus tax.

Communicating the pricing

Depending on the rule, different taxes, or even none at all, must be declared. We will come to the exact rules later. That inevitably leads you to the question: Which prices should you write on your website? Here were my thoughts.

Net prices on the website

So if I write on the website that my product costs $15 net with a hint that tax will be added on checkout, that means:

  • Some people from certain countries pay exactly $15 since I do not declare tax
  • Other people pay $15 plus the respective tax in the country they come from. That can be 16%, 18% or maybe even 22%.

The disadvantage is clear: every customer pays a different price. The customer feels rightly treated unfairly. In summary, you can say that one pays $15 and the other maybe $18.30.

It makes no difference to me because I can't keep the tax anyway.

Gross prices on the website

So if I want every customer to pay the same price at the end, I have to write the gross price on the website. This at least solves the problem which prices I write on my website. Nice thinking, all solved. Well, ... quite.

The disadvantage is now that I lose profit because the taxation is now on my side and will be subtracted (if there is any) from the gross price and I only get the net amount.

Invoicing itself

After I decided for gross prices on the website, the invoicing has to be considered now. Before I thought about choosing a payment provider, I talked to my tax advisor about all the things I have to pay attention to.

I didn't know whether to cry or laugh.

The rules

Let us come to the rules on when and how to declare tax on invoices. Hold on tight! It's gonna suck. You have to consider the following things:

  • Is it an electronic, a service or a physical product?
  • Where is the service provided?
  • Is the customer a private customer or a company?
  • Is he from Germany?
  • Is he from the EU or just from Europe but not EU?
  • Or is he from a third country?
  • Does he have a valid VAT ID or not?

Depending on all these possible combinations, you will finally get the correct "rule" on how to declare the tax. Easy, isn't it? Haha! I want to show you some combinations. So that you understand how complex the whole subject is.

Since January 2010, the basic rule has been that services are taxable where the recipient of the service, i.e. your client, is based. However, because this would be very costly, there is a new regulation. The reverse charge procedure.

The so-called reverse charge procedure applies to the treatment of value-added tax in other European countries. In practice, this means that you as the recipient of the service calculate the tax yourself on the basis of the tax rate in your country. You declare this amount to the tax office responsible for you and deduct it as input tax. This means that there is no need to register as a German service provider in a foreign country.


Here are only a few examples with different combinations of the questions above. I always assume that the invoice will be issued from Germany.

  • The recipient is not based in the EU but within Europe and a private or company customer. You are taxable in the country where your customer comes from. That in mind means: You need to to know the current tax of that country and use that. So it can be 12%? 15%? 20%? You have to check that out.
  • The recipient is based in the EU and a private customer. You are taxable in Germany. That means the tax from Germany. 19%.
  • The recipient is based in the EU and a company customer and provide a valid VAT IDActually you are taxable in the country where your customer comes from. You'd have to pay taxes there. But thanks to that awesome "reverse charge procedure" you don't have to declare any tax. The customer himself has to declare his tax, for his country in his country.
  • The recipient is based in the EU and a company customer and doesn't provide a VAT IDThis will be handled as the customer would be a regular private customer. That means taxable in Germany, 19%.
  • The recipient is based in a third country (not EU) and a private customer. You are taxable in Germany. That means the tax from Germany. 19%.
  • The recipient is based in a third country (not EU) and a company customer. I would say something like "You can decide" :) In general, don't declare any tax. But it might be that the country where your customer comes from, participates in the "reverse charge procedure". If that's the case, the customer has to declare the tax in his country. But it's not enough! Some third countries declare separate taxes for services and they are still different. So actually? I don't know. You have to search for that, ask your account, or whatever. What I can tell you. In any case, you won't find an answer at all.
  • To be continued...

Oh and by the way: I left out some minor German things. For instance: You have to have a piece of evidence, that the VAT ID the customer entered at the time of purchasing is and was valid. Just checking if it's valid is not enough. You need real evidence, like something a screenshot or so.

The Payment Provider

With all these thoughts I had to find a payment provider. Not only a payment provider but also a provider who creates the correct invoices for me, because honestly... I don't want to check all those **** rules.

I love Stripe. But I couldn't use Stripe alone. Since Stripe is only responsible for payment. The invoices that Stripe creates for me don't help me because I have to declare the correct tax. Fortunately, there is another service. Quaderno.

Quaderno manages sales tax, VAT, and GST for you, automatically. We handle thousands of receipts every month from businesses of all sizes, all around the world.

Seems cool. So what they do is: You connect Stripe to Quaderno. Quaderno monitors all incoming payments from Stripe and creates a correct invoice with the correct tax. Means they calculate a net price add the appropriate tax so the gross price is the price you charged for. Cool!

I have to admit, a little more work is needed. You have to send all relevant data (name, street, etc.) as metadata to Stripe. This is the only way for Quaderno to decide how the tax is to be calculated and which rule comes into effect.

After I implemented everything, everything ran wonderfully. Until the day with my tax consultant.

Why I switched from Stripe/Quaderno to Paddle

As you have learned from the rules above, however, there are cases where the tax is due in the target country. This means that I have to pay tax in the country where the customer has his location. At least if the corresponding rule applies. And that again means that I have to register my company in every country in which I declare the tax applicable there.

WTF? Really? WTF?

If you don't do this, you're risking high penalties in other countries. That was too much for me. I was just thinking about selling PingPing. Or maybe even stop it. But then I came across a solution that solves all my problems.

And the solution is: Paddle

So here is something from their website, as they can better explain it than me.

We act on your behalf as what is called a Merchant of Record (MOR).

From a legal point of view, this means that we are the reseller of your software. Most importantly, this also means that we assume responsibility for both compliance with local laws and regulations and handling of taxes on your behalf. We have to behave as if we had created the software ourselves.

Contracting with MOR gives considerable benefits to you, because you don’t need to do anything, when it comes to dealing with compliance and taxes anywhere in the world: we handle everything for you automatically as part of our normal service. As we detail in a minute, you’ll see that this is both really important and really complex.

That means: They are the service provider to your customers. They create the subscriptions, they charge them and they create the invoices. You are not involved anymore. At least until here. The only time you're still involved is the payout. You get, whenever you want, a simple payout with a credit note. That's it. You don't have to take care of paying taxes or anything else. They are responsible for that.

And the cool thing? They support credit card, as well as PayPal and ApplePay.

It's important to understand that they are very different from other payment providers like PayPal, Stripe or whatever, as they don't act as a MOR.


Now you know why I call it hell. I understand well why many companies are based in the US, Canada or elsewhere. The main thing is not in the EU. I was close to stopping my project. But at this point I have to say again:

Thanks, Paddle, that you exist.

Even though there are some things that really bother me about Paddle. No sandbox, missing statistics, the integration is not customizable and important endpoints are missing in the API. But I hope that this will be better in the future.

How was your experience? What have you done? How did you do it? All that would be interesting. Send me a direct message on Twitter or follow me. Let's share experience and ideas.

Bobby Bouwmann and I are writing a book called "Laravel Secrets".
You will learn everything about the undocumented secrets of the popular Laravel framework. You can sign up using the form below to get early updates.
      Visit to get more information.