Odoo Rescue, ERP Recovery[Launched]

Odoo Rescue: Repairing a Broken Operating System

Odoo Rescue: Repairing a Broken Operating System preview

System Architecture //

Odoo 19Odoo.shPythonXML-RPCBaseLinker APIShopifyAllegro APISendGridQWebMRP

🔹 1. Project Overview

The client was a manufacturing and trading company working with eco-packaging, warehouses, marketplaces, B2B/B2C sales and internal operations in Odoo. The system was already the business hub, but after years of manual edits, third-party modules, imports and live Studio changes, it had turned into a dense operational knot

The owner did not need another small Odoo fix. He needed one system that connected departments, employees, warehouse, manufacturing, sales, email, CRM, marketplaces, e-commerce and final operations into one controlled flow

My role was rescue engineer: enter a chaotic ERP environment, untangle the technical and process debt, and rebuild an end-to-end operating model from raw material intake to finished product sale

🔹 2. What The Client Came With

Infrastructure debt: Odoo was running on Hetzner with a mix of custom and third-party modules, some of which were not ready for the move to Odoo 19
Catalog without a clean model: products were mixed across templates, variants, bundles, packaging, EAN, BaseLinker SKU and warehouse logic. Some records had been created by bad imports as separate duplicates
Polluted contact database: duplicates, empty records, test entries, inconsistent bank details, regions and contact formats
Warehouse and manufacturing without a control structure: BoMs, raw materials, barcodes, storage rooms and label printing existed, but needed stabilization and normalization
CRM and email were not under control: messages disappeared into Discuss or manual workflows, follow-ups were handled by managers by hand, and sales inquiries had no stable path to quotation
Security and quality risks: during the audit I found a historical Followers vulnerability: an external contact had accidentally been subscribed to internal discussions and had been receiving copies of operational correspondence for a long time. The system also had uncontrolled scheduled actions / cron jobs and automations running background operations without a clear owner

🔹 3. Scope Of Work

Move Odoo from Hetzner to Odoo.sh / Odoo Cloud and adapt the system to Odoo 19
Audit custom modules, keep what mattered, remove incompatible pieces, stabilize PBX and UI after the upgrade
Clean contacts, leads, bank details and regions
Normalize product catalog and manufacturing nomenclature: templates, variants, SKU, EAN, packaging, photos, weight, dimensions, raw materials and BaseLinker mapping
Configure warehouse logic: BoM, RAW materials, barcodes, storage rooms, labels and a production-ready structure
Configure attendance and operational discipline: office staff tracked time inside Odoo, while warehouse and production worked through barcode scanning
Build mail and CRM automation: AI routing, lead qualification, deterministic rules, follow-ups and sales draft flow
Prepare e-commerce, B2B/B2C portal, Shopify / Allegro / delivery integrations and tracking layer
Reintegrate the cleaned catalog, warehouse logic and product data back into marketplaces and the online store

🔹 4. Solution And Execution

Infrastructure & Odoo 19 Migration

Audited the old Hetzner environment and Odoo modules folder
Moved ERP to Odoo.sh / Odoo Cloud and upgraded the database to Odoo 19
Adapted custom code and ORM queries to the new core version
Migrated and adapted a set of key custom and third-party modules for telephony, HR, purchasing, internal workflows and service extensions
Removed incompatible telephony and OCA modules from the target architecture so the Odoo 19 setup would not inherit avoidable technical debt

Product Catalog Recovery

Audited the existing catalog state: products, variants, packaging, bundles, raw materials, SKU, EAN, photos, prices, dimensions and BaseLinker mapping were all tangled without one governing logic
Based on technical analysis and data-driven research, prepared several restructuring options with risks and downstream effects for warehouse, marketplaces, e-commerce and manufacturing
After the target model was approved, created a naming convention for everything that could carry a name: products, templates, variants, packages, bundles, raw materials, SKU, EAN logic, photos and attributes
Rebuilt the catalog from a chaotic record pile into a controlled product template → product variant hierarchy where every sellable SKU had a clear role, name, package, EAN, weight, dimensions and BaseLinker connection
Product names were rewritten not only for internal accounting logic, but also for customer search behavior: the data-driven research aligned names and metadata with real search demand, supporting sales growth after the store and marketplace updates
The import mess was handled in context: a wave of 719 badly created products/templates was identified, actually used records were separated from noise, and unused records were safely archived without losing operational data
The result was a maintainable catalog: SKU, names, attributes, photos, metadata, BaseLinker mapping and warehouse logic stopped fighting each other and became a stable base for store and marketplace synchronization

Warehouse, BoM & Barcode Logic

