Custom code breaks quietly
Community apps and one-off customisations reach into internals that change between versions. Each module gets ported and tested on staging — not patched on production and hoped for.
Independent Odoo migration practice
Database migration for Odoo 13 through 18 — version upgrades, custom module porting and data verification. Rehearsed on a copy of your database, cut over on your schedule, checked down to the last record.
The reality
Every database is custom in the same way: a module written in 2017, a report nobody wants to lose, a model that moved three versions ago. A generic upgrade path can't account for any of it.
Community apps and one-off customisations reach into internals that change between versions. Each module gets ported and tested on staging — not patched on production and hoped for.
A migration that "mostly worked" corrupts records you only find months later. Record counts, field-level checks and reports are compared before and after.
Your team still has to work on Monday. Cutovers are rehearsed, timed and scheduled around your calendar, with a rollback you can trigger in minutes.
Services
Whether it's the next Odoo version or off a legacy system, the work is the same: move the data, keep the custom code alive, and prove nothing went missing.
Odoo 13 → 18, Community and Enterprise. Standard modules go through the official upgrade service or OpenUpgrade; everything else through careful, tested work.
Deprecated APIs replaced, views and reports rebuilt, migration scripts written where the data model moved. Clean inheritance, so the next upgrade is easier.
Legacy ERP or an older Odoo, transformed and loaded — then checked: counts, spot checks and reports compared before anything goes live.
Before any code moves: an audit of custom modules, database size, integrations and risks, with a written plan and a fixed quote.
Migrations surface slow queries and new bugs. PostgreSQL tuning, indexing and hands-on support through the first weeks after go-live.
The process
Nothing touches your live database until it has been through all of this. That's not a sales line — it's the order of operations.
I audit the database, custom modules and integrations, then give you a written plan: risks, timeline and a fixed quote.
Production is cloned to staging. The upgrade runs there — never on production — and you can test it as long as you need.
Every custom module is ported, tested and versioned. Migration scripts handle the data where the model changed.
Counts, checks and reports compared side by side. If something doesn't match, we find out before cutover — not after.
The switch is rehearsed and timed on staging. On the day it's a runbook, not an experiment — with rollback ready.
I stay through the first working days, fix what appears, then hand over documentation your team can use.
Selected work · Manufacturing
Fifty custom modules, ten years of history, and production planning running on the database every day. The upgrade couldn't interrupt the factory — so it didn't. I ported and cleaned up the custom code in phases, tuned the database, and ran the old and new systems in parallel before the switch.
Read the full case studyIT Director · Global manufacturing enterprise"Our Odoo v14 to v16 migration was handled flawlessly. With 500+ users and critical production systems, zero downtime was essential — Babatope delivered exactly that, plus significant performance improvements."
Questions
Straight answers to the things that usually decide whether a migration happens.
Mostly 13 through 18, Community and Enterprise. Older versions and legacy ERP systems are usually still doable — the assessment tells us for sure.
A typical database takes 3–8 weeks from assessment to go-live, depending on custom modules and data volume. Straightforward upgrades with no custom code can be much faster.
Cutovers are measured in hours and rehearsed beforehand. Most run over a weekend, so there's no downtime during business hours — and the old system stays available until you're satisfied.
We roll back in minutes and fix it on staging. The old system is untouched until the new one has proven itself — nobody works on a broken system.
Both. Custom modules are usually the bulk of the work: deprecated APIs replaced, views and reports rebuilt, and migration scripts where the data model changed.
It depends on custom code, data size and integrations, which is why the assessment comes first. You get a fixed quote before any work starts — no hourly surprises.
Writing
How I build frontend pieces in Odoo 17 with OWL: module setup, templates, hooks, services, forms, dialogs, field widgets and tests, plus the mistakes that cost...
The base controller, API key model, error handling and rate limiting I copy into every Odoo project that needs a REST API, plus the reasons behind...
Most slow Odoo systems I get called in to fix have the same few PostgreSQL problems. Here's what I check first, and what actually made a...
Next step
Tell me what you're running — version, size, the modules you can't live without — and you'll get an honest read on what a migration takes.
Replies within 24 hours, usually faster · Remote, worldwide