How to prepare your Odoo for Verifactu, step by step

Last updated:

To get Odoo ready for Verifactu you need, in this order: confirm it applies to you, choose the module for your version, load the certificate, set up taxes and journals, test against the AEAT test environment and go live with a script. This guide expands that process into an executable checklist; the summary list in the complete Verifactu in Odoo guide gives you the overview, and here is the execution detail.

Last reviewed: 2 November 2026. Verifactu legal dates in force: 1 January 2027 (corporate income tax payers) and 1 July 2027 (everyone else). On 5 October 2026 the Ministry of Finance announced its intention to postpone to October 2028; this is announced, pending publication, and until it appears in the BOE the 2027 dates apply. Details in deadlines and penalties.

Before you start: three checks

  1. Does it apply to you? If you keep your books through the SII or file taxes in a regional territory, you are probably excluded for those operations. See the differences between Verifactu, SII, TicketBAI and Facturae and validate with your advisor.
  2. Which date is yours? 1 January 2027 for corporate income tax payers; 1 July 2027 for everyone else. Plan with those dates even if the postponement is confirmed.
  3. Who does what? Name a tax owner (validates the configuration), a technical owner (Odoo) and a billing owner (key user who tests and trains the team).

Step 1. Version and edition

Record the exact version and edition, the invoicing and POS modules installed, and any custom development that touches invoices, sequences or the PDF. With that, the decision table is:

Your version Route
Odoo 17, 18 or 19 Official module l10n_es_edi_verifactu
Odoo 15 to 18 OCA module l10n_es_verifactu_oca (branch of your version)
Odoo 19 hoping to use the OCA l10n_es_verifactu_oca does not exist yet on 19.0
Odoo 12 to 14 No official or community route: backport, third-party or migrate

For version and edition detail, see Does your Odoo version work for Verifactu? and, for the community route, Verifactu on Odoo Community. Always do the work on a copy of the database, not on production.

Step 2. Choose and document the module

Choose official or OCA and write down who maintains the module, what they will do when Odoo or the rules change, and who provides the software producer's responsible declaration. Remember that the AEAT does not certify software: the responsible declaration is what exists. Odoo's documentation says producers of Verifactu systems must self-certify compliance and links Odoo's declaration; the AEAT publishes example responsible declarations in its technical information.

If the module is from the OCA, open its repository and go through the open issues of your branch before deciding. Community modules are under active development, so what failed yesterday may be fixed today, and the other way round.

Step 3. Digital certificate

Module How the certificate is loaded
Official In the Accounting or Invoicing settings, Veri*Factu section: enable the option, click Manage certificates, create a new certificate, upload the file and enter its password if it has one. At least one is required.
OCA Upload the p12 certificate in the AEAT certificates menu and extract the public and private keys with the Obtener claves button; certificates are stored in a folder accessible by the Odoo installation. The module also requires the Python libraries zeep and requests.

Check first: who the holder is, when it expires, where the safe copy is and who can renew it. The official module's code uses different AEAT endpoints depending on whether the certificate is an electronic seal or not, so confirm with your advisor which type fits your company before buying or renewing anything.

Step 4. Taxes and regimes

  • Official module: in the Verifactu settings there is a special VAT regime field (simplified, REAGYP or equivalence surcharge); leave it empty for the normal regime. Check that every sales tax is correctly set up in your chart of accounts.
  • OCA module: in the fiscal positions you must set the tax key and the VERI*FACTU record key, then run the accountchart_update update wizard to apply them.
  • Special cases: exemptions, reverse charge, sales to foreign customers or IGIC in the Canary Islands need tax validation. For the Canary Islands, see Verifactu in the Canary Islands with IGIC and Odoo.
  • Master data: correct tax IDs for your company and customers and consistent countries; most rejections start here.

Step 5. Series, journals and numbering

  • One series per purpose (sales, corrective invoices, POS), sequential and without gaps.
  • Every sales journal that issues invoices must be covered by the module. An unmarked journal is a frequent cause of invoices that generate no record.
  • Do not edit by hand sequences or numbers of validated invoices, and do not use scripts or direct database changes on issued invoices: you would break the hash chain. The official module creates its own record-chain sequence, kept read-only.
  • PDF templates: check that the QR code appears and is readable after customising the invoice layout.

Step 6. Tests against the AEAT test environment

