ERP migration

Migrate from Tuhund to Odoo ERP

Field-level mapping, validation, and rollback between Tuhund and Odoo ERP. We move data and schema; workflows are rebuilt natively in Odoo ERP.

Tuhund logo

Tuhund

Source

Odoo ERP

Destination

Odoo ERP logo

Compatibility

92%

11 of 12

objects map 1:1 between Tuhund and Odoo ERP.

Complexity

BStandard

Timeline

4-6 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Tuhund to Odoo ERP is a structural migration that resolves fundamental differences in how the two platforms organize business entities. Tuhund uses a multi-branch architecture where the same customer, product, or user can exist with different configurations per branch; Odoo uses a multi-company model with separate database records and user access scoping per company. We resolve that gap during scoping by mapping Tuhund branches to Odoo companies or to a single company with branch stored as a custom field, depending on the customer's operational model. Sales quotations, proforma invoices, and commercial invoices carry line-item detail that we preserve as Odoo sale order and account move lines. Service requests and job cards map to Odoo Helpdesk tickets or Project tasks. Approval workflows scoped to Tuhund departments do not migrate; we deliver a written inventory for the customer's Odoo admin to rebuild as approvals and server actions. Tuhund's attachment listing API does not expose all attachment types, so we audit the attachment export during scoping to flag any file types that require manual retrieval.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Tuhund logo

Tuhund

What's pushing teams away

  • Significant licensing, maintenance, and implementation cost positions Tuhund toward mid-market and enterprise rather than SMB — small organizations may find total cost of ownership prohibitive.
  • Typical 3-6 month implementation timeline is a meaningful project commitment compared with SaaS-first ERPs that promise faster time-to-value.
  • Limited public reviewer presence on G2 and Capterra makes peer validation difficult, especially for buyers outside ECS's existing customer regions.
  • Custom module deployment on top of the core means vendor services are typically required, increasing dependency on ECS for ongoing changes.
  • Pricing is not published, making early-stage budget conversations difficult without a sales engagement.

Choosing

Odoo ERP logo

Odoo ERP

What's pulling them in

  • Modular pay-as-you-grow model with 80+ apps under one database — teams start with CRM and add Accounting, Inventory, or Manufacturing without switching platforms.
  • Free Community edition lets businesses validate Odoo fit before committing to Enterprise licensing costs that scale with user count.
  • Lowest per-user pricing among mid-market ERPs, with a published free tier for one app and Standard plans starting around $24.90 per user per month.
  • Native integration between modules — a confirmed Sales Order automatically updates inventory, invoicing, and accounting without manual re-entry.
  • Strong Odoo Gold Partner ecosystem provides local implementation support, reducing risk for companies without in-house developers.

Object mapping

How Tuhund objects map to Odoo ERP

Each row shows how a Tuhund object lands in Odoo ERP, including any object-level transformations, lookup resolution, or schema-design dependencies.

Typical mapping — final map is confirmed during the sample migration step.

Tuhund

Company / Person

maps to

Odoo ERP

Contact

1:1
Fully supported

Tuhund maintains separate 'company' and 'person' records for B2B and B2C contacts. We map Tuhund Company records to Odoo Contact with the is_company checkbox enabled and the company_name field populated from Tuhund's company_name. Tuhund Person records map to Odoo Contact with is_company disabled. The Tuhund contact type (B2B vs B2C) is preserved in a custom field tuhund_contact_type__c for segmentation and reporting in Odoo.

Tuhund

Branch

maps to

Odoo ERP

Company or Res.partner field

lossy
Fully supported

Tuhund's multi-branch architecture means customers, products, and users can have different configurations per branch. We map branches to Odoo Company records if the customer needs strict data isolation per entity (separate Chart of Accounts, warehouse, or user access). If the customer runs a single legal entity with branch-level reporting tags, we map branch to a custom tuhund_branch__c picklist field on Contact, Product, and Stock Quant. The choice is made during scoping based on how Tuhund's branch data is currently used.

Tuhund

Department

maps to

Odoo ERP

hr.department

1:1
Fully supported

Tuhund departments scope approval workflows on expense claims, purchase orders, and service requests. We export department associations on user records and attach them to hr.employee in Odoo. Approval routing tied to Tuhund departments does not migrate because Odoo Approvals operates on document-level rules rather than department-level hierarchies. We deliver a written inventory of every active approval chain with the recommended Odoo Approvals or server action configuration for the customer's admin to rebuild.