Raw materials were moved into a RAW structure
Created BoMs for finished products and kits
Connected stock quantities to concrete storage rooms
Fixed label printing after the migration to Odoo 19: reports were moved to product.product level, QWeb templates, print file names, barcode fields and variant attributes were corrected
Found and isolated 11 EAN conflicts, with 8 confirmed EAN pairs moved through a backup / plan / rollback / verify pipeline

CRM, Contacts & Database Hygiene

Removed 1380 duplicate contacts, 34 test records and 59 empty cards
Normalized IBAN, BIC/SWIFT and bank addresses for 10 banks
Standardized voivodeships and localization for 11 languages
Prepared cold leads and custom lists for lead generation, CRM outreach and later sales enrichment
Removed CRM noise from automatically created leads: email from existing contacts had to land in the communication history of that contact, not create a new lead every time

Mail Routing, AI Qualification & Sales Automation

Designed and implemented MelonRing AISMR — an Odoo module for inbound email routing, AI qualification, deterministic rules and audit trail
Configured routing logic: new business inquiries create crm.lead with category, assignee, tags, priority and summary, while emails from existing contacts attach to existing records and do not generate duplicate leads
Implemented Poka-yoke rules against mass sending directly through local SMTP
Closed a historical mail.followers leak: incorrect subscriptions were cleaned, external contacts were blocked from sensitive internal objects, and the prevention rule became explicit system behavior
Reviewed scheduled actions / cron jobs: removed redundant or unknowingly active background tasks that duplicated standard logic, recalculated data or created unpredictable load without a business owner
Moved mail infrastructure to SendGrid, verified SPF/DKIM and reduced bounce rate from ~15% to under 1%
Built a sales automation layer: qualification states, draft-input snapshots, partner/product/qty/pricing candidates and manager review before quotation generation

E-commerce & Integrations

Configured Shopify sync, warehouse routes, transit locations and automatic order conversion
Technically prepared FedEx PL, DHL and InPost delivery integrations for rate calculation and label generation
Prepared Odoo E-commerce and B2B portal as a replacement for Shopify
Added a custom Odoo theme layer and MelonRing Meta Pixel tracking for Odoo Website Sale
Prepared Allegro Odoo Sync for importing orders through Allegro REST API
After normalizing products, raw materials, SKU, EAN, photos, weight and dimensions, the updated data was reintegrated into marketplaces and the online store

🔹 5. Technical Stack

ERP Core: Odoo 19, Odoo.sh / Odoo Cloud, Python, XML/QWeb, ORM
Data & Integration: XML-RPC, BaseLinker API, Shopify integration, Allegro REST API, CSV pipelines
CRM & AI: Odoo CRM, mail.thread, crm.lead, OpenAI-style AI qualification architecture, deterministic rule engine
Sales & E-commerce: Odoo Sales, Website Sale, B2B/B2C portal, quotation draft workflow, Meta Pixel
Warehouse & Manufacturing: Inventory, Barcode, MRP, BoM, product.product, product.template, product dimensions, label reports
Communication: Zadarma PBX, SendGrid SMTP, IMAP/SMTP routing, SPF/DKIM, mail followers cleanup

🔹 6. Business Value And Results

ERP stabilized after migration: Odoo was moved from Hetzner to Odoo.sh, upgraded to Odoo 19 and cleaned from incompatible modules
Operations became one flow: the owner received a technical base connecting departments, employees, warehouse, manufacturing, sales, CRM, email and integrations into one system from raw materials to final product sale
Catalog became controllable: around 400 templates and variants were moved into a clean hierarchy, while BaseLinker/Odoo SKU mapping became deliberate rather than blind import logic
Updated data returned to sales: normalized catalog, warehouse logic, photos, SKU, EAN, weight and dimensions were reintegrated into marketplaces and the online store
Database was cleaned: 1380 duplicate contacts, 34 test records and 59 empty cards were removed, with details and regions normalized
Warehouse got a real automation base: BoM, RAW materials, barcoding, storage rooms and labels were moved into a more stable model
Mail reputation was protected: SendGrid + SPF/DKIM reduced bounce rate from ~15% to under 1%
CRM received an automation layer: inbound email routing, AI qualification, follow-up automation and sales draft flow with manager review
Operational risks were reduced: a historical Followers leak was found and closed, dangerous mass mailings were blocked, redundant scheduled actions / cron jobs were cleaned up, and critical QWeb/PBX/Owl 2 migration issues were removed

🔹 7. Current Status

Launched / Technically Ready. The system is technically stabilized, with key modules and integrations prepared. Part of the business effect depends on internal adoption: CRM discipline, warehouse scanning, courier service testing and the habit of working in Odoo instead of falling back to manual processes

Ready to solve a similar challenge?

Building reliable systems requires precision and experience. Let's discuss how surgical engineering can restore pace to your product