CRM migration

Migrate from Termene to Odoo CRM

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

Termene logo

Termene

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

92%

11 of 12

objects map 1:1 between Termene and Odoo CRM.

Complexity

BStandard

Timeline

3–5 days

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Termene is a Romanian business-intelligence platform that aggregates financial and legal data on companies from official sources — annual reports, VAT status, debt registries, payment behavior. It operates as a watch-and-monitor tool rather than a CRM; there are no leads, opportunities, pipelines, or sales-automation features. Odoo CRM models business relationships through crm.lead (for incoming leads), res.partner (for contacts and companies), and crm.lead2opportunity convert wizard. The migration must translate Termene's flat company records into Odoo's relational model — contacts linked to partners, with fiscal data attached as custom fields. We map Termene's company_name, fiscal_code, registration_number, address, revenue, employee_count, debt_flags, and payment_history into Odoo res.partner fields plus custom_char fields. Because Termene has no native API, we extract via CSV export and bulk-load into Odoo through the XML-RPC interface with field-type validation. Workflows and automations are not applicable — Termene has none. We surface all Termene-derived data as read-only custom fields on Odoo partners for reference by the sales team.

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

Termene logo

Termene

What's pushing teams away

  • Termene covers only Romanian companies, making it unsuitable for businesses with international counterparties and forcing teams to maintain a second intelligence tool for cross-border risk.
  • No documented public API means data cannot be programmatically exported, limiting automation and forcing manual report downloads for any migration out.
  • Absence of pricing transparency on the website requires sales contact to obtain a quote, creating friction for budget-conscious SMBs evaluating the platform.

Choosing

Odoo CRM logo

Odoo CRM

What's pulling them in

  • Teams choose Odoo CRM for its modular architecture — one base install with one-click app additions means they can adopt CRM alone and add accounting, inventory, or sales later as the business grows.
  • Small businesses pick Odoo because the Community edition is free and open-source, with no per-user or contact limits, allowing full evaluation before committing to a paid Enterprise tier.
  • The drag-and-drop Kanban pipeline and AI lead scoring are highlighted across G2 reviews as concrete features that make lead management faster and more visual than spreadsheet-based workflows.
  • Odoo's native integration with email, live chat, SMS, VoIP, and WhatsApp means inbound leads from multiple channels feed into a single pipeline without third-party middleware.
  • Companies in retail, supply chain, and construction value that Odoo's CRM module shares the same PostgreSQL database and UI as its ERP modules, eliminating data silos between sales and operations.

Object mapping

How Termene objects map to Odoo CRM

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

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

Termene

Company Record

maps to

Odoo CRM

res.partner

1:1
Fully supported

Termene company records map directly to Odoo res.partner records. The partner is created as a company-type partner (is_company=True) so child contact records can be attached. Name, address, and registration fields map directly. This direct mapping preserves the original Termene identifiers and ensures downstream reports can reference the same company across both systems.

Termene

Contact Name

maps to

Odoo CRM

res.partner (child contact)

many:1
Fully supported

When Termene provides contact-level data (person name alongside company), we create a child res.partner record linked via parent_id to the company partner. Email and phone attach to the contact; company fiscal data stays on the parent. The child contact inherits the company’s address unless a specific location is provided in the Termene data.

Termene

fiscal_code (CUI/CIF)

maps to

Odoo CRM

res.partner.vat

1:1
Fully supported

Romanian company fiscal identifier (CUI) migrates to Odoo's VAT field on the partner record. Odoo validates VAT format using Romanian localization rules when the l10n_ro module is installed. If l10n_ro is not present, the VAT field remains editable without validation, and the CUI value is stored as a plain string.

Termene

registration_number

maps to

Odoo CRM

res.partner.ref

1:1
Fully supported

Company registration number (ONRC) maps to the Odoo ref field. The ref field is free-form and used by Romanian implementations to store ONRC registration numbers alongside VAT. This allows finance and compliance teams to reference the official registry entry directly from the partner form, streamlining audit processes.

Termene

annual_revenue

maps to

Odoo CRM

custom float field on res.partner

1:1
Fully supported

Termene financial metrics (annual revenue in RON) have no native Odoo equivalent. We create a custom float field x_annual_revenue on res.partner and store the Termene value for reference by the sales team. The field appears on the partner’s form and can be included in Odoo reports for revenue-based segmentation.

Termene

employee_count

maps to

Odoo CRM

custom integer field on res.partner

1:1
Fully supported

Employee count from Termene migrates to a custom integer field x_employee_count on res.partner. Used for segmentation and territory planning in Odoo. This metric enables managers to prioritize outreach based on company size, allocate resources efficiently across regions, and build dynamic groups within Odoo’s reporting tools.

Termene

debt_flag / datorii

maps to

Odoo CRM

custom boolean field on res.partner

1:1
Fully supported

Termene debt flags (whether a company has reported debts) map to x_has_debts boolean on res.partner. The flag surfaces in Odoo's partner list view for risk-aware selling. Sales reps can filter the partner list to display only high-risk accounts, enabling proactive follow-up and informed pricing decisions.

Termene

payment_history / intarzieri

maps to

Odoo CRM

custom char field on res.partner

1:1
Fully supported

Payment delay indicators from Termene (e.g., 'intarzieri 30-90 zile') migrate to x_payment_status char field. Stores the last reported payment behavior from Termene's registry. This information helps the collections team prioritize outreach, and it can be used in Odoo’s automated actions to trigger reminders when payment delays exceed defined thresholds.

Termene

company_status (active/inactive)

maps to

Odoo CRM

res.partner.active

1:1
Fully supported

Termene active/inactive company status maps to Odoo's active boolean. Inactive companies in Termene can be archived in Odoo (active=False) rather than deleted, preserving historical record. Archived partners remain visible in historical quotations, invoices, and lead reports, ensuring data continuity and supporting compliance audits.

Termene

website / domain

maps to

Odoo CRM

res.partner.website

1:1
Fully supported

Company website from Termene maps directly to Odoo's website field on the partner. Odoo uses this for lead enrichment and website tracking integration. With the website field populated, the CRM can automatically pull company details from Odoo’s built-in website visitor analytics, enhancing lead scoring and personalization.

Termene

address fields (street, city, county)

maps to

Odoo CRM

res.partner (address fields)

1:1
Fully supported

Street, city, state, zip, country map to Odoo's address fields on partner. When Termene provides county (judet), we map it to state_id using Romanian localization if l10n_ro is configured. If l10n_ro is absent, the county value can be stored in a custom char field to preserve the geographic detail for reference.

Termene

source_tag

maps to

Odoo CRM

custom char field on res.partner

1:1
Fully supported

Termene tracking identifier or source tag (e.g., 'termene_monitor') is stored in x_data_source char field on res.partner to indicate the record originated from Termene rather than inbound. This field is useful for filtering reports to show only Termene-sourced partners, and it can be used in Odoo’s workflow rules to apply specific routing or tag assignments.

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.

Termene logo

Termene gotchas

High

No public API for data export

High

Alert and notification history is not exportable

Medium

Data model schema not publicly documented

Odoo CRM logo

Odoo CRM gotchas

High

Odoo.sh version gating blocks assisted migrations from trial

High

Enterprise modules fail to install on Community after database restore

Medium

Custom module view inheritance breaks between Odoo major versions

Medium

Custom fields risk losing their application context on Community

Low

API access for Community is gated behind the Custom Plan

Pair-specific challenges

  • Termene has no public API — data comes via CSV export only

    Termene does not expose a public REST or XML-RPC API for automated data extraction. All migration runs against a CSV export generated from the Termene platform. The CSV format may vary by export configuration — column headers, delimiter, and encoding (UTF-8 vs. Windows-1252 for Romanian special characters) must be normalized before Odoo XML-RPC bulk load. We build a pre-processing step to normalize the export before field mapping begins. Our script also logs any encoding mismatches for later review.

  • Romanian fiscal identifiers (CUI) require l10n_ro validation

    Odoo's VAT field applies validation rules when l10n_ro (Romanian localization) is installed. A CUI digit-checksum validation runs on save — records with malformed CUI codes from Termene will trigger validation errors during bulk load. We pre-validate all CUI values against the Romanian algorithm and flag invalid ones before the Odoo load step so they can be corrected or loaded with validation disabled. During pre-validation we also capture the original Termene entry for each flagged record, allowing your team to decide whether to update the source or accept a note in the partner's x_vat_status field.

  • Termene company records have no native owner or user assignment

    Termene is a monitoring tool, not a CRM — company records have no owner_id, no assigned user, and no team. In Odoo CRM, every res.partner and crm.lead has an assigned user_id. We assign all migrated records to a configurable fallback user (your Odoo admin specifies this) or resolve ownership by matching contact email to Odoo system users. Unmatched records land under the fallback owner. This approach ensures that every partner and lead appears in the appropriate sales rep’s pipeline view and can be routed automatically using Odoo’s team assignment rules.

  • Custom fields on res.partner must be created before bulk load

    Odoo requires custom fields to exist on the model before data can be written to them via XML-RPC. The financial and monitoring fields from Termene (x_annual_revenue, x_has_debts, x_payment_status, x_termene_updated, etc.) are not standard Odoo fields — they must be created in Odoo Settings > Technical > Custom Fields before the migration runs. FlitStack delivers a custom-field creation manifest as part of the pre-migration schema plan. The manifest includes field names, data types, default values, and suggested visibility settings for each Odoo user role.

  • Odoo partner.active flag controls visibility, not deletion

    When Termene marks a company as inactive or archived, the natural instinct is to delete the Odoo record. In Odoo, deleting a partner is irreversible and breaks historical relations (crm.lead history, account moves, quotations). We map inactive Termene companies to Odoo's active=False flag, which hides the record from normal views but preserves it for historical reporting and related-record integrity. If you later need to reactivate a company, you can set active=True on the partner, and all historical links will remain intact.

Migration approach

Six steps for a successful Termene to Odoo CRM data migration

  1. Extract and normalize Termene CSV export

    We download the CSV export from Termene and run a normalization pass: standardize column headers to a canonical set (company_name, fiscal_code, registration_number, annual_revenue, employee_count, has_debts, debt_amount, payment_status, vat_status, street, city, county, postal_code, country, phone, email, website, is_active), detect encoding issues with Romanian characters, and flag rows with missing mandatory fields (name or fiscal_code) for your review before load. Our script produces a detailed log of any rows that could not be normalized for immediate remediation.

  2. Create Odoo custom fields for Termene financial metrics

    Before any data moves, we create the custom fields on res.partner in your Odoo instance: x_annual_revenue (float), x_employee_count (integer), x_has_debts (boolean), x_debt_amount (float), x_payment_status (char), x_vat_status (char), x_termene_updated (datetime), x_data_source (char). We deliver a manifest listing each field, its type, and default visibility so your Odoo admin can review and adjust access rights before the migration run. Fields are created with the appropriate company-level visibility, ensuring sales reps see the data without editing rights.

  3. Resolve partner ownership by email match or fallback user

    Termene records have no owner. We match contact email addresses from the CSV against existing Odoo system users by email. Matched emails assign the record to that user; unmatched records assign to the fallback owner you specify. This step prevents records landing with null owner_id, which would make them invisible in Odoo's activity and reporting views. You can also configure a default team assignment rule in Odoo to further route partners after import.

  4. Bulk load via Odoo XML-RPC with duplicate detection

    We use Odoo's xmlrpc/2/object endpoint to bulk-load records in batches of 200. Each record is checked for duplicates by fiscal_code (CUI) before insert — if a partner with that CUI already exists in Odoo, we update that record rather than creating a duplicate. This preserves any existing Odoo data (quotations, invoices) attached to the partner while overwriting fields that came from Termene.

  5. Validate fiscal code checksum and flag non-conformant records

    After bulk load, we run a checksum validation pass against all loaded fiscal_code values. CUI numbers that fail the Romanian algorithm are flagged in a reconciliation report with the original Termene value, the Odoo partner ID, and the validation error. Your team decides whether to correct the source data and re-migrate or accept the record with a note in x_vat_status.

  6. Delta pickup and reconciliation report

    A 24-hour delta window captures any changes made to the Termene export between extraction and go-live. We compare the delta CSV against the already-loaded records, update changed fields via XML-RPC, and flag new records for a second load pass. The final reconciliation report lists all loaded records, updated records, skipped duplicates, and validation errors for sign-off. The report is delivered in both CSV and PDF formats for simple stakeholder review.

Platform deep dives

Context on both ends of the pair

Termene logo

Termene

Source

Strengths

  • Aggregates data from over 20 Romanian official sources into a single searchable company profile.
  • Real-time updates on VAT status changes, insolvency filings, and government debt flags.
  • Built-in debtor reporting and overdue-invoice workflow for collections teams.
  • Searchable registry of all Romanian companies by CUI/CIF, name, county, and activity code.
  • Automated portfolio monitoring with configurable alerts per company.

Weaknesses

  • No public API — all data access and export is manual via the web interface.
  • Covers Romanian companies only, with no international counterpart data.
  • No pipeline, contact, or activity-logging objects — not a general CRM and cannot serve as one.
  • Pricing is opaque; requires direct sales contact for a quote.
  • No documented data model or schema reference publicly available.
Odoo CRM logo

Odoo CRM

Destination

Strengths

  • Modular open-source architecture lets teams start with CRM and add ERP apps as needs grow, all sharing one PostgreSQL database.
  • Free Community edition with no contact limits and full source code access means zero licensing cost for evaluation and small deployments.
  • Drag-and-drop Kanban pipeline with AI lead scoring gives a visual, prioritized view of the sales funnel without requiring custom configuration.
  • Native integrations with email, live chat, SMS, VoIP, WhatsApp, and social media feed all inbound leads into a single unified inbox.
  • Active Odoo Community Association (OCA) maintains dozens of community-maintained modules on GitHub for extended functionality.

Weaknesses

  • Gmail and email integration reliability is a recurring complaint — threads drop and conversations scatter across inboxes, disrupting sales team workflows.
  • Enterprise edition pricing stacks quickly: multiple apps at per-user rates ($25–$50/user/month) plus Odoo.sh hosting costs more than many SMBs anticipate.
  • Setup and configuration complexity increases significantly once custom fields, automation rules, and multiple installed modules are in play.
  • Odoo.sh trial databases run on a version (e.g., 18.3) that is not directly migratable to Odoo.sh, blocking the assisted migration path Odoo advertises.
  • Version upgrades between major Odoo releases (e.g., 17→18) frequently break custom module view definitions and XPath expressions, requiring manual remediation.

Complexity grading

How hard is this migration?

Standard CRM 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 Termene and Odoo CRM.

  • 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

    Termene: Not publicly documented. Limits are tied to the subscribed API plan (free vs paid) and confirmed during commercial onboarding with Termene's API team..

  • Data volume sensitivity

    B

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

Estimator

Estimate your Termene to Odoo CRM 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 Termene to Odoo CRM data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Termene-to-Odoo migrations complete in 3–5 days for datasets under 10,000 company records. The bottleneck is CSV normalization and custom field creation on the Odoo side — the actual XML-RPC bulk load runs in hours. Datasets over 50,000 records or multi-company Odoo setups extend to 10–14 days, primarily due to duplicate-resolution and validation review cycles. During this period, FlitStack provides daily status updates and a preliminary reconciliation report.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Termene.
Land in Odoo CRM, 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