Taxes: an automation story

I got reminded of wanting to write this post because it’s that time of the year again here, where we have to prepare and file our business tax reports. This is something which always used to cost a lot of time and money, and I just happend to notice others in my Twitter timeline joking they wouldn’t be able to get any real work done the next two weeks because they had to work on this.

We try to automate all our processes as much as possible. For many tasks, instead of being a team of a two, we try to be more like a team of two plus a dozen of little scripts/bots. By automating things like invoicing, server monitoring, and yes, even things like accounting, we’ve managed to cut overhead significantly. That way we can just focus on product and customers, which made it easier to scale without the need to hire as fast as other similar companies.

In this case, dealing with accounting/filing taxes is a perfect example of how we automate things. Even with having thousands of transactions to keep track of for our existing product, the entire process took half a day. And the only reason it takes half a day is because our government doesn’t offer an API to avoid having to manually enter the data into their forms. [1]

Obviously this isn’t an option for everyone. It helps we can create these scripts ourselves and that we can vertically integrate all our systems this way (although a lot more nocode options are available these days, too). Perhaps we take automation a bit too far at times, but I also don’t agree with the other extreme of “outsourcing everything”.

The popular advice goes along the lines of “you should always outsource X, because it’s not core to your business”. The problem with that is that the process to run an effective business is a core feature too. It’s an internal product, which can really give you an edge if you can operate faster and more efficiently. It’s the product that builds the product.

Accounting and filing taxes has absolutely nothing to do with our core business. And yet, by automating this ourselves, and making it part of our “business stack”, we’ve saved a lot of time and money which we could spend on our products instead.

We almost always start out with a process being completely manual. For example, when we launched our first product, we couldn’t even bill customers yet! And because Stripe wasn’t a thing yet, we had to manually charge customers every single month. For that stage of the product, it was the right amount of automation though: we had no idea if it would take off, and the manual process was still manageable for those initial customers. Our priority was validating if we could get customers in the first place.

As the product grew, we automated billing and charging for subscriptions. Invoices would be generated automatically, sent out to customers and saved to our database. We even automated keeping track of different currencies, VAT rates and so on. Then the business grew even more, and we got larger business customers who wanted to pay by wire transfers, outside our automated credit card system. And of course by this time we also had other software/hosting vendors from all over the world where we got invoices from.

All in all, when it came to our accounting, we had this large .zip file with all invoices, but there was no automated balance sheet, list of ledger accounts or journal combining all these transactions. Every year we had to spend a week or more unifying everything from bank and credit card statements, Stripe invoices, vendor invoices, salaries and much more into a neat double-entry bookkeeping Excel file.

When your work gets replaced by a Python script

Obviously, we didn’t have time for this, so we tried outsourcing first. It was a total disaster. Long story short: accountants over here do everything manually (which is absurd when even small indie companies can have have thousands of recurring subscription transactions), don’t understand SaaS, don’t understand selling internationally, or much of what we need at all. We even tried a very expensive large accountant firm. Same story. Everything they did was manual, full of mistakes, and they even managed to not file a bunch of critical reports at all. In the end we spent even more time, having to verify and fix their work on top (if you’re an accountant reading this with an interest in startups: our market could use an “accountant for SaaS” product). All this to say, that this is the part where I think it’s too easy to think outsourcing will fix all your issues: much of what gets outsourced just won’t get checked/verified. It will most likely be full of mistakes, and that has costs too.

In our case, the cost of mistakes and pain of not making this process part of our business stack was larger than the one-time cost of automating it. So we automated the whole thing with a bunch of Python code, and named the program after the accounting firm we thankfully no longer needed. John.py – not their real name 🙂 – is now part of the product that is our business, is integrated with all our systems, and takes care of all the accounting. From handling bank statements, to invoices to generating balance sheets and fiscal reports. And because we assert everything, it is correct down to the cent. It costs $0 per year.

We’ve been able to postpone a hire and spend time on interesting features for our customers by automating this completely. Perhaps automating accounting makes absolutely no sense in your case, but there will likely be other parts which, when considering your business as a product which can have moats of its own, are better to integrate and automate than outsource.

[1] I think there is some way to partner with the local tax office if you’re an accredited accounting software vendor to get access somehow. We’re so allergic to manual processes that I must admit it’s very tempting to apply to become one just for the single purpose so we can file our own taxes quicker, although that’s probably a real waste of time 😉


You can follow us on Twitter @jdvhouten and @wcools and look for #80daystartup

Read more

Work/new-life balance
Durable tech
Dogfooding
Early user feedback
Spending time to save time
Products want to be platforms
Always be launching
Enjoying the journey
Work-life balance
Recap @ Day 59
Perils of caching
Desktop-first
Making sense of contradictions
Trust signals
DIY javascript error logging
Taxes: an automation story
Magical thinking
Start small
High conviction, low conviction
Most deals fail

Post archive