taxomatic helps you do your monthly tax declaration in 5 minutes
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

Build Status


  1. Make sure you're running Ruby 1.9

  2. run this:

     git clone git:// && cd taxomatic && bundle
     # … now configure database.yml for your DB …
     RUBYOPT=-Ku rake db:create db:schema:load
     RUBYOPT=-Ku rails server


taxomatic helps you do your monthly tax declaration. It imports your invoices and bank statements, lets you flag expenses easily, and calculates the tax to be paid.


Tax declaration page


Listing account statements (waiting to be flagged as expenses)


How data gets into the system (the automated way)



  1. You pay your taxes in Germany and have to do monthly advance payments for sales tax (VAT, Umsatzsteuer).
  2. You manage your bank accounts with the OS X application MoneyMoney (optional but recommended)
  3. You use Harvest to bill your clients (optional)

Steps 2. and 3. are optional, but they are the part that makes the declaration take less than 5 minutes. You can also enter expenses and invoices by hand, I did that for a long time and it worked well enough. I'm open to pull requests for importers from other tools and services (like Saldomat).


  • Ensure you're running Ruby 1.9 and have the RUBYOPT environment variable set to -Ku.
  • Clone the repository, run bundle to install the gems, and set up / migrate the database.
  • Copy config/taxomatic.yml.example to config/taxomatic.yml and configure it appropriately.

Importing statements from MoneyMoney

  1. Before you start, ensure that all statement lines you are going to import have a category, and that this category is present in taxomatic (matching is done by name). You can also do this by trial-and-error as the lines that can't be imported will be skipped.
  2. Export the statements of the desired MoneyMoney accounts as CSV. When exporting, leave all settings at their default
  3. Save the file in data/moneymoney-giro.csv.
  4. Run rake import:statement

Importing invoices from Harvest

  1. Before you start, ensure that all clients of your invoices exist in taxomatic. The matching is done by the harvest_client id.
  2. Ensure the harvest client is configured in config/taxomatic.yml
  3. Run rake import:invoices

On the next export, taxomatic will be careful not to import invoices twice.

Pro tips

  • Run rake backup to dump the current database state to data/backups.
  • Run rake import to import both statements and invoices. This will also do a backup before importing.
  • Run taxomatic with the Pow server so it'll always be running in the background when you need it.


taxomatic may set your house on fire, delete all your bank accounts (including the money in them) and even kill a kitten in the process. Well, maybe it won't, but at least you have been warned.

taxomatic is not security reviewed and has no login, so it shouldn't be run on the web. The tax calculations haven't been checked in depth. For anyone who hasn't written it, it may be hard to understand/use the tool. See Todos.

taxomatic is also not well tested everywhere, although I've been careful to test the recent parts of the model layer (data import). See Todos.

It is (probably) also one of the oldest Ruby on Rails applications alive, being started at version 0.something. That's why you'll find plenty of code that would be written differently today.


  • Write acceptance tests for a few variations of tax declarations.
  • Ensure that a StatementLine can only have one expense (uniqueness of payments.expense_id)
  • Modernize deprecated/old school Ruby/Rails code, convert .erb templates to .slim.



  • Statement lines page: set expense and VAT tax directly on the page
  • VAT tax page: removed tabs, display everything in one view now
  • Added Changelog


  • Initial public release