| What are people doing? With my UK small business hat on: Sometimes, it is just easier and cheaper to build it yourself than to rely on an outsourced service that doesn't do exactly what you need. We have a database table of VAT rates per country with starting dates when they come into effect. All customer accounts are tied to a specific country, so all payments or subscriptions for an account can look up the current rate from the database and apply tax as necessary. All successful payments (one-off or recurring) are recorded in our DB, triggered by webhooks from the various payment services we use. The DB records include all the tax information that applied at the time of the payment, including things like country and proof-of-location as required under EU VAT rules, and also including generating a sequential ID for each payment to comply with the rules there. This is also the point at which we do any necessary currency conversion calculations, and we then generate and send customers an email automatically with all the same details. A little scripting looks up the necessary sales and tax figures from the database for the various VAT returns we are required to file for UK and for other EU customers. The significant limitations are mostly around keeping that VAT rates table up-to-date (I know of no acceptable automated method for doing this, so we just have to review the information manually at frequent intervals) and around handling money repaid (refunds, or if we do ever get a chargeback or similar). As far as I'm aware, none of the automated services is even close to getting these things right either, so we're still no worse off having to do a few things by hand in these relatively rare situations. Setting that lot up was a decent chunk of work, particularly all the hassle around EU VAT, which we had to retrofit in at least one case I can recall. However, it's certainly achievable for an average developer within a few days. |
> I know of no acceptable automated method for doing this, so we just have to review the information manually at frequent intervals.