Tuhund

Sales Quotation

maps to

Odoo ERP

sale.order

1:1
Fully supported

Tuhund Sales Quotations map to Odoo sale.order in draft state. Line items transfer with product reference, quantity, unit of measure, and price. The tuhund_quotation_type__c field distinguishes between standard quotation and proforma invoice so that Odoo sale.order records are flagged accordingly. Sales order confirmation in Odoo is gated as a manual action post-migration; we do not auto-confirm migrated quotations.

Tuhund

Commercial Invoice

maps to

Odoo ERP

account.move (Customer Invoice)

1:1
Fully supported

Tuhund commercial invoices map to Odoo account.move with move_type='out_invoice'. Invoice headers, line items with tax breakdown, and totals transfer directly. Tax calculation logic is Odoo-side; we preserve the base amounts and tax amounts as separate lines so that Odoo's tax engine can recompute totals during first posting. We flag any rounding differences exceeding 0.01 per line for the customer's accounting team to review post-migration.

Tuhund

Inventory / Product

maps to

Odoo ERP

product.product

1:1
Fully supported

Tuhund product records map to Odoo product.product with categories mapped to product.category. Stock levels per location transfer to stock.quant records as a static snapshot at migration time. Tuhund material allocation data maps to product MPRouting or product.bom if the customer uses Odoo's manufacturing module; otherwise it is preserved in custom fields for reference. We verify that Tuhund product types (stockable, consumable, service) map correctly to Odoo's product.product type field.

Tuhund

Purchase Order

maps to

Odoo ERP

purchase.order

1:1
Fully supported

Tuhund purchase orders map to Odoo purchase.order with vendor reference, line items, and GRN (Goods Receipt Note) associations preserved as custom fields. PO status (draft, sent, confirmed, done) maps to Odoo state. Goods Receipt Notes in Tuhund map to Odoo stock.picking records with picking_type set to incoming. We resolve vendor records against the Tuhund company/person contacts before PO import so that partner_id is populated on purchase.order.

Tuhund

Service Request

maps to

Odoo ERP

helpdesk.ticket

1:1
Fully supported

Tuhund service requests map to Odoo helpdesk.ticket. Request status, priority, assigned technician, and linked customer contact transfer directly. Tuhund warranty information maps to a custom tuhund_warranty__c field on the ticket. If the customer uses Odoo Project instead of Helpdesk for service tracking, we map to project.task with the project scoped to a services project created during schema setup.

Tuhund

Job Card

maps to

Odoo ERP

project.task

1:1
Fully supported

Tuhund job cards map to Odoo project.task records under a services project. Job card status (open, in progress, closed) maps to Odoo task stage. Technician assignment and time logging migrate to Odoo's timesheet grid if the project is configured for timesheets. Job card-to-service-request linkage is preserved as a custom tuhund_jobcard_id__c field for traceability.

Tuhund

Expense Claim

maps to

Odoo ERP

hr.expense.sheet

1:1
Fully supported

Tuhund expense claims with item-level detail, approval status, and amounts map to Odoo hr.expense.sheet. Expense items migrate as hr.expense.line records with product, quantity, unit price, and tax. Approval status is not migrated as active approval state because Odoo expense approval is destination-side; we set all migrated expense sheets to draft and deliver an approval-chain inventory for the admin to configure in Odoo. Amount totals reconcile against Tuhund totals before import commits.

Tuhund

Project / Task

maps to

Odoo ERP

project.project + project.task

1:1
Fully supported

Tuhund project and task hierarchies map to Odoo project.project and project.task. Task assignees, milestones, and parent-child relationships transfer directly. Custom fields at the project level require schema inspection before migration; we inspect the Tuhund field schema during discovery and create matching custom fields in Odoo before any project data moves. Task timesheets migrate to Odoo's timesheet model if the project has timesheet tracking enabled.

Tuhund

User

maps to

Odoo ERP

res.users

1:1
Fully supported

Tuhund user records carry branch and department associations and role assignments. We export users with their organizational assignments and map them to Odoo res.users. Role mappings are destination-dependent because Tuhund's permission model does not map directly to Odoo's access rights and record rules. We deliver a user-role inventory listing each Tuhund role and recommending the corresponding Odoo access group for the customer's admin to configure post-migration.

Gotchas + challenges

