ERP migration

Migrate from Intact iQ to Odoo ERP

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

Intact iQ logo

Intact iQ

Source

Odoo ERP

Destination

Odoo ERP logo

Compatibility

100%

12 of 12

objects map 1:1 between Intact iQ and Odoo ERP.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Intact iQ is an on-premise and cloud ERP built for merchants, wholesalers, and distributors in Ireland and the UK, with modules for financials, supply chain, trade counter/EPOS, CRM, and business intelligence. It exposes data via a REST API that supports read/write access to defined endpoints, allowing FlitStack AI to extract customers, suppliers, products, orders, invoices, and stock records in structured batches. Odoo ERP uses a modular object model: res.partner for contacts and companies, product.product for product variants, sale.order and purchase.order for transactions, account.move for invoices, and stock.picking for inventory movements. Odoo's external-ID system enables precise cross-referencing during import, while its ir.model.fields API allows FlitStack to create custom fields on the fly to capture Intact iQ-specific data that has no native Odoo equivalent. We map every standard object and preserve original create_date, write_date, and user_id values as custom fields so reporting continuity is maintained. Workflows, automations, and scheduled tasks in Intact iQ do not migrate — they must be rebuilt as Odoo Studio workflows or server actions post-implementation. Our migration engine uses Odoo's XML-RPC API with batch sizes of 500–1000 records per call, respecting rate limits while maximizing throughput during the delta-pickup window.

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

Intact iQ logo

Intact iQ

What's pushing teams away

  • Customer service response times frustrate users — enquiries can take weeks to resolve, creating bottlenecks during critical periods like month-end or system upgrades.
  • Performance degrades noticeably when the system handles large datasets such as 10,000+ customers with multiple properties and address records, forcing users to export to Excel to find information.
  • Post-implementation support is described as poor by some customers, with implementation teams reportedly lacking product knowledge and delivering reports that do not match demo capabilities.
  • System updates introduce glitches that disrupt daily operations, making users apprehensive about applying new releases.
  • Filtering and search within the ERP screens is insufficient for complex queries, forcing power users to build manual exports to perform analysis.

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

Each row shows how a Intact iQ 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.

Intact iQ

Customer

maps to

Odoo ERP

res.partner (customer)

1:1
Fully supported

Intact iQ customers map directly to Odoo res.partner records with customer=True. The supplier counterpart is a separate Intact iQ entity; both land in the same Odoo table with type differentiation via customer_rank or the is_company flag. Primary address, email, phone, and website transfer directly; parent/child company hierarchies map via parent_id in Odoo.

Intact iQ

Supplier

maps to

Odoo ERP

res.partner (supplier)

1:1
Fully supported

Intact iQ suppliers map to Odoo res.partner with supplier=True. Odoo does not distinguish supplier from customer at the table level — both use the same model — so FlitStack sets the appropriate flag during import. Supplier-specific fields like payment terms and supplier rank are set via the x_studio_ prefixed custom fields or the standard property fields.

Intact iQ

Contact / Account Contact

maps to

Odoo ERP

res.partner (contact)

1:1
Fully supported

Intact iQ contacts associated with companies map to Odoo res.partner records with parent_id pointing to the company partner. Function (job title) maps to function field in Odoo. Multiple contacts per company are supported natively in Odoo's partner model, unlike some ERPs that restrict N:1 relationships. Phone and email fields map directly.

Intact iQ

Product / Stock Item

maps to

Odoo ERP

product.product + product.template

1:1
Fully supported

Intact iQ products with variants decompose into Odoo's two-tier product model: product.template holds the shared product definition (name, categ_id, type, uom_id), while product.product holds the sellable/purchasable variants. Intact iQ product attributes map to Odoo attribute lines on the template. Products without variants create a single product.product with a one-to-one template relationship.

Intact iQ

Sales Order

maps to

Odoo ERP

sale.order + sale.order.line

1:1
Fully supported

Intact iQ sales orders map to Odoo sale.order with partner_id resolved from the customer, date_order set to the original order date, and order lines containing product_id, product_uom_qty, price_unit, and discount. Odoo's onchange mechanism (now deprecated in newer versions) is handled by setting price_unit and taxes directly rather than relying on list_price lookup.

Intact iQ

Purchase Order

maps to

Odoo ERP

purchase.order + purchase.order.line

1:1
Fully supported

Intact iQ purchase orders map to Odoo purchase.order with partner_id resolved from the supplier, date_order from the source document, and order lines with product_id, product_qty, price_unit, and date_planned. Odoo purchase orders require a price_unit to be set explicitly — unlike sales orders, the default is not auto-filled from product standard_price.

Intact iQ

Customer Invoice

maps to

Odoo ERP

account.move (type='out_invoice')

1:1
Fully supported

Intact iQ customer invoices map to Odoo account.move with type='out_invoice'. The invoice number becomes the 'ref' field; the invoice date maps to invoice_date; line items use account_id resolved from the product's income account or the default sale account. Odoo requires journal_id on every move — FlitStack resolves this from the company's default sale journal based on the destination Odoo company.

