Unless you’ve sleeping under a rock for the past 9 months, you’ve probably heard of VAT MOSS. In a nutshell, since 1 January 2015 digital products including SaaS are subject to the country VAT rate of the buyer not the seller – a bureaucratic and technical can of worms1.
For example, my Antwort Email Signature Generator previously charged the German 19% VAT rate to EU customers without a valid VAT Id. Calculating the proper tax rate based on location is a straightforward developer’s task. The bureaucracy attached to it, however, is not.
Use a payment provider; Skip VAT MOSS altogether?
Initially, I tried to minimize my efforts by using a payment provider like Paddle, which would handle the VAT for me. But:
The paddle backend was confusing for my use case: each signature is a custom generated product. I also didn’t need most of Paddle’s features. I missed Stripe’s easier API.
Difficult to test because there are only production keys. I was not keen on entering a real credit card and then doing a chargeback.
Price seemed unclear to me, as a user. Potentially you see a USD price on my website, a modal opens and you see a EUR price, which then changes again after you enter your billing country. The total price includes VAT. But as a user, I would want to understand how much of that was VAT, for example:
Antwort’s Price Breakdown at Checkout
To their credit, the Paddle team was really great and did a lot of the setup for me. But I went back to Stripe so I could better control the user experience.
Changes to the Software
I found that the GOV.UK website provides the best explanation a seller’s obligation and the pieces of “evidence” required for calculating VAT rates.
I refactored my code to meet these requirements - easy. Now onto the hard part: bureaucracy, for which I now I had to turn to the German Tax authorities, whose websites are the exact opposite of the lovely GOV.UK.
Registration - how??
Note: this is just my story and may not apply to you. In my case, I separated my freelance work from any digital sales by creating a small UG (equivalent of UK Ltd. or U.S. LLC), which already had at valid VAT Id.
Last Autumn, I asked my tax advisor about VAT MOSS and if he could handle that for me. They could handle the quarterly VAT returns. But the problem was registration. The Federal Central Tax Office (Bundeszentralamt für Steuern) online portal used to file returns did not yet offer an option for accountants to complete the registration on behalf of clients. Ok, so I would have to do this part myself.
My accountant gave me a link to the Bundeszentralamt für Steuern (BZSt) website, which said registration must be completed through the BZStOnline-Portal.
To access the portal, I needed a login. I started the online registration process but couldn’t get past page 2 or 3 because I did not have a BZSt number. I emailed and called the BZSt office to try to get a number. I explained each time I was trying to do VAT MOSS registration. It’s possible I misunderstood the bureaucrats. But ultimately this was the wrong way to do VAT MOSS registration.
No BZSt. Number required, just ELSTER registration.
I could not find this anyway on any of the tax websites, but basically this is how VAT MOSS registration works:
- Register for ELSTER Online.
- Wait for the post with activation codes for ELSTER.
- Complete ELSTER activation and download security certificate.
- Login to BZStOnline with ELSTER credentials and security certificate.
- Complete VAT MOSS registration on BZStOnline.
Ironically this information is on the website, but not as a webpage, rather a help search via a robot named ELIAS (think of the Microsoft Office Clippy assistant from the 1990s):
The relevant text:
Für den Login in das BZStOnline-Portal ist ein Zertifikat erforderlich. Da das BZStOnline-Portal das Schwesternportal des ElsterOnline-Portals ist, können Sie hierfür das ELSTER-Zertifikat verwenden.
So finally I am registered2, meaning I can continue with improvements to Antwort.co and not worry about not complying with EU VAT regulations. And hopefully this was the only part I needed to do and my accountant can do the rest.
Use a login from one website to get access to a separate website? Makes total sense, right? Not.
In my defense, both websites look similar and are on the same elsteronline.de domain. I think I confused them.
After I finally figured out and completed registration, I discovered that I had the answer from my accountant long ago. Amongst the many emails we exchanged, he told me to register on Elster and use that certificate on BZStOnline. I oversaw those 2 sentences. (Facepalm)
But this was in part my own fault. Learnings:
- GOV.UK is amazing. I learned first hand how important it is for governments to provider clear and correct information for a citizen’s use case. We want to abide by the law. So help us do it!
- Search is sadly more effective than talking to a human being.
- Read emails more carefully.
If you are a web developer, see How small companies and freelancers can deal with the VATMOSS EU VAT changes by Rachel Andrew to learn more about how this affects you. ↩
Registration only took a few days of waiting for the mail. I needed 6 months because I am a master of procrastination and repression. ↩