CRM migration
Field-level mapping, validation, and rollback between Termene and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Termene
Source
Odoo CRM
Destination
Compatibility
11 of 12
objects map 1:1 between Termene and Odoo CRM.
Complexity
BStandard
Timeline
3–5 days
Overview
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.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
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
Odoo CRM
res.partner
1:1Termene 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
Odoo CRM
res.partner (child contact)
many:1When 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)
Odoo CRM
res.partner.vat
1:1Romanian 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
Odoo CRM
res.partner.ref
1:1Company 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
Odoo CRM
custom float field on res.partner
1:1Termene 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
Odoo CRM
custom integer field on res.partner
1:1Employee 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
Odoo CRM
custom boolean field on res.partner
1:1Termene 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
Odoo CRM
custom char field on res.partner
1:1Payment 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)
Odoo CRM
res.partner.active
1:1Termene 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
Odoo CRM
res.partner.website
1:1Company 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)
Odoo CRM
res.partner (address fields)
1:1Street, 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
Odoo CRM
custom char field on res.partner
1:1Termene 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.
| Termene | Odoo CRM | Compatibility | |
|---|---|---|---|
| Company Record | res.partner1:1 | Fully supported | |
| Contact Name | res.partner (child contact)many:1 | Fully supported | |
| fiscal_code (CUI/CIF) | res.partner.vat1:1 | Fully supported | |
| registration_number | res.partner.ref1:1 | Fully supported | |
| annual_revenue | custom float field on res.partner1:1 | Fully supported | |
| employee_count | custom integer field on res.partner1:1 | Fully supported | |
| debt_flag / datorii | custom boolean field on res.partner1:1 | Fully supported | |
| payment_history / intarzieri | custom char field on res.partner1:1 | Fully supported | |
| company_status (active/inactive) | res.partner.active1:1 | Fully supported | |
| website / domain | res.partner.website1:1 | Fully supported | |
| address fields (street, city, county) | res.partner (address fields)1:1 | Fully supported | |
| source_tag | custom char field on res.partner1:1 | Fully supported |
Gotchas + challenges
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 gotchas
No public API for data export
Alert and notification history is not exportable
Data model schema not publicly documented
Odoo CRM gotchas
Odoo.sh version gating blocks assisted migrations from trial
Enterprise modules fail to install on Community after database restore
Custom module view inheritance breaks between Odoo major versions
Custom fields risk losing their application context on Community
API access for Community is gated behind the Custom Plan
Pair-specific challenges
Migration approach
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.
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.
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.
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.
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.
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
Termene
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Termene and Odoo CRM.
Object compatibility
1 of 8 objects need a mapping; the rest are 1:1.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
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
Termene doesn't expose a bulk API — REST + parallelization used for high-volume runs.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during Termene to Odoo CRM migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave Termene
Other ways to arrive at Odoo CRM
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.