Intact iQ

Supplier Invoice / Credit Note

maps to

Odoo ERP

account.move (type='in_invoice', 'in_refund')

1:1
Fully supported

Supplier invoices from Intact iQ become Odoo account.move with type='in_invoice'. Credit notes use type='in_refund'. Odoo's vendor bills require invoice_date, partner_id, and line entries with account_id pointing to expense accounts — FlitStack resolves these from the product's cost account or a fallback expense account configured in the migration plan.

Intact iQ

Stock Movement / Warehouse Transfer

maps to

Odoo ERP

stock.picking + stock.move

1:1
Fully supported

Intact iQ stock movements map to Odoo stock.picking records with picking_type_id set to the appropriate warehouse operation (internal transfer, delivery, receipt). stock.move records within each picking carry product_id, product_uom_qty, location_id, and location_dest_id. Odoo's unit of measure must be resolved — FlitStack maps Intact iQ UoM names to Odoo uom.uom records using the product's uom_id and uom_po_id.

Intact iQ

Lead / Opportunity (CRM)

maps to

Odoo ERP

crm.lead

1:1
Fully supported

Intact iQ CRM leads map to Odoo crm.lead. name becomes the lead subject; partner_id is resolved by email match to res.partner; email_from and phone map directly; stage_id is resolved by matching Intact iQ status labels to Odoo stage names within the target pipeline. Odoo stage IDs are integer references — FlitStack creates a stage mapping table during the planning phase before any records are written.

Intact iQ

Custom Fields / Extended Properties

maps to

Odoo ERP

ir.model.fields (custom)

1:1
Fully supported

Intact iQ extended properties that have no direct Odoo equivalent (e.g., customer credit rating, supplier tier classification, product tariff codes) are created as custom fields via Odoo's ir.model.fields API. FlitStack pre-creates these fields before data load, using field_description for the human-readable label and name matching the snake_case convention (x_intact_credit_rating, x_intact_supplier_tier). Existing custom fields in Odoo are detected and reused to avoid duplicates.

Intact iQ

Document Attachments

maps to

Odoo ERP

ir.attachment

1:1
Fully supported

Intact iQ file attachments associated with customers, orders, or invoices are downloaded and re-uploaded to Odoo as ir.attachment records linked to the corresponding res.partner, sale.order, or account.move via res_model and res_id. FlitStack preserves the original filename, mimetype, and create_date. Large files (>25MB per Odoo default limit) are flagged for manual handling or chunked upload.

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.

Intact iQ logo

Intact iQ gotchas

High

REST API requires custom definition setup per object

Medium

No public pricing or trial means scoping requires discovery calls

Medium

Performance collapses on large record sets

Medium

Document attachments are not accessible via REST API

Low

Workflow automation rules are not API-exportable

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

  • CRM lead status values have no native Odoo equivalent and require stage mapping per pipeline

    Intact iQ stores CRM lead status as a flat pick-list (New, In Progress, Qualified, Lost, Won) that may differ from your Odoo pipeline stages. Odoo crm.lead.stage_id is a many2one to crm.stage records that are pipeline-specific — the same status value can have different stage IDs depending on which pipeline a lead belongs to. FlitStack generates a status-to-stage mapping table during planning; if your Intact iQ instance uses more statuses than Odoo has stages, extra statuses are preserved as x_intact_lead_status custom fields on crm.lead and your admin decides how to collapse them post-migration.

  • Odoo requires a journal_id on every account.move — mis-assignment causes invoice creation to fail silently

    Intact iQ invoices do not reference a journal explicitly; the accounting configuration drives journal selection internally. Odoo account.move records are journal-specific from the moment they are created — setting type='out_invoice' without a corresponding journal_id returns a validation error. FlitStack resolves journal_id from the destination company's default sale journal (for customer invoices) or purchase journal (for vendor bills) before writing any account.move records. If your Odoo instance uses multiple journals per company, the mapping plan must specify which journal applies to each invoice type before migration runs.

  • Product variants split across two Odoo models — template-first loading is mandatory

    Odoo enforces referential integrity on product.product: every variant must have a product_tmpl_id pointing to a valid product.template. If Intact iQ products have attribute-based variants, FlitStack must create the product.template record first, then create each product.product variant linked to it. Loading product.product records before their templates causes a foreign-key violation in PostgreSQL. FlitStack sequences the migration as: (1) product.template for all unique products, (2) product.product variants linked to existing templates, (3) update product.template to set has_variant=True if applicable.

  • Intact iQ N:N supplier-customer relationships collapse to one parent_id in Odoo res.partner

    Intact iQ supports many-to-many associations between suppliers and customers (e.g., a distributor who is both a supplier to your business and a customer of your products). Odoo res.partner uses a single parent_id field for company hierarchy — a contact's parent must be a company, and each contact has exactly one parent. FlitStack migrates the most-recently-modified related company as parent_id and surfaces remaining associations as a custom x_intact_supplier_customer_links char field for your admin to rebuild as a separate res.partner.category or related res.partner record post-migration.

  • Workflows, automated tasks, and scheduled jobs in Intact iQ have no Odoo equivalent and must be rebuilt

    Intact iQ's Workflow Conditions and Queries engine and Application Tasks and Scheduling module define rules that trigger actions based on data events — order approvals, stock reorder thresholds, email notifications, and date-based tasks. Odoo Studio workflows, automated actions (ir.cron-based), and server actions provide equivalent functionality but require manual redesign. FlitStack exports Intact iQ workflow definitions as structured JSON files grouped by module so your Odoo administrator or implementation partner can use them as a rebuild reference. This export does not execute in Odoo — it is a documentation deliverable included in the migration package.

