Real-time duplicate warnings and fuzzy multi-field matching for Odoo leads & contacts, plus a bulk dedup & merge wizard. Built to order. One-time license from $149.00 USD for Odoo 17, 18, 19 — includes 12 months of updates and support.

Real-time duplicate warnings and fuzzy multi-field matching for Odoo leads & contacts, plus a bulk dedup & merge wizard. Built to order.
No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.
Duplicate leads and contacts quietly wreck a CRM: two salespeople chase the same account, mailshots hit the same person three times, reporting double-counts pipeline, and merges lose activity history. Odoo core will happily let a rep create the same res.partner or crm.lead twice, and its built-in "Deduplicate Contacts" tool is a blunt after-the-fact cleanup — not a guardrail at the moment of data entry.
Real-time duplicate warning on the lead and contact form — a live OWL banner appears the moment an entered email, phone or name+city matches an existing record, with one-click links to open the potential duplicate
Per-model block vs warn modes — configure soft warnings (rep can override with a reason) or hard blocks enforced by an @api.constrains ORM constraint that refuses to save
Configurable multi-field match rules — admins define which fields constitute a duplicate (email, phone, VAT, website domain, mobile, or weighted composites) from a Settings screen, no code changes needed
Fuzzy matching engine — normalized, accent- and case-insensitive comparison with phone-number canonicalization, email local-part cleanup, and Levenshtein/trigram similarity scoring on name + city + country
Weighted scoring with a confidence threshold — each rule contributes a score; records above your threshold are flagged, so near-duplicates surface while genuine distinct records pass through
Normalized match-key compute fields — @api.depends compute fields store a cleaned, indexed match key on res.partner and crm.lead so real-time checks stay fast even on large databases
CRM Duplicate Prevention & Deduplication is a build-to-order Odoo module that ECOSIRE designs, develops, installs and supports for your database. It stops duplicates at two points: in real time as records are created or edited (a live warning or a hard block, your choice per model), and in bulk via a merge wizard that finds and consolidates the duplicates already sitting in your data. Matching is configurable and fuzzy — normalize and compare on email, phone, VAT/tax ID, website domain, or a weighted combination like name + city + country — so you catch "Acme Ltd" vs "ACME Limited" and "+971 4 555" vs "0097145 55", not just byte-identical strings.
This is not an off-the-shelf apps.odoo.com download. ECOSIRE builds it against your exact Odoo version (17, 18 or 19), your Community or Enterprise edition, and your real matching policy — which fields define a "duplicate," which teams may override a warning, and which are hard-blocked. The module ships as clean, ownership-transferred source: a proper __manifest__.py, ORM models with @api.constrains and @api.depends compute fields for normalized match keys, ir.model.access.csv plus record rules for permissions, OWL/JS on the form for the live warning banner, a QWeb wizard for review-and-merge, and an optional automated action for nightly duplicate scanning. Typical delivery is 2–4 weeks including scoping, build, UAT on a staging database, and go-live, followed by a support and warranty window.
The result: cleaner pipeline reporting, no more embarrassing duplicate outreach, safer merges that preserve messages, activities and linked orders, and a matching engine your admins can tune from Settings without a developer.
Owns data quality across the sales pipeline and is tired of manual cleanup. Wants to define matching rules once, set block-vs-warn per team, and trust that new records stay clean — while keeping the power to bulk-merge the mess that already exists.
Needs pipeline reports they can trust. Duplicate opportunities double-count forecast and let two reps work the same account. Wants reps warned at entry and a clean, single view of every customer without policing spreadsheets.
Runs email and lead-capture campaigns that feed Odoo via forms, imports and API. Duplicate contacts mean the same person gets mailed multiple times and unsubscribe/consent state fragments. Wants dedup enforced at import and API time, not just on manual entry.
Responsible for the Odoo instance and its integrations. Wants a maintainable, well-documented addon that works with XML-RPC/JSON-RPC feeds, respects multi-company and access rights, and comes with source code and support rather than a black-box marketplace app.
Buy the license on ecosire.com and download the CRM Duplicate Prevention & Deduplication module ZIP from your account dashboard.
Extract the ZIP into your Odoo custom addons folder on the server (or upload via Apps > Install from file on Odoo.sh / runbot).
Activate Developer Mode, open Apps, click Update Apps List, search for CRM Duplicate Prevention & Deduplication, and press Install.
Open the new menu, paste your ECOSIRE license key, connect any external credentials (Shopify, Amazon, Stripe, etc.), and save.
Run the built-in connection test, sync your first 10 records, and schedule the recurring cron. Contact support if anything fails.
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| Prevents duplicates at data-entry time (real-time warn/block) | Live warn or hard block on form, import and API, per model | Possible but you design and maintain the constraint logic yourself | Some apps warn; behavior and coverage vary and rarely cover import/API | |
| Fuzzy / normalized matching (email, phone, name+city) | Normalized keys + weighted Levenshtein/trigram scoring with a threshold | Only if you build a scoring engine; non-trivial effort | Often exact-match only or limited fuzziness | |
| Configurable multi-field rules by admins (no code) | Settings UI for fields, weights, modes and scope | Usually hard-coded; changes need a developer | Limited configurability, fixed field set | |
| Bulk dedup & safe merge preserving history/links | Cluster wizard with field diff; re-parents chatter, activities, orders | You must handle relationship re-parenting correctly yourself | Merge quality and relationship handling vary | |
| Cross-model checks (lead vs existing contact) & import/API coverage | Yes — crm.lead ↔ res.partner and XML-RPC/JSON-RPC/import protected | Achievable but adds significant scope | Rarely covers both models and integration paths | |
| Override audit trail & role-based permissions | Logged overrides + record rules for who can override/merge/edit rules | You build the logging and access model | Seldom includes audit logging | |
| Odoo 17/18/19, Community & Enterprise support | Built for your exact version and edition | Depends entirely on your team's version expertise | Version support depends on the vendor's maintenance | |
| Ownership, source code & support | Full source handed over + defined support/warranty window | You own it but also carry all maintenance | Licensed binary; support and updates per vendor terms |
This is a build-to-order module, not an instant download. Typical delivery is 2–4 weeks from the scoping workshop: we confirm your match rules and block-vs-warn policy, build against your exact Odoo version and edition, test on a staging copy of your database (UAT), then deploy to production and run an optional first bulk dedup pass. Simpler rule sets land nearer two weeks; broader cross-model matching, complex fuzzy scoring, or heavy multi-company scoping trend toward four. We give you a firm timeline in writing after scoping.
Every build includes a post-go-live support and warranty window covering bug fixes and reasonable adjustments to your matching rules. You receive the full source code, so nothing is locked behind a vendor. We also offer optional ongoing support plans and paid version-migration work when you later upgrade Odoo (for example 18 to 19). Because rules are admin-configurable from Settings, most day-to-day tuning needs no developer at all.
Both. The module is built on standard Odoo framework primitives — ORM models, @api.constrains constraints, ir.model.access.csv, record rules, QWeb and OWL — so it runs on Community and Enterprise across Odoo 17, 18 and 19. We build it specifically for the version and edition you run so there are no compatibility surprises.
Odoo's native tool is an after-the-fact cleanup that groups existing contacts by a single exact field (like email or name) and merges them. It does not stop a duplicate from being created in the first place, has no fuzzy matching, no block mode, no per-team override control, and doesn't cover crm.lead. This module adds real-time prevention at entry (warn or hard-block), configurable multi-field fuzzy rules, cross-model checks, an audit trail, and a far more capable review-and-merge wizard — while still handling the bulk cleanup the native tool does.
Yes. Because the matching runs at the ORM constraint/compute level, it applies to records created via CSV/Excel import and via XML-RPC or JSON-RPC integrations — not just the manual form. That means your web lead-capture forms, marketing tools, and third-party feeds are protected too. For high-volume imports we can configure the behavior (block, tag for review, or route to the merge wizard) so a big load doesn't stall.
Safe merging is a core design goal. The merge wizard re-parents everything attached to the losing records — chatter messages, scheduled activities, child contacts, opportunities, quotations, sale orders and invoices — onto the surviving master record before deleting the duplicate, so no history or link is orphaned. You always review a side-by-side field diff and choose the master before anything is written, and we run the first production dedup with you on approved clusters only.
Yes. Rules and modes are configurable per model and can be scoped by company or sales team, so distinct business units don't false-trigger on each other. Permissions are enforced with ir.model.access.csv and record rules: you decide which groups can override a soft warning (with a logged reason), which can run merges, and which can edit the match rules themselves. Overrides are recorded for audit and coaching.
Real-time duplicate warnings and fuzzy multi-field matching for Odoo leads & contacts, plus a bulk dedup & merge wizard. Built to order.