- Notes on Solopreneurship Engineering
- Posts
- Issue #13: Invoicing compliance nightmare! 🇮🇹🤯
Issue #13: Invoicing compliance nightmare! 🇮🇹🤯
Having the application ready for launch and realizing that you're not compliant with how you invoice
The first half of the week has mostly been about ensuring everything works smoothly: onboarding, subscriptions, moving from beta user to normal user, etc.
It was quite some work, but everything is fully working now! 🎉
BUT…
Just yesterday I realized that the way I’m invoicing is not compliant with the Italian laws. 🇮🇹🤯
Last week I already discussed technically how I integrated Stripe for handling subscriptions. Since this week was mostly about finalization, it has been mostly about low-level details that would better fit in a dedicated post.
(I started thinking that probably I should start writing side-posts dedicated to specific topics 🤔)
Today I'm going to share the invoicing nightmare that I faced. This is very specific to Italian businesses, so if you’re not an Italian resident feel free to skip this issue and have a nice weekend! 😂
Otherwise, if you’re an Italian resident, or just curious to know more about this nightmare, get ready! 😭
Table of Contents
Realizing that I’m not compliant
July is tax month in Italy! 🇮🇹🥳
Taxes in Italy are high, but this is another story… 😅
Yesterday morning I was talking on the phone with my accountants to finalize some paperwork and some numbers. Since last month I also had some subscriptions for NextCommit I ended up asking if those were all fine.
The answer was: “What are you talking about?“
🤣
NextCommit is also integrated with Stripe and everything works as you’d expect from any other SaaS:
a customer subscribes to a plan,
weekly/monthly you get payment,
the customer receives the email with the invoice from Stripe.
Everyone’s happy! 😌
EXCEPT…
for the Italian Revenue Agency. 😭
I shared everything that I could find on Stripe with my accountants. I was expecting Stripe to automatically send the e-invoice automatically and for my accountants to be able to automatically see them in their accounting software.
I was wrong.
What is an e-invoice or a “fattura elettronica”?
The e-invoice or “fattura elettronica” is a digital document that replicates exactly what’s in the invoice, the data about the entity emitting the invoice, the data about the client, etc., but in a digital form. This document is an XML form with a specific schema and MUST be sent to the Italian Revenue Agency through a specific protocol.
The usage of e-invoice in Italy became mandatory on Jan 1st of this year for the majority of businesses, and this also covers mine.
Indeed, when I was working as a consultant, I was doing that. Every time I’d need to bill my clients, I’d go to my accounting software, create the invoice, and send it as an e-invoice through it.
For some reason, I was expecting Stripe to do this automatically for NextCommit and EchoWords. 😅
Ok Marvin, why you even thought that it’s done automatically?
I indeed read that Stripe was doing that automatically, BUT it was actually referring to the e-invoice that THEY need to send me for the fees that I pay on top! This means that they’re indeed compliant, but I’m not. 🤣
My accountants didn’t initially see the problem as there were only 3 of them and just told me to create the ones that I was missing manually, and the problem was solved. Well, that’s true but…
The whole idea of having a SaaS is to have a way higher volume than 3. 😅 Assuming that each e-invoice would take around 5 mins to fill, then having just 50 monthly customers means more than 4 hours spent just doing that every month.
C’mon man, it’s just 4 hours a month!
True, but it’s very error-prone, as there are many different cases: private person, Italian business, intra-EU business, extra-EU business. 🤯
Each case has different rules on how you need to fill out the e-invoice. I don’t want to know what happens if you mess this up. 😅
Possible solutions
There are a few possible solutions to move forward:
continue doing that manually,
find an integration for my accounting software to Stripe,
use another accounting software integrated with Stripe,
switch to a Merchant of Record like Lemon Squeezy,
implement that integration myself.
I ended up with solution number 5!
You need to focus on your core business! This is just a distraction!
I agree, but let me cover all these solutions one by one
Manual invoicing
This is how it looks like creating an e-invoice in my accounting software.
UX for creating an e-invoice
You need to fill in the data of the client, the line items, the amount of VAT to apply, calculate the net price depending on the VAT you apply, etc.
As I mentioned before, there are many cases and each case has to be done with specific rules and values.
For sure it can be done, but I really don’t want to do it. 😅
I’d rather solve this once and for all.
Stripe integration for accounting software
I’m using FattureInCloud and the good thing is that it has a marketplace for integrations! 🎉
The bad thing is that there’s no integration for Stripe! 😭
No Stripe integration
I found some other accounting software that supports Stripe, but it would conflict with the work done by my accountants, so that was also not an option.
Switching to a Merchant of Record
This is an interesting one. Merchants of records like Lemon Squeezy are entities that act as a sort of proxy between you and the clients. This means that I’d just need to emit a single e-invoice at the end of the month. 🎉
That would make the manual invoicing more than fine! Even having multiple projects all using different accounts would be bearable!
However, there’s a big problem. The implementation of EchoWords related to how subscriptions are managed (creating, expiration, renewal, etc.) is tightly coupled with how Stripe works. This means that I’d need to re-implement that part again! 🤯
This is not an option.
Using Zapier
I found a pre-made Zap from Stripe to FattureInCloud.
But it was just creating the e-invoice and nothing else. There was no way to distinguish based on client type, compute differently the net cost, etc. It was just not offering the flexibility required.
This is not an option as well.
Implementing the integration myself
So, I didn’t choose this option because I wanted to. But it seems to be the least shitty one tbh. 🤣
The good news is that:
Stripe API is awesome,
I’m already integrated with the Stripe webhook to listen for subscription changes,
FattureInCloud also has a good API.
The integration consists of attaching to the Stripe webhook event invoice.payment_succeeded
, reading the Invoice
object attached to the event, and transform it in a way that suits the corresponding object in FattureInCloud.
Hence the integration itself it’s quite easy, I just needed to get from my accountants the spec for all the different cases so that I know how to fill the different fields of the FattureInCloud object.
This is definitely another thing that will be part of my own boilerplate! 😅
(I’m not sharing the specs here because every case is different, and there might be some differences also depending on your specific business. If you’re facing the same situation, it’s better for you to ask for clarifications from your tax advisor!)
Conclusion
This is another obstacle that I was not expecting, but it’s another lesson learned! 😄
I’m not gonna hide that this was a huge bummer, but it is what it is. 😅
In the next few days, I’ll try to finalize this integration, cover and test all the possible scenarios, and ask my accountants to verify the correctness of the fields.
Starting next week I’ll be on vacation! 🏖️
Unless something crazy happens, the next issue will either be the 9th or the 16th of August.
I’ll bring my laptop with me so that I can still do some work especially related to hearing from the beta users of EchoWords and hopefully be ready for launch once I’m back. 🤞
I hope you enjoyed this week’s updates! 👋
If you’re interested in following my journey, make sure to subscribe or follow me on X/Twitter and LinkedIn!
Appendix
Personal branding
X
X Premium analytics
Beehiiv Analytics
Reply