VATMOSS - handling online sales of digital goods, under new EU VAT legislation
Published by Linus on the 13th of September 2016.
Background
Please note - this text is not to be considered tax advice. We're simply recounting how we have decided to handle the so called #VATMESS
Since the 1st of January, any business that sells digital goods to customers in the EU, have to declare and pay VAT to each country that they sell to. Businesses are also required to collect and store at least two sources of non conflicting "proof" of the buyer's country of residence. To make the declaration easier, for those who are not big enough to justify a VAT registration in each EU country, the tax authorities of each country has set up a VAT Mini One Stop Shop, VATMOSS.
We are a business based in Sweden, and before starting Kniterator, we used to invoice a client in the UK. Since our only client was a business, we were not affected, and VAT was only declared in Sweden.
With Kniterator, our customers are mostly (exclusively?) private individuals, who are not VAT registered. The customers can be located anywhere in the world, so we need to be able to verify their location.
Most of the information isn't really applicable to a fully online business such as ours, and assumes that you either have some form of physical or direct delivery, such as via a phone line, SMS message, etc. A lot of proposed solutions include personal communication with the customer, which makes immediate delivery impossible, and would introduce too much manual work when selling a service for a small cost.
Our research
We started out with reading the regulations, to confirm that they applied to us. Chances are that, if you sell any kind of service or product that doesn't include a physical delivery, then it applies to you.
Unfortunately, there seems to have been a lot of reorganising of the official europa.eu web site lately, and many of the links we found were dead. The best official page that we found was a summary page:
Where to tax? (link) The Swedish tax authorities (Skatteverket) have published a lot of information, including their interpretations of the rules, and that's where we got most of our information.
After reading everything we could find, and writing up our assumptions and questions, we spoke to the Swedish tax authorities, to confirm our assumptions on how to be compliant.
Our solution to VAT compliance
We have decided to charge a flat rate for our patterns, regardless of the country of the buyer. That is, if a base pattern costs $3.50, then the customer pays the same net price, and the cost for VAT is paid by Kniterator. The advantage of this is simplicity, and the disadvantage is that we make less profit when selling to countries such as Sweden, with a high (25%) VAT rate.
For the two sources of proof of the customer's country, we will first check if the country information from the payment provider matches the geographical location that they are currently visiting our site from. If these two sources match, then we will save it as the confirmed proof of the buyer's country of residence. All of this information has to be saved for book keeping purposes.
If the payment address doesn't match the IP address, then, on the payment confirmation page, we ask the customer which country they live in. They get a choice between the country that they are visiting from, and the country from the payment information. We have not seen this suggested in any of the official documentation, but this was said to be acceptable, as the information forms a part of the business agreement, and we are acting in good faith. If a country is supplied by the user, then that is saved separately, so that we can report on it at a later date. If a country can not be confirmed, then we unfortunately have to reject the purchase. We report on any rejected purchases, and will investigate to see what we can do if it does happen.
When we save the payment details, we look up whether or not the country is a member of the EU. If the country is in the EU, then we look up and save the current VAT rate of the country.
There is a special case for the Finnish islands of Åland, which have a different VAT system from mainland Finland. VAT for Åland should be declared separately to the Finnish tax authorities, and is not handled by VATMOSS. However, there's a threshold of 10,000 EUR per year, and for a county with 29,000 inhabitants, we don't expect to ever reach that limit.
Our sales within the EU will be declared monthly, using the Swedish VATMOSS service. We will declare the amount for each different VAT rate. Details of each transaction do not need to be declared, but we will have these details ready for instant reporting, as you have to be able to provide details if requested by tax authorities in any of the EU countries.
Sales to countries outside of the EU are reported separately in our VAT declaration, but no VAT is charged or paid.
Selling to businesses
For business outside of the EU, there are no special considerations, as VAT will not be charged. For businesses inside the EU, for them to be able to buy without paying VAT, we would have to collect and confirm their VAT number. Since knitting patterns are a product that is typically used by private individuals, we would also have to ask them to certify that they are making the purchase as a business.
Reporting wise, we would have to declare business sales to other EU countries, manaully, summarised by customer VAT number. This would end up being a lot of work, for very small amounts.
Although there may be some pattern designers or professional knitters who use our services, we have decided that, for now, we will not offer sales exclusive of VAT in the EU. If we see demand for it, then we will implement this in the future, but for now, we have more important things to focus on.
Technical details
Currently, our only payment provider is PayPal Express Checkout. We access this using ActiveMerchant, in Ruby on Rails. API call names in parentheses are the names in the PayPal API. We set up the purchase params using setup_purchase (SetExpressCheckout). We then collect customer details using details_for (GetExpressCheckoutDetails), and once the country (from PayerInfo/Address/Country) has been confirmed, we process the payment using purchase (DoExpressCheckoutPayment).
For looking up the country, we use the geoip gem, with the free GeoLite Country database. We then use the countries gem for looking up Country information, and whether the country is an EU member state. Finally, we use the json_vat gem, with a local cache, for looking up the current VAT rate. If we need the user to confirm their country, then we use the country_select gem, with default_blank. Reporting of rejections and failures is handled by Rollbar, for later investigation.
For easy reporting, we save all relevant payment information, denormalised, in our database. VAT rates, GeoIP information, EU membership, etc can change over time, which is another reason to save it denormalised, rather than linking to a reference table.
If you are selling to businesses within the EU, then you can use the VIES SOAP API, for verifying VAT numbers. Search for "SOAP" on the
VIES FAQ (link).