What specifically takes care here

Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.

Tuhund logo

Tuhund gotchas

High

Per-customer module configuration creates schema drift

High

No publicly documented developer API

Medium

Long implementation cycles imply long extraction cycles

Low

Geographic vendor presence affects support cadence

Odoo ERP logo

Odoo ERP gotchas

High

No rollback for CSV imports

High

External ID conflicts on re-import

Medium

Many2many field encoding in CSV imports

Medium

Large export timeouts require batching

Medium

Version schema drift between Odoo releases

Pair-specific challenges

  • Multi-branch data requires structural decision before migration starts

    Tuhund's multi-branch architecture means the same customer, product, or user can exist with different values per branch. Odoo does not have a native branch object; it uses multi-company with separate company records or a tag-based approach. We cannot arbitrarily pick one approach during migration because the choice affects data isolation, user access scoping, reporting, and Chart of Accounts per entity. We pause migration before any records move and present the two structural options with their implications for the customer's specific data. If the customer cannot decide, we default to the tag-based single-company approach to avoid multi-company data isolation issues at go-live.

  • Department-level approval workflows do not migrate

    Tuhund approval chains scoped to departments (on expense claims, purchase orders, and service requests) are configuration data that does not transfer to Odoo. Odoo Approvals uses document-level approval rules, not department hierarchies. We deliver a written inventory of every active approval chain listing the document type, approver role, approval order, and any conditional branches, with recommended Odoo Approvals or server action configuration. Rebuilding these is an admin task post-migration; it is not in scope for the data migration.

  • Tuhund's attachment listing API does not expose all file types

    Tuhund exposes an Attachment Download API for retrieving individual files and an attachment listing endpoint, but the listing endpoint does not surface all attachment types associated with service requests, expense claims, and commercial documents. We audit the attachment export during discovery and pull what is listed, but any files accessible only through direct document links within Tuhund's UI require the customer's admin to export manually. We flag the gap in the scoping report and give the customer a deadline to complete manual attachment export before the migration window.

  • Tax amounts and rounding differences surface at first invoice posting

    Tuhund stores invoice totals including tax amounts. Odoo recomputes tax at posting time based on its tax configuration, which may produce different rounding per line or per document compared to Tuhund's stored totals. We preserve both the Tuhund base amount and the Tuhund tax amount as custom fields on account.move lines so that the accounting team can see the source-system values alongside Odoo's computed values. Any difference exceeding 0.01 per line is flagged for manual review before the invoice is posted.

  • Tuhund custom fields at branch and department level require schema inspection

    Tuhund supports custom fields at the branch and department level, but the field schema is not publicly documented. We inspect the actual Tuhund field definitions during discovery by querying the API schema endpoints and examining a sample of records. If custom fields exist with non-standard data types, we map them to equivalent Odoo custom fields or store them as JSON text fields if no clean type mapping exists. This inspection step adds one to two days to the discovery phase and may require the customer to provide Tuhund admin access for schema inspection.

Migration approach