The official module starts in test mode by default, and in that mode it sends to the AEAT pre-production servers; its data is not official. The AEAT also publishes an external testing portal for developers of invoicing software. In the OCA module, the AEAT menu lets you check the SOAP service URLs, which can vary.

Run the tests with a matrix like this and note the result of each case:

Case What to check
Normal sales invoice Record created, sent, accepted and QR readable
Invoice with several tax rates Correct breakdown in the record
Invoice to a foreign customer or one without a Spanish tax ID Accepted, or the rejection is explained
Invoice with discounts and negative lines Amounts consistent with the PDF
Corrective invoice (credit note) Its own record is generated and linked to the original
Cancellation Only if your procedure allows it; see below
POS sale (if you use it) Ticket record and, if an invoice is issued, the invoice record
Lost connection or AEAT error The submission stays pending and is retried
Certificate failure (expired or wrong password) Clear message and resolution procedure
Month-end with many submissions Performance and waits between submissions

A note on the official module: the AEAT imposes waiting periods between submissions and, if they coincide with your invoicing, a scheduled action sends the record later; do not treat that as an error.

Step 7. Corrective invoices and cancellations

Define in writing when to use each. The OCA's own documentation, quoting the AEAT, says that if the invoice itself is wrong the usual path is the corrective invoice, and that cancellation and correction by amendment should be very rare cases. The OCA also lists, among its uncovered cases, modifying and cancelling already-sent invoices: do not assume they are solved, and test them on your copy.

Step 8. Training and incident procedure

  • Validated invoices are not deleted or edited: they are corrected with a corrective invoice.
  • Who reviews pending or rejected records every day, and within what time.
  • What to do if the AEAT is down or the certificate expires.
  • Who contacts the supplier for support and through which channel.

Step 9. Go-live script

  1. Agreed date, preferably at the start of a period and away from a closing, with the team reachable.
  2. Full backup before the change.
  3. Freeze changes to tax and journal configuration during the window.
  4. Turn off test mode (in the official module, the Test Environment option) and check that the production certificate is loaded.
  5. First real invoice on a controlled case; verify the record, the AEAT response and the QR.
  6. Watch the first days with daily review of pending and rejected records.
  7. Avoid restoring old database copies once in production: the chain of records already sent to the AEAT would no longer match the restored database. If something fails, talk to your implementer first.

Step 10. After go-live

Review Odoo or module updates before applying them (on a copy first), renew the certificate ahead of time and keep the evidence of your tests and of the responsible declaration.

Common mistakes

  • Leaving test mode on in production: the invoices are not official.
  • Uncovered journals or parallel series.
  • Loading the certificate without checking its expiry or type.
  • Not testing the corrective invoice and the retry after errors.
  • Changing validated invoices with scripts.
  • Leaving everything for the last week.

Can we help?

At uKodeIT we review your version and modules, set up the test copy and go with you through to go-live. See how we work on the Verifactu in Odoo service page or get in touch.

Frequently asked questions

Can I test Verifactu in Odoo without sending real invoices to the AEAT?

Yes. Odoo's official module starts in test mode and, while it is on, sends to the Spanish tax agency's (AEAT) pre-production servers: the data is not official. To go live you must disable the Test Environment option in the Verifactu settings.

Which certificate do I need for Verifactu in Odoo?

Odoo asks for at least one certificate file with its password, and its documentation does not specify the type. The module's code tells electronic seal certificates apart from personal ones and uses different endpoints for each. In the OCA module, the certificate is uploaded as p12 and its keys are extracted. Confirm with your advisor which one fits your company.

What happens if sending to the AEAT fails?

In the official module, if there are mandatory waiting periods between submissions a scheduled action sends the record later. In the OCA module, a cron job checks pending records every minute. In both cases someone should monitor rejected or pending records.

How long does it take to get Odoo ready for Verifactu?

There is no universal figure: it depends on the version, modules, taxes, number of journals and customisations. An upfront inventory lets you estimate it. The prudent course is to reserve margin for testing, certificate and training before your date.

Can I correct an invoice already sent to the AEAT?

The AEAT's recommendation is to issue a corrective invoice. Cancellation exists, but the OCA module's own documentation, quoting the AEAT, says it should be a very rare case. Define the procedure before going live.

Is this the same as the checklist in the complete guide?

The complete guide includes a summary list of eleven steps. This one expands the execution steps with module-by-module detail, a test matrix and a go-live script.