In summary. Migrating from Holded to Odoo is done in seven phases: export clean data, transform formats, configure Odoo with Spanish localisation, import in the correct order, operate in parallel to validate, go live in production and close the fiscal year with the historical data safe. With correct preparation, no relevant data is lost and the change is transparent for clients and the team.
You've been noticing for months that Holded is no longer sufficient. Sales are growing, you're opening a second warehouse, you want to set up an online shop, or you need a POS that really works. Holded has served you well up to this point, but it's no longer enough. The question is not whether to migrate, but when and how to do it without the business suffering.
Migrating from Holded to Odoo requires exporting clean data, transforming formats, and configuring Spanish localisation before importing in the correct order.
Why are growing Spanish SMEs abandoning Holded?
Holded is a tool designed for getting started. Simple invoicing, basic accounting, a lightweight CRM. For an SME of five people invoicing below a certain threshold, it fulfils its function.
The problem arises when the company grows. You need to manage stock in two different warehouses. You want a POS integrated with real-time accounting. Your sales team needs quotes with a complex product configurator. Or simply your accounting firm asks for a level of accounting traceability that Holded does not provide natively.
Odoo Enterprise covers all of that within the same platform. Sales, purchases, warehouse, manufacturing, eCommerce, POS, accounting with full Spanish localisation, VeriFactu, TicketBAI if you invoice in the Basque Country or Navarre. Everything connected, without third-party integrations that break every time there's an update.
The decision to migrate usually comes after one or two specific problems: a VAT closing that doesn't balance, an inventory that doesn't reflect reality or the impossibility of scaling the sales team without multiplying licences.
Phase 1: Exporting Holded data judiciously
The first mistake in any migration is to export everything without thinking. More data does not mean a better migration. It means more noise to clean up afterwards.
What you do need to export from Holded:
- Customers and suppliers: name, NIF, fiscal address, payment terms, associated contacts.
- Products: internal reference, description, selling and cost prices, categories, current stock by location.
- Issued invoices: at least the last two full fiscal years, in structured format if Holded allows it, or in PDF as a historical archive.
- Received invoices: same criteria as issued invoices.
- Accounting entries: general ledger for the current financial year, opening balances.
- Pending orders: any sales or purchase order that is pending to be served or received.
What you do not need to migrate: internal emails, loose notes without accounting value, draft quotes that have been expired for months. Migrating rubbish only generates confusion in the new system.
Always export in CSV when possible. PDFs serve as historical archives, but not as live data in Odoo.
Phase 2: Transform and clean before touching Odoo
This is the most underestimated phase and the one that prevents the most problems. Holded and Odoo do not speak the same structural language, and the translation must be done before importing.
Some specific examples of what needs to be adapted:
- Holded works with a flat field for 'customer type'. Odoo uses tags combined with the contact type. You need to map which tags you are going to use in Odoo and reassign the records.
- Products with variants in Holded are usually registered as independent references. Odoo has a hierarchical product structure with attributes and variants. If you have, for example, a T-shirt in five sizes and three colours, in Holded these are fifteen references; in Odoo it can be a single product with fifteen variants. You need to decide whether to consolidate or maintain separate references.
- Holded's chart of accounts is based on the Spanish PGC, as is Odoo's, but the account codes may differ in the level of breakdown. An account-by-account mapping must be done before importing entries.
Dedicate time to this phase. Reviewing fifty incorrectly imported customers consumes more time than doing the mapping correctly from the outset.
Phase 3: Configure the Odoo environment with Spanish localisation
Before importing anything, the Odoo environment must be ready. A poorly configured environment forces re-importing, and that is lost time and money.
The points to resolve before touching data:
- Active Spanish localisation: PGC chart of accounts, Spanish VAT rates (21%, 10%, 4%, equivalence surcharge), tax models aligned with AEAT forms.
- Correct fiscal year: the configured fiscal year must match that of your company.
- Users and permissions: each team member with access only to what they need. Not everyone needs to see the accounts.
- Bank connection: if you are going to use Odoo's automatic bank reconciliation, it's best to have it configured from the start.
- VeriFactu or TicketBAI: if your company falls within the scope of these tax obligations, you must activate and validate the configuration before issuing the first real invoice.
- Invoice series: ensure that the series you will use in Odoo does not collide with the one you have been using in Holded. The AEAT requires series to be consecutive within each financial year.
If you work with Nextdoo, this initial configuration is part of the implementation process. We do not start the import until the environment is validated.
Phase 4: Import data in an organised manner and validate on the fly
The import order matters. If you try to import invoices before clients are loaded, the process will fail or create orphaned records.
The recommended order:
- Chart of accounts and accounting configuration.
- Clients and suppliers.
- Products and categories.
- Initial stock (inventory adjustment on the cut-off date).
- Rates and commercial terms.
- Opening accounting balances (debtors, creditors, bank balance).
- Historical invoices as attachments, not as live invoices.
Regarding point seven: unless you have a very specific accounting need, the previous year's invoices do not need to be active records in Odoo. Attaching them in PDF to client records is sufficient for historical queries and for responding to a potential AEAT inspection.
After each import, validate a representative sample. Do not trust that the process has finished without errors. Manually check that the data of ten random clients matches what you had in Holded, that the prices of twenty products are correct, that the initial stock matches the physical count.
Phase 5: Parallel operation period
This step generates the most anxiety and is the most necessary. For a reasonable period, you invoice in Odoo and keep Holded active in read-only mode. You compare the results.
What you check during the parallel run:
- That Odoo invoices apply the correct VAT to each type of operation.
- That the accounting entries generated by Odoo are consistent with those generated by Holded.
- That rounding in invoices with many lines does not produce penny differences that later cause problems in reconciliation.
- That corrective invoices (credit notes) work correctly.
- That stock is correctly deducted with each delivery note.
If you find discrepancies, correct them in Odoo before turning off Holded. It is much easier to adjust the configuration when you still have both systems active than when you have already closed the previous one.
The duration of this parallel run depends on the complexity of your operations. For an SME with simple invoicing, a few days of real operation may be sufficient. For companies with multiple warehouses, different VAT types or recurring invoicing, it is advisable to extend it.
Phase 6: Go-live and change management within the team
The day you start invoicing solely in Odoo is a day for logistics, not celebration. Everything must be prepared.
Go-live day checklist:
- Confirm that the bank balance in Odoo matches the actual statement for that day.
- Communicate to recurring clients that the next invoices will arrive in the new format (if anything visual changes).
- Quick briefing for the team: where to do each thing in Odoo, who to call if something doesn't work.
- Holded in read-only mode: do not cancel the licence yet. You will need it for historical queries for the remainder of the fiscal year.
- Confirm that VeriFactu or TicketBAI are sending correctly to the AEAT if applicable.
Changing tools always generates resistance from some team members. Normalise it. Training is not optional; it is part of the implementation. A team that doesn't know how to use Odoo turns a good tool into a problem.
Phase 7: Split fiscal year-end
This is the aspect that most concerns tax advisors, and rightly so. If you migrate mid-financial year, the fiscal year is split between two tools.
How to manage it:
- The months prior to the migration remain in Holded. Export the complete ledger for those months in PDF and structured format and save it with your tax documents.
- The subsequent months are in Odoo.
- For the closure of Modelo 303, Modelo 390, and the year-end closure, your tax advisor will need the data from both systems. Provide them with the exports from Holded and the Odoo reports.
- For the following year, everything will be in Odoo and the problem disappears.
The AEAT has no legal impediment regarding changing invoicing software mid-financial year, provided that invoice numbering is consecutive within each series and that the records comply with the requirements of the current invoicing regulations.
Permanently close your Holded licence once the financial year has closed and you have confirmed with your advisor that everything balances.
What are the common errors to avoid?
Poorly executed migrations have common patterns. These are the ones we see most frequently:
- Migrating without cleaning: importing all Holded data as is, including duplicate customers, discontinued products, and invoices from already closed financial years that are of no use as live data.
- Skipping the parallel run: starting directly in Odoo without a verification period. The first problem appears at VAT closure, and it's too late to adjust without complications.
- Not reviewing the tax configuration before the first real invoice: issuing invoices with incorrect VAT configuration requires issuing corrective invoices and causes problems with the 303.
- Deactivating Holded too soon: losing access to historical data before having the year's financial closure validated.
- Not training the team: Odoo is more powerful than Holded, but also more complex. Without training, the team takes shortcuts that generate inconsistencies in the data.
Frequently asked questions
FAQ
Can I migrate mid-financial year without problems with the Tax Agency?
Yes. The AEAT does not require the change of invoicing software to coincide with the start of the financial year. What it does require is that invoice series are consecutive within each series and each financial year. If you change from Holded to Odoo in, for example, August, the August invoices must continue the numbering of the current year in the same series, or start a clearly differentiated new series. Consult your tax advisor for the most suitable criterion for your case.
What happens to the previous year's invoices I have in Holded?
There is no need to migrate them as active records to Odoo. It is advisable to export them in PDF and structured format, save them as tax documentation, and attach them to each client's record in Odoo if you need quick access. For a potential inspection, the signed PDF file is valid. What you cannot do is simply close Holded and not keep any copy.
Does Odoo comply with VeriFactu and TicketBAI?
Odoo Enterprise with Spanish localisation includes support for VeriFactu, the invoice verification system that the AEAT is progressively implementing. TicketBAI, the mandatory invoicing system in the Basque Country and Navarre, is also supported. At Nextdoo, we ensure that the configuration is active and validated before go-live, especially because the technical requirements of these obligations are precise and a configuration error can lead to penalties.
How long does a migration from Holded to Odoo take?
It depends on the data volume and the operational complexity. An SME with simple invoicing, one warehouse, and fewer than a thousand product references can complete the process in a short timeframe. A company with several warehouses, active eCommerce, and complex recurring invoicing needs more preparation and parallel run time. In any case, the actual timeframe is determined after a preliminary analysis of the current data. We do not provide dates without having seen what needs to be migrated.
Can I do the migration myself without a partner?
Technically, yes. Odoo allows importing data from CSV, and the official documentation covers the required formats. The risk is that an error in the tax configuration or accounting mapping can generate problems that take weeks to detect and correct. For an SME that relies on its daily invoicing, the cost of an error far exceeds the cost of doing it right from the start with a specialised partner.
Does Nextdoo offer team training after the migration?
Yes. Team training is part of the implementation process, not an optional extra. It makes no sense to have Odoo well-configured if the team continues to work as if they were using Holded. We adapt the training to each user's profile: the sales team learns what they need for sales and quotations, the warehouse team learns inbound and outbound management, and the financial manager learns VAT closure and bank reconciliation.
Is it clear to you that Holded no longer meets your needs? If you are at that point, the next step is to conduct an analysis of your current situation before touching anything. At Nextdoo, we audit the data you have in Holded, tell you what can be migrated directly and what needs to be cleaned beforehand, and propose a realistic implementation plan for your type of business.
Request your no-obligation migration analysis
Indicative information. Actual timeframes, costs, and scopes are confirmed after a personalised analysis. JLM Business Solutions SL · B16842831.
Frequently asked questions
Can I migrate from Holded to Odoo mid-financial year without problems with the AEAT?
Yes. The AEAT does not require the change of invoicing software to coincide with the start of the financial year. What it does require is that invoice series are consecutive within each series and each financial year. If you change in August, the invoices for that month must continue the numbering of the current year in the same series, or start a clearly differentiated new series. Consult your tax advisor for the most suitable criterion.
What do I do with the historical invoices I have in Holded?
There is no need to migrate them as active records to Odoo. It is advisable to export them in PDF and structured format, keep them as tax documentation, and attach them to each client's record in Odoo if you need quick access. For a potential AEAT inspection, the PDF file is valid. What you cannot do is close Holded without keeping any copy of that documentation.
Is Odoo Enterprise ready for VeriFactu and TicketBAI in 2026?
Yes. Odoo Enterprise with Spanish localisation includes support for VeriFactu, the invoice verification system that the AEAT is progressively implementing. TicketBAI, mandatory in the Basque Country and Navarre, is also supported. At Nextdoo, we validate that the configuration is active and correct before go-live, because an error in these systems can lead to penalties.
How long does a migration from Holded to Odoo take?
It depends on the data volume and the operational complexity. An SME with simple invoicing and a single warehouse can complete the process in a short timeframe. A company with several warehouses, active eCommerce, or complex recurring invoicing needs more preparation and parallel run time. The actual timeframe is determined after a preliminary analysis of the data. We do not provide dates without having reviewed what needs to be migrated.
Is it feasible to do the migration without an Odoo partner?
Technically, yes, Odoo allows importing from CSV and the official documentation covers the required formats. The risk is that an error in the tax configuration or accounting mapping can take weeks to detect. For an SME that depends on its daily invoicing, that cost far exceeds that of having a specialised partner from the start.
Does Nextdoo train the team after the migration?
Yes, team training is part of the implementation process, not an optional extra. We adapt the training to each user's profile: the sales team learns sales and quotes, the warehouse team learns ins and outs, and the financial manager learns VAT closing and bank reconciliation. It makes no sense to have Odoo well configured if the team doesn't know how to use it.
Frequently asked questions
How long does a migration from Holded to Odoo take?
The time depends on the volume of data and the complexity of your operation, but the complete seven-phase process usually takes between 2 and 4 weeks. The most critical phase is parallel operation, where you validate that everything is working correctly before deactivating Holded.
Can I lose historical data when switching from Holded to Odoo?
No, as long as you follow the organised process of export, transformation, and validated import. The article details how to export clean data and keep the historical tax records intact, even if the change occurs halfway through the financial year.
Is it mandatory to operate with both systems simultaneously during the migration?
Yes, the parallel operation phase is fundamental to validate that Odoo is working correctly before deactivating Holded. During this period, you work with both systems simultaneously to detect problems without affecting the business.
Do I need to configure anything special in Odoo for it to work in Spain?
Yes, Odoo requires configuration with Spanish localisation to comply with tax and accounting regulations. The article dedicates a complete phase to this configuration before importing your data.
What are the most common errors when migrating from Holded to Odoo?
The most common errors are not cleaning the data before importing, not respecting the import order of modules, and not validating the information during the parallel operation phase. The article details these errors and how to avoid them.