Migration approach

Six steps for a successful Intact iQ to Odoo ERP data migration

  1. Audit Intact iQ API endpoints and extract data schema

    FlitStack AI connects to your Intact iQ instance via the REST API defined in Company > Setup > API Definition. We enumerate all available API services — Customers, Suppliers, Products, Sales Orders, Purchase Orders, Invoices, Stock Movements, CRM Leads — and extract the field schema for each. We also pull any extended properties defined via Intact iQ's custom field framework. This schema becomes the source-of-truth mapping document that drives all subsequent steps. If your Intact iQ version uses a legacy API format or has rate-limited endpoints, we flag this in the planning report and adjust batch sizes accordingly.

  2. Pre-create Odoo custom fields and resolve external IDs

    Before any data is written to Odoo, FlitStack creates any custom fields required for Intact iQ extended properties (x_intact_credit_limit, x_intact_supplier_tier, x_intact_create_date, etc.) via Odoo's ir.model.fields API. We also pre-resolve external IDs for country records, UoM records, stage records, and journal records so that foreign-key lookups during import do not create duplicate records. This step ensures that the XML-RPC load phase encounters no validation errors from missing reference data.

  3. Migrate master data: partners, products, templates

    We sequence the migration to respect Odoo's referential integrity: res.partner records (customers and suppliers) load first, followed by product.template records, then product.product variants. Each record receives an external ID (e.g., int_partner_001) that is stored on the record as x_intact_external_id for traceability. This allows downstream records (sales orders, invoices) to reference their related partners and products by external ID rather than by Odoo database ID, which is unknown until after write.

  4. Migrate transactional data: orders, invoices, stock movements

    With master data in place, FlitStack loads sales orders, purchase orders, customer invoices, supplier invoices, and stock movements using Odoo's XML-RPC create() calls in batches of 500–1000 records. Each batch is retried with exponential backoff if Odoo returns a 429 rate-limit response. We resolve partner_id, product_id, account_id, location_id, and stage_id by querying Odoo with the external IDs stored on the source records. Original create_date and user_id values are written to custom fields to preserve audit continuity.

  5. Run sample migration with field-level diff before full commit

    A representative slice of 100–500 records spanning all object types migrates first. FlitStack generates a field-level diff report comparing source values from Intact iQ against the loaded values in Odoo, flagging any transformation discrepancies above a configurable threshold (default 0.01% difference for numeric fields, exact match for dates and strings). You review the diff report and approve before the full migration run commits. This gate prevents a bulk load of mis-mapped data.

  6. Cut over with delta-pickup and post-migration validation

    The full migration runs against your Odoo instance. A delta-pickup window (typically 24–48 hours) captures any records created or modified in Intact iQ during the cutover — we re-query the Intact iQ REST API for records with write_date after the initial extraction timestamp and insert any new or changed records. FlitStack generates a reconciliation report counting records by object type in both systems. One-click rollback reverts all migration-created records if the report reveals discrepancies above your defined tolerance.

Platform deep dives

Context on both ends of the pair

Intact iQ logo

Intact iQ

Source

Strengths

  • Integrated trade counter and EPOS unify point-of-sale with back-office financial and inventory modules.
  • Comprehensive multi-branch and multi-warehouse inventory management with ABC stock-take and aged stock reporting.
  • Workflow automation rules can be configured without developer involvement through the application layer.
  • Mobile access via the integrated app provides real-time visibility for field-based sales and warehouse teams.
  • Business intelligence dashboards offer KPI tracking and personalised reporting across the enterprise.

Weaknesses

  • Performance degrades significantly when handling large datasets exceeding approximately 10,000 customer or stock records.
  • Customer service response times are a common complaint, with resolution taking weeks for complex issues.
  • System updates have been known to introduce glitches that disrupt live operations.
  • Built-in filtering and search capabilities are insufficient for complex data queries, pushing power users to Excel exports.
  • Implementation quality is inconsistent, with some customers reporting a lack of product knowledge from the implementation team.
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 Intact iQ 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

    Intact iQ: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Intact iQ to Odoo migrations complete in 48–72 hours for under 50,000 total records (customers, suppliers, products, orders, invoices). Odoo migrations involving 500,000+ records, multi-company setups, or extensive historical invoice archives extend to 7–14 days. The longest single step is typically resolving external IDs for GL account codes, UoMs, and stage records — a planning step that happens before data movement and can add 3–5 days for complex chart-of-accounts mappings.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Intact iQ.
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