Skip to Content

Built for our own business.

MTD VAT for Odoo

A module for sending UK VAT returns to HMRC from Odoo Community. It is in development and being tested in HMRC’s sandbox; it is not yet available for live VAT returns.

Tell us what you need All case studies

The problem

Under Making Tax Digital, VAT returns must be sent to HMRC by software. Odoo Community has no built-in way to do it, so businesses export their figures and use separate bridging software. We wanted the return prepared and sent from the same place the books are kept.

What we built

In HMRC’s sandbox the module:

  • gets your VAT periods (obligations) from HMRC;
  • calculates boxes 1–9 from your posted entries;
  • sends the return after you confirm the legal declaration, and stores HMRC’s receipt;
  • checks the figures HMRC holds, and shows liabilities and payments.
VAT periods received from HMRC. HMRC sandbox — test data.
VAT periods received from HMRC. HMRC sandbox — test data.
Boxes 1–9 calculated from posted entries. HMRC sandbox — test data.
Boxes 1–9 calculated from posted entries. HMRC sandbox — test data.
HMRC’s receipt, stored with the return. HMRC sandbox — test data.
HMRC’s receipt, stored with the return. HMRC sandbox — test data.

Technology

The module sends VAT returns through HMRC’s official Making Tax Digital service. It signs in the way HMRC requires and sends the security information HMRC asks every connection to provide. Access keys are stored encrypted. The whole process has been tested in HMRC’s sandbox; it is not yet available for live returns.

For technical readers: Python (Odoo 19 Community); HMRC VAT (MTD) API with OAuth 2.0; HMRC fraud prevention headers; a small sign-in proxy on our own server, in plain Python; commercial licence per client database.

What was hard

  • Fraud prevention headers. HMRC wants details of the user’s device and connection with every call: some come from the browser, some from the server. Our first run through HMRC’s validator flagged a missing client port, because the web server in front of Odoo did not pass it on. Once it did, the validator returned VALID_HEADERS.
  • Keeping our HMRC secret out of client databases. Sign-in and tokens go through our own proxy server, so a client’s Odoo never holds our application secret. Tokens are stored encrypted, with a key kept outside the database.
  • Getting the figures right. We checked the boxes against a test quarter of 16 documents covering every UK VAT rate; the module’s return matched our separate VAT report box for box.

Result and status

In development. The full flow — connect to HMRC, get periods, send a return, check the figures — has passed in HMRC’s sandbox. Our request to HMRC for production access is in progress; until it is granted, the module is not available for live VAT returns.

Code

Not open source: a commercial licence per client database.

Need something similar?

Tell us — and if you want to know when MTD VAT for Odoo is available, say so in your message.

Tell us what you need