ERP migration

Migrate from Atlas ERP to Odoo ERP

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

Atlas ERP logo

Atlas ERP

Source

Odoo ERP

Destination

Odoo ERP logo

Compatibility

92%

11 of 12

objects map 1:1 between Atlas ERP and Odoo ERP.

Complexity

BStandard

Timeline

6-10 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Atlas ERP to Odoo ERP is a platform transition from a Bulgarian client-server MS SQL Server system to a Belgian open-source modular ERP running on PostgreSQL. Atlas has no public API, so every extraction requires direct MS SQL read with db_datareader access. We sequence the migration in dependency order — master data first (Accounts, Warehouses, Items, Employees), then transactional records (Sales Orders, Purchase Contracts, Production Orders, Payroll Runs) — while suppressing Atlas's automatic inter-module posting to prevent duplicate journal entries in the destination Finance module. BOM explosion tables and routing steps migrate as separate objects and are linked to the destination Item during import. Odoo's Workflow automations, server actions, and custom modules do not migrate as code; we deliver a written inventory of these for the customer's admin to rebuild. We do not migrate custom report definitions or BPM process definitions stored in proprietary Atlas UI formats.

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

Atlas ERP logo

Atlas ERP

What's pushing teams away

  • The platform is narrowly known in Bulgarian and Eastern European markets, making it difficult to hire staff already familiar with Atlas ERP compared to more globally distributed systems.
  • As a client-server on-premises system, it lacks the automatic updates, mobile-first UX, and remote-access simplicity of cloud-native ERP competitors, driving teams toward SaaS alternatives.
  • Custom procedure development, while flexible, becomes a long-term maintenance risk when the original developer is no longer available to support bespoke code written for the MS SQL layer.
  • Integration with modern third-party SaaS tools (Shopify, Stripe, Salesforce) requires custom middleware or API workarounds since there is no native connector ecosystem.
  • Support responsiveness is limited to business hours in a single time zone, which frustrates companies with global operations or after-hours manufacturing runs.

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 Atlas ERP objects map to Odoo ERP

Each row shows how a Atlas ERP 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.

Atlas ERP

Chart of Accounts

maps to

Odoo ERP

account.account

1:1
Fully supported

Atlas COA is stored as a hierarchical table in MS SQL with account codes, names, types, and optional parent references. We extract the full account tree and map to Odoo account.account with code preserved, name remapped, and user_type_id set by type classification (receivable, payable, asset, liability, equity, revenue, expense). Foreign currency account flags migrate if Atlas uses multi-currency; otherwise accounts default to the company's base currency. Account is created first in all migration sequences because journal entries and all financial records depend on it.

Atlas ERP

Journal Entries

maps to

Odoo ERP

account.move

1:1
Mapping required

Atlas posts all module transactions automatically to the Finance module. We extract journal_headers and journal_lines together and map to Odoo account.move (with move_type = entry for manual journals, or sale/purchase/receipt for invoice-matched entries). We suppress auto-posting on migrated operational records and migrate only open-period journal entries during migration. Historical journal entries for closed periods are exported as reference material; the customer decides whether to enter them manually or skip based on audit requirements.

Atlas ERP

Warehouses

maps to

Odoo ERP

stock.warehouse

1:1
Fully supported

Atlas warehouses store location_id, name, address, and optional cost-center linkage. We export as-is and create Odoo stock.warehouse records with name, code (short code from Atlas warehouse_id), address mapped to partner_id, and a corresponding stock.location record of type internal. Multiple warehouses in Atlas create multiple Odoo warehouses, each with their own routes and push/pull rules configured post-migration.

Atlas ERP

Items

maps to

Odoo ERP

product.product + product.template

1:1
Mapping required

Atlas item masters store product_code, name, type (stockable, consumable, service), unit of measure, cost price, and sales price. We export the item master and join the bom_lines table to capture Bill of Materials for manufactured goods. The item migrates as product.template (the canonical product definition) with product.product variants if Atlas uses variant dimensions. Routing steps from the routing_steps table attach to the mrp.bom as operations.

Atlas ERP

Bill of Materials

maps to

Odoo ERP

mrp.bom

1:1
Fully supported