Six steps for a successful Tuhund to Odoo ERP data migration

  1. Discovery and scoping

    We audit the source Tuhund instance across all modules in scope. This includes listing all branches and their data isolation patterns, cataloging custom fields at branch and department level, reviewing invoice and PO document types and line-item counts, identifying active approval chains, mapping service request and job card statuses, and inspecting the attachment export capability. We produce a written scoping document with the recommended Odoo structure (single-company with tags vs multi-company), a complete object and field mapping matrix, an approval chain inventory, and a data-cleanse checklist for any duplicates or inconsistent records identified during the audit.

  2. Schema design and Odoo structure decision

    We design the destination Odoo schema based on the scoping output. This includes creating product categories matched to Tuhund's inventory categories, configuring the purchase and sales configuration (multi-company or tag-based), creating any custom fields required for Tuhund metadata (branch, document type, original IDs), setting up the chart of accounts, and configuring the appropriate Odoo apps (Sales, Purchase, Inventory, Accounting, Project, Helpdesk) before any data loads. Schema is deployed into a staging Odoo database for validation before production.

  3. Data cleanse and sample validation

    We run a sample import of 50-100 records per object type into the staging Odoo database to verify mapping logic, validate foreign key resolution (Account on Contact, Vendor on PO, Product on Invoice Line), and confirm that Odoo's field validation does not reject records. Any records rejected by Odoo's validation rules are cleaned in Tuhund's source data and re-exported. We also deduplicate contacts by email and company name, and flag any products without a valid category or unit of measure for the customer's admin to resolve before production migration.

  4. Sandbox migration and reconciliation

    We run a full migration into the staging Odoo database using production-equivalent data volume. The customer's team reconciles record counts (Contacts in, Invoices in, POs in, Products in, Service Requests in) against Tuhund's source reports, spot-checks 25-50 random records for field-level accuracy, and validates totals on a sample of invoices. The customer signs off the sandbox migration before we proceed to production. Any mapping corrections or data corrections identified during sandbox reconciliation are applied to the migration pipeline before production run.

  5. Production migration in dependency order

    We run production migration in record-dependency order: product categories first, then products, then contacts (with branch and department metadata), then purchase orders, then sales orders and invoices, then service requests and job cards, then projects and tasks, then expense claims, then attachments. Each phase emits a row-count reconciliation report. Tuhund write access is suspended during the production migration window to prevent new records from entering the source while migration is in progress.

  6. Cutover, validation, and approval inventory handoff

    We freeze Tuhund writes, run a final delta migration of any records created or modified during the migration window, then mark Odoo as the system of record. We deliver the approval chain inventory document and the user-role mapping inventory to the customer's Odoo admin. We do not rebuild Tuhund approval chains as Odoo Approvals configurations; that work is scoped separately and handled by the customer's admin or an Odoo partner. We provide a two-week hypercare window for reconciliation issues discovered by the customer's team during initial Odoo use.

Platform deep dives

Context on both ends of the pair

Tuhund logo

Tuhund

Source

Strengths

  • Broad module footprint (finance, inventory, supply chain, manufacturing, PM, CRM, HRM, analytics) on a single core.
  • Core platform includes meaningful functionality out of the box.
  • Cloud and on-premise deployment for regulated and data-residency-sensitive customers.
  • Multi-region vendor presence (US, Canada, UK, Australia, India).
  • Subscription licensing that scales users and modules over time.

Weaknesses

  • High total cost of ownership positions Tuhund away from SMB.
  • 3-6 month implementation timelines.
  • Limited public reviewer presence.
  • No public developer API — integrations require vendor services.
  • Pricing not published, slowing early-stage evaluation.
Odoo ERP logo

Odoo ERP

Destination

Strengths

  • Modular architecture with 80+ apps sharing one database — add Sales, Accounting, Inventory, and Manufacturing incrementally.
  • Free Community edition for self-hosting with no per-user license cost, backed by an active open-source community.
  • Per-user pricing starting around $24.90/month on Standard, significantly lower than comparable ERPs like NetSuite or SAP.
  • Automatic workflow propagation across modules — a confirmed sales order updates inventory, triggers invoicing, and posts accounting entries without manual steps.
  • Odoo.sh provides a managed cloud hosting environment with CI/CD for custom module deployment and staging databases.

Weaknesses

  • Performance suffers under heavy customization — large implementations with many active modules require dedicated optimization.
  • No single-click migration between Odoo major versions; each release introduces ORM changes, deprecated API calls, and schema revisions requiring manual adaptation.
  • Per-user and per-module licensing costs can escalate unpredictably for growing teams adding multiple apps.
  • Steep learning curve with hundreds of configuration options across dozens of modules creates adoption friction and training requirements.
  • Support tiers on Enterprise have inconsistent response times, pushing some customers toward alternatives with more reliable SLAs.

Complexity grading

How hard is this migration?

Standard ERP migration. 1 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Tuhund and Odoo ERP.

  • Object compatibility

    B

    1 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Tuhund: Not publicly documented.

  • Data volume sensitivity

    B

    Tuhund doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Tuhund to Odoo ERP migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Tuhund to Odoo ERP data migrations

Answers to the questions buyers ask most during Tuhund to Odoo ERP migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your Tuhund to Odoo ERP migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most migrations land between four and six weeks for accounts with under 10,000 contacts, 3,000 invoices, and 5,000 products with a straightforward single-company Odoo structure. Migrations with multi-branch Tuhund setups requiring Odoo multi-company restructuring, complex approval chain inventories, large service request and job card volumes, or manual attachment retrieval move to eight to fourteen weeks because of the schema reconciliation, approval inventory, and attachment audit scope.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Tuhund.
Land in Odoo ERP, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day