The ultimate guide for a successful odoo-ERP-implementation   Free Download

Recurring Batch Posting


If you want to create a complete monthly financial statement in Odoo without waiting for Datev and your tax consultant, you need to do all the work required for the financial statement yourself. In Odoo, it is possible to pre-configure most of the necessary tasks, such as the automatic generation of depreciation of fixed assets and PRAP (deferred income) or ARAP (accrued income).

But what about the recurring entries? For the revenue side, Odoo has provided an answer with a subscription management that automatically generates outgoing invoices and can even post or send them, as required.

And on the input side? What happens to leases, rentals, and insurance premiums? At first glance, Odoo does not seem to offer any solution for these, and you might get the impression that you will have to resort to an external module.

Note: I did not even check if there is one since the solution is pretty straightforward.

The Solution

The solution is to keep the batch of entries in an Excel file or spreadsheet and re-import it at the end of the month. Below you will find the list of required steps:

How to prepare:
  1. First, we create a new journal of the type “Other” or “Miscellaneous”. The chosen name and short description should be “catchy.”
  2. In the next step, we post an entire month.
  3. Now, we can mark and export the data. In the screenshot below, you can see the required fields:
Export Data

In the resulting Excel file, we only have to change the date of the posted batch and, if necessary, the due date (if the posting is to be proposed for a payment) once a month.

Editing or extension

Cave: When you edit your file, you need to pay attention to several details:

1) Record and line

It is essential to roughly understand the structure of your Excel file; otherwise, the import may fail. The consequences are error messages or data that does not end up in Odoo as desired. Let’s take a look at a screenshot from an arbitrarily created posting record in Odoo and compare it with the export structure:

Record Journal

The above shows the posting number ”DIV/2023/06/0003“ in the header and the date. The accounts are addressed in the list below.

In addition, here is a screenshot from the export result:

Export Result

The original headers have now moved to columns A to C, while the following columns D to M form the lines. You can also see that the lines are traced progressively downwards. With the start of a new entry, columns A to C fill again, as shown in line 4.

It is essential to keep these two parts (i.e., header and lines) separate. In other words, the column order may be changed within A through C or D through M. However, you may not move a column from D through M to A through C or vice versa.

2) Taxes:

In our example, we have both a gross and a net posting (lines 2 and 3). The entry from lines 4 to 6 contains taxes. In this case, the account assignment needs to be considered:

  • a tax key is assigned to the expense
  • the line with the tax account is marked


Odoo also provides automatic accounts, but the additional postings are currently generated only if you manually create a posting record, not for imports. So, you need to take them into account accordingly.

Now you can create the posting batch. In this case, we refer to SKR04. If there is a different localization, you need to consider the respective conditions. This is why we recommend creating the posting batch manually in advance and exporting it.


Once the date and, if necessary, the due date, has been adjusted, you need to import the file. To do this, we go to the corresponding journal, where you may select the file via the “Favorites” / “Import” menu.

Odoo will map columns to the respective fields using the column headers. If you do change any oof the headers, the mapping and importing will be done immediately. Don’t forget that the language setting is also essential here. Odoo will always recognize an English column header, whereas it only recognizes a German header if the user’s language setting is German.

Filters and confirmation

After the import, we need to set the filter to “Unposted” to get the posting we have just imported. We select all, click on the action menu, and then on “Post entries” to confirm the posting batch.

If you want to check the import’s effects, you may go to the financial reports and use the “Include unposted entries” option to see results before confirming the batch.

Possible exceptions

You can apply this approach to variable amounts within the posting batch or, for example, to recurring invoices.

There is one point to keep in mind, however: If a posting is part of a process, integrating it into the Excel list may not be a good idea, as it does not allow for feedback within the company.

As an example , let’s take a look at a janitor’s recurring invoice. Should there be any complaints about the services on which this monthly invoice is based, you cannot establish an exchange between Purchasing and Accounting via the Excel list to veto a monthly payment, if necessary. You should use an alternative process for these or similar cases.

Was this article helpfull information to you? 
Would you mind to leave us a review of your experiences with openfellas?

​​​​​review openfellas

Talk to our experts.

We will find the solution best suited to you and your products!


openfellas wins SENEC