Atlas BOM data lives in companion tables (bom_headers, bom_lines) separate from item masters, linked by item_code. A naive export of item masters misses production capability. We join bom_headers and bom_lines to the item export, preserve the bom type (kit, standard, phantom), and map each component line to mrp.bom.line with product_id resolved to the migrated product.product reference and quantity mapped. Routing steps map to mrp.workcenter.line on the destination BOM.

Atlas ERP

Production Orders

maps to

Odoo ERP

mrp.production

1:1
Mapping required

Atlas production orders link to the Production Planning module with status lifecycle (planned, released, in-progress, closed), routing steps, and consumed/issued quantities. We preserve the order header, routing steps, and material consumption records. We map the Atlas production state to Odoo mrp.production state (draft, confirmed, progress, done, cancel). Work orders within the production order are created from the routing steps mapped to mrp.workorder.

Atlas ERP

Sales Orders

maps to

Odoo ERP

sale.order

1:1
Fully supported

Atlas sales orders store a header (order_id, customer, order_date, terms) and line table (item_code, quantity, price, discount). We export the full order header and line detail with associated customer record, preserving open/closed status. Open orders migrate as sale.order in draft state; the customer reviews and confirms them in Odoo to trigger procurement or production. Closed orders migrate as sale.order in done state for historical reference.

Atlas ERP

Purchase Contracts

maps to

Odoo ERP

purchase.order

1:1
Fully supported

Atlas purchasing module stores contract headers, line items, supplier linkage, and delivery schedule dates. Pending delivery lines are flagged as back-orders in Odoo. Contracts with blanket order characteristics map to purchase.requisition if the customer chooses to use Odoo's blanket order flow. We preserve supplier reference numbers, payment terms, and incoterms from the Atlas purchasing module.

Atlas ERP

Customers / CRM

maps to

Odoo ERP

res.partner

1:1
Fully supported

Atlas CRM stores customer company records with contact persons, addresses, responsible sales person, and lifecycle stage. We export the full contact hierarchy and map to Odoo res.partner (with customer_rank set for companies, supplier_rank set for vendors, and individual contact persons as child partners under the company partner). Address fields map to street, city, state_id, country_id, and zip. Sales responsible person maps to Odoo's assigned user field.

Atlas ERP

Employees

maps to

Odoo ERP

hr.employee

1:1
Fully supported

Atlas employee records include name, department, position, employment status, and salary grade. We map these to Odoo hr.employee with department preserved as hr.department (created first), job title mapped to job_id, and active/inactive status from Atlas employment status. Salary grade and compensation details migrate as hr.contract records with wage and struct from a mapped salary structure.

Atlas ERP

Payroll Runs

maps to

Odoo ERP

hr.payslip

1:1
Mapping required

Atlas payroll history is stored in a separate module with period-based gross/net breakdown, deductions, and employer contributions. We export run summary and line-by-line detail and map to Odoo hr.payslip with reference to the appropriate hr.contract, salary structure, and worked_days input lines. Note that Odoo Payroll (Enterprise app) must be activated in the destination; Community deployments cannot host payroll data natively and should plan for an external payroll system or Odoo.sh Enterprise.

Atlas ERP

Custom Properties

maps to

Odoo ERP

ir.model.data + custom fields

lossy
Mapping required

Atlas stores user-defined fields in companion tables or extra columns not exposed in the standard UI. We run a pre-migration schema diff against the base Atlas table definitions to detect shadow columns, then include discovered extra columns in the export scope. These migrate as Odoo custom fields (ir.model.fields with track_visibility set to oncreate) on the relevant model, or as ir.model.data XML records if they require static definition. Customers confirm known custom fields during scoping so no shadow columns are missed.

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.

Atlas ERP logo

Atlas ERP gotchas

High

No public API — migration requires direct SQL read

High

Automatic inter-module posting creates duplicate ledger entries

Medium

Holding structure is stored as a self-referential company table

Medium

BOM and routing data live in separate tables from item masters

Medium

Custom fields not surfaced in the standard export UI

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

  • No Atlas API — migration requires direct MS SQL read with privileged access

    Atlas ERP has no documented REST or GraphQL API. All migrations read directly from the MS SQL Server database using a privileged SQL account with db_datareader permission scoped to the Atlas database. If the customer cannot provide direct database credentials or their IT team blocks the connection, migration is blocked. We coordinate with the customer's IT team to establish a read-only connection, validate the schema against our pre-migration discovery, and proceed only after confirming we can reach all required tables (including companion and shadow tables for BOM, routing, and custom fields). VPN or remote desktop access to the Atlas server may be required for on-premises deployments.

  • Automatic inter-module posting creates duplicate journal entries in the destination

    Every transaction in Atlas's Sales, Purchasing, Warehouses, Production, and Payroll modules automatically generates journal entries in the Finance module. When we migrate both the operational records (Orders, Productions, Payroll runs) AND the finance records, the automatic posting can create duplicate ledger rows in the destination if Odoo's account automatic posting is enabled for the corresponding journals. We sequence the migration to migrate operational modules first with auto-posting suppressed on the destination journals, then migrate finance records only for the open period after go-live. Historical journal entries for closed periods are exported as reference CSVs for manual entry or audit-file retention rather than loaded into Odoo.

  • Holding structure and multi-company setup requires parent-first insert ordering

    Atlas supports multi-company and holding structures using a self-referential company table where parent_company_id points to the holding entity. Odoo implements multi-company via the res.company model with inter-company rules and database sharing options. We walk the Atlas company tree recursively during extraction and create parent companies in Odoo first (res.company with parent_id = null), then subsidiaries in child-first order to satisfy foreign-key constraints. Inter-company transaction accounts and elimination journals must be configured in Odoo post-migration as part of the holding-structure setup.

  • BOM and routing tables are separate from item masters and require a joined export

    Atlas Bill of Materials and routing step definitions for production orders are stored in companion tables (bom_lines, routing_steps) linked by item_code rather than as sub-objects on the item master. A naive export of just the item master will drop all production capability for manufactured goods. We join the bom_headers, bom_lines, and routing_steps tables to the item export during extraction and map them to Odoo mrp.bom and mrp.workcenter.line records, resolving product_id references to the migrated product.product IDs at import time.

  • Odoo PostgreSQL schema differs significantly from Atlas MS SQL schema — field type mapping requires care

    Odoo stores monetary amounts as numeric(19,4) in PostgreSQL, dates as date without time zone, and timestamps as timestamp with time zone. Atlas MS SQL may store monetary data as money or decimal, dates as datetime2, and may use Bulgarian or regional collation settings that affect string sorting and uniqueness constraints. We normalize all monetary fields to Odoo's numeric standard, convert datetime values to Odoo's expected timezone-aware format, and validate character encoding (UTF-8) before loading. Collations and index tuning for the destination PostgreSQL database are handled separately by the customer's DBA or Odoo.sh hosting team.

Migration approach

Six steps for a successful Atlas ERP to Odoo ERP data migration

  1. Discovery and database access validation

    We audit the Atlas MS SQL Server database across all modules in use (Finance, Warehousing, Production Planning, CRM, HRM, Payroll, BPM) and validate direct SQL connectivity with a read-only account. We run a schema diff against base Atlas table definitions to identify companion tables and shadow columns (BOM lines, routing steps, custom fields, inter-module posting tables). We document the holding structure by walking the self-referential company table, capture the full Chart of Accounts hierarchy, and inventory production orders, BOM levels, payroll runs, and open vs closed transaction counts. The discovery output is a written migration scope and a pre-migration readiness checklist confirming database access, IT approval, and go-live date constraints.

  2. Destination Odoo schema design and configuration

    We design the destination Odoo database schema. This includes activating the relevant Odoo apps (Accounting, Inventory, Manufacturing, CRM, HR, Payroll), configuring the Chart of Accounts to match the Atlas COA structure, setting up warehouses (stock.warehouse with corresponding stock.location), creating product categories and product templates with the migrated BOMs, configuring multi-company settings if Atlas had a holding structure, and setting up the payroll structure (salary rules, structures, contracts). For self-hosted deployments, we provision the PostgreSQL database; for Odoo.sh, we set up the project and branch. All configuration is validated in a staging environment before production migration.

  3. Master data migration in dependency order

    We migrate master data first in strict dependency order: Users (from Atlas employee records), Departments (hr.department from Atlas organizational structure), Companies (res.company with parent-first ordering for holdings), Warehouses (stock.warehouse), Product Categories, Products and BOMs (product.template, product.product, mrp.bom, mrp.workcenter, mrp.workcenter.line), Work Centers, Employees (hr.employee with department and job linkage), and Contracts (hr.contract with salary structure). Each phase emits a row-count reconciliation report and a spot-check of 20-30 records against the Atlas source. Corrections happen at this stage, not in production.

  4. Transactional record migration and auto-posting suppression

    We migrate open Sales Orders (sale.order), Purchase Contracts (purchase.order), and Production Orders (mrp.production) in that order, with each record type loaded as draft in Odoo for customer review before confirmation. We suppress Odoo's automatic journal posting on the corresponding accounts during this phase so that sales and purchase document posting does not create duplicate ledger entries alongside any separately-migrated journal lines. Production orders are loaded in confirmed state with work orders generated from the migrated routing steps. Historical closed orders migrate as done records for reporting continuity.

  5. Financial record migration and payroll history

    Journal entries for the open accounting period migrate as account.move records with move_type set appropriately. We skip historical journal entries from closed periods; these are exported as reference CSVs. Payroll runs migrate as hr.payslip records with line detail (hr.payslip.line) covering gross, deductions, and net. Note that Odoo Payroll requires the Enterprise app; Community deployments should plan an alternative payroll system or Odoo.sh Enterprise subscription before this phase begins.

  6. Cutover, delta sync, and automation rebuild handoff

    We freeze Atlas writes during cutover, run a final delta migration of any records modified during the migration window (typically within 24-48 hours of cutover), then enable Odoo as the system of record. We deliver a written inventory of Odoo Workflows, Server Actions, and automated actions that the customer's admin rebuilds in Odoo's Studio or through custom Python add-ons. We do not rebuild Atlas BPM processes, custom stored procedures, or report definitions as code. We support a one-week hypercare window where we resolve reconciliation issues raised by the customer's team. Post-hypercare, the customer owns Odoo administration, workflow configuration, and any new integrations.

Platform deep dives

Context on both ends of the pair

Atlas ERP logo

Atlas ERP

Source

Strengths

  • MS SQL Server foundation provides familiar tooling, strong transactional integrity, and straightforward backup-and-restore for IT teams already running the Microsoft stack.
  • Modules share a single database with automatic inter-module posting, ensuring that sales, purchasing, inventory, and finance stay in sync without manual reconciliation entries.
  • The holding structure and multi-company support with inter-company transaction handling is built into the core data model rather than bolted on as an afterthought.
  • Per-user pricing that decreases at higher tiers makes it cost-predictable for growing mid-market companies without per-transaction or per-module surprise billing.
  • Production planning, BOM management, and warehousing are integrated natively rather than requiring a separate manufacturing module or third-party add-on.

Weaknesses

  • No publicly documented REST or GraphQL API — all data access requires direct MS SQL Server connectivity, limiting integration options for cloud-first or SaaS-centric architectures.
  • The client-server architecture means no real multi-device, mobile-native experience; remote users typically rely on VPN or remote desktop access.
  • Customer reviews and community content are extremely scarce, making independent evaluation of real-world reliability and support quality difficult before committing.
  • The platform appears to serve almost exclusively the Bulgarian and Eastern European market, creating long-term vendor-lock-in risk if AS Systems reduces investment or support.
  • Customizations live in MS SQL stored procedures, which are difficult to version-control, audit, and port to newer versions of the application during upgrades.
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. 2 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 Atlas ERP and Odoo ERP.

  • Object compatibility

    B

    2 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

    Atlas ERP: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your Atlas ERP 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 Atlas ERP to Odoo ERP data migrations

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

Can't find your answer?

Walk through your Atlas ERP 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 six and ten weeks for companies with under 15 employees, 5,000 items, and clean master data. Migrations with multi-company holding structures, deep BOM hierarchies, multiple production facilities, or multi-year payroll history move to fourteen to twenty-four weeks because of parent-record resolution complexity, BOM explosion sequencing, and inter-company transaction reconciliation. The timeline also depends on Odoo edition selection (Community vs Enterprise), hosting model (self-hosted vs Odoo.sh), and how quickly the customer's IT team grants MS SQL database access for the read-only migration account.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Atlas ERP.
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