Data quality

Duplicate finder

dolixdoublons · version 1.1.3

You find records entered twice and merge them: third parties, contacts and members.

Price
€79 excl. VAT
Dolibarr
19.0 minimum
Version
1.1.3
Licence
GPL v3+
Languages
French, English

€79 excl. VAT.

Ordering, payment, invoicing and download are handled by the DoliStore.

Buy on the DoliStore — €79 excl. VAT
Contact scan on Dolibarr 24.0.0, object “Contacts / adresses” (Contacts / addresses): “4 groupe(s) de doublons trouvé(s), soit 8 fiche(s) concernée(s) sur 14 analysée(s).” (4 duplicate group(s) found, covering 8 record(s) out of 14 scanned.). Each group matches the same contact entered on two different third parties — Julien Weber exists both at “Cabinet Vaillant” and at “Association Les Trois Ponts” — and offers the “Fusionner dans la fiche conservée” button (Merge into the kept record).
Contact scan on Dolibarr 24.0.0, object “Contacts / adresses” (Contacts / addresses): “4 groupe(s) de doublons trouvé(s), soit 8 fiche(s) concernée(s) sur 14 analysée(s).” (4 duplicate group(s) found, covering 8 record(s) out of 14 scanned.). Each group matches the same contact entered on two different third parties — Julien Weber exists both at “Cabinet Vaillant” and at “Association Les Trois Ponts” — and offers the “Fusionner dans la fiche conservée” button (Merge into the kept record). Screenshot of the French-language interface.
01

What the module does

  • Four criteria for third parties: same email, same name, same phone, same SIRET / SIREN / VAT number. Three for contacts and members: email, first and last name, phone.
  • Normalisation before matching: case, spaces, accents and punctuation ignored; legal forms removed from the name; phone numbers reduced to their last nine digits, whatever the format; first and last name in any order.
  • The scan is read-only. Empty fields never form a group.
  • Merging of all three scanned objects. Third parties are merged through Dolibarr's native method; contacts and members through a merge written in the module, since the Dolibarr core does not merge contacts, and has only merged members since version 23.
  • Merging a third party: quotes, orders, invoices, contacts, categories and attached documents are moved to the kept record, whose empty fields are filled in, then the duplicate is deleted.
  • Merging a contact or a member: roles on quotes, orders, invoices and projects, links to third parties, categories, agenda events, notifications, mass emailing targets, complementary attributes, contributions and partnerships, and any linked user account, are moved to the kept record. Its empty fields are filled in with those of the duplicate and the notes are joined end to end. All in a transaction: if a single step fails, nothing is applied.
  • Two safeguards: maximum number of records scanned (20 000 by default) and maximum group size (10 by default). A value shared by too many records is reported and set aside: it is a switchboard number or a generic address, not a duplicate.
  • Multi-company respected, external users confined to their own third party, viewable merge history, including the type of object merged.
02

Who it is for

The same company exists twice in your database, under two spellings, and you no longer know which one is up to date.

After a few years, the same company ends up entered twice. “Cabinet Vaillant” and “SARL Cabinet Vaillant”, the same email written with a capital letter, the same phone number written with spaces. The quotes are on one record, the invoices on the other. The customer’s turnover is wrong, and nobody knows any more which of the two records is up to date.

Sorting by name does not bring them side by side: the legal form, an accent or a space is enough to separate them in the list.

Who it is for: Databases several years old, files imported from a spreadsheet, organisations where several people create records without coordinating.

03

What the module does not do

This section appears on all 12 module pages, without exception.

  • The module detects, it does not correct on its own: you choose the record to keep, merge by merge.
  • Matching is exact after normalisation. Two genuinely different spellings — a typo in a name, one letter too many in an email — are not matched.
  • No detection on products, projects, invoices or documents.
  • A merge permanently deletes the merged record. There is no button to go back.
  • Merging a contact or a member writes directly to the database: Dolibarr's triggers are not run and no event is created in the agenda. Merging a third party, on the other hand, goes through the core method.
  • If the kept record already carries the same link as the duplicate — same category, same link to a third party, contribution with the same date, partnership of the same type and with the same date — the duplicate's redundant row is set aside instead of being moved.
  • Files attached to the record of a merged contact or member do not follow: they stay in the deleted record's folder, on the server. For third parties, Dolibarr's native merge moves them.
04

How it works

The module compares your records on criteria that you choose, and shows you groups of records that are genuinely identical once the formatting is stripped out.

What it can scan: third parties, contacts and addresses, and — if the Members module is enabled — members.

The criteria:

Criterion Objects What is ignored
Same email third parties, contacts, members case and spaces
Same name third parties accents, punctuation, legal forms (SARL, SAS, EURL, GmbH, Ltd…)
Same first and last name contacts, members accents, punctuation, order of first and last name
Same phone third parties, contacts, members format: 01 23 45 67 89, +33 1 23 45 67 89, 0033… give the same key
Same SIRET, SIREN or VAT number third parties spaces, punctuation, case

Matching is strict equality after normalisation, not a similarity score. Two records are only grouped if one of their values is genuinely identical. So there is no “duplicate probability” to interpret, and empty fields never form a group.

The scan is read-only. Nothing is changed until you have chosen a record to keep, ticked a record to merge, clicked and confirmed.

The module merges the three objects it scans. The path is not the same for third parties as for the other two.

Third parties

For a third party, the module relies on Dolibarr’s native merge. The duplicate’s quotes, orders, invoices, contacts, categories and attached documents are moved to the record you keep, whose empty fields are filled in with those of the duplicate. The duplicate is then deleted.

Contacts and members

Dolibarr cannot merge contacts, and has only merged members since version 23: two duplicate contacts have to be copied over and deleted by hand, hoping nothing was missed. The module writes this merge itself.

Everything that pointed to the deleted record is moved to the kept record:

What moves to the kept record Contacts Members
Roles on quotes, orders, invoices, projects and other documents yes —
Links to third parties yes —
Categories yes yes
Agenda events and reminders yes —
Notifications and alerts yes —
Mass emailing campaign targets yes —
Contributions — yes
Partnerships — yes
Complementary attributes yes yes
Linked user account yes yes

The empty fields of the kept record — address, phone numbers, job title, date of birth, social networks — are filled in with those of the duplicate, and the two notes are joined end to end. The kept record keeps its own link: merging two contacts held by two different third parties does not touch the third parties.

The operation runs in a transaction. If a single step fails, nothing is applied: both records stay in place and a message says so.

When the kept record already carries the same link as the duplicate — the same category, the same link to a third party, a contribution with the same date — the duplicate’s redundant row is set aside rather than making the operation fail.

In both cases

It is an irreversible operation. The module asks for an explicit confirmation that says so, requires the Dolibarr create and delete permissions on the object concerned in addition to its own permission, and re-checks both records on the server before writing anything.

The screen fits on one page, under Third partiesDuplicates.

At the top, the object to scan and the criteria checkboxes. The Scan button displays a banner such as “3 duplicate group(s) found, covering 6 record(s) out of 14 scanned.”, then one table per group.

Each group shows as its title the criteria that matched these records, and lists the records with their clickable name, email, phone, identifiers and town. A “Keep” column and a “Merge” column let you designate the master record.

In the screenshot, group 1 matches “Cabinet Vaillant” and “SARL Cabinet Vaillant” on all four criteria at once, even though their emails are not written with the same case and their phone numbers are not entered in the same format.

The choice of object changes the list scanned and the criteria offered. On Contacts / addresses, each group matches the same person entered several times — often on two different third parties — and carries the same merge button.

The setup page brings together the two safeguards, the history setting and the table of merges already carried out.

The module finds the real duplicates and sets aside the false ones: a switchboard number shared by twelve branches is not a duplicate, and it is ignored.
The module finds the real duplicates and sets aside the false ones: a switchboard number shared by twelve branches is not a duplicate, and it is ignored. Screenshot of the French-language interface.
05

Settings

Setting Default Effect
Maximum records scanned 20 000 Above this, the scan is blocked so as not to overload the server.
Maximum group size 10 A value shared by more records than this number is treated as a switchboard number or a generic address: it is set aside, and the number of values set aside is displayed.
Keep a merge history enabled Logs every merge: date, user, object type, kept record, deleted record.

The second setting is the one that prevents the giant false group: without it, a switchboard number 03 88 00 00 00 shared by forty records of the same local authority would form a group of forty “duplicates”.

The three settings, and the merge history: which record was kept, which one was deleted, by whom and when.
The three settings, and the merge history: which record was kept, which one was deleted, by whom and when. Screenshot of the French-language interface.
06

Security and safeguards

  • Read-only scan. No write is possible from the scan screen without going through the merge button and its confirmation.
  • A dedicated permission, “Use duplicate finder”.
  • Dolibarr’s standard permissions on top: merging requires create/modify and delete on the object. Without the delete permission, the scan can still be viewed and the merge buttons are not displayed; a message explains why.
  • Server-side re-check: the identifiers sent by the form are never taken at face value, both records are read again within the authorised scope.
  • Multi-company: scan and merge limited to the authorised entities.
  • External users: an account linked to a third party only sees its own record; members are never visible to it.
  • Every merge is written to Dolibarr’s logs and to the module’s history.
07

What you get

What the module writes to your installation
Database tables createdOne table: llx_dolixdoublons_log. It records the merge history (date, user, object type, kept record, merged record, names of both records, entity).
PermissionsOne permission: “Use duplicate finder”. Merging also requires Dolibarr's standard permissions on the object: create/modify AND delete. Without the delete permission, the scan can still be viewed but the merge buttons are not displayed.
Uninstalling
  • Disable the module in SetupModules/Applications. The menu disappears.
  • Merges already carried out cannot be undone: the merged record has been deleted.
  • The llx_dolixdoublons_log history table and the module's settings are not deleted.
  • One table is added: llx_dolixdoublons_log. It only contains the merge history.
  • The scan only reads a minimal set of columns — name, email, phone numbers, identifiers, town — and writes them nowhere.
  • The only possible write is the merge that you trigger.
  • No outgoing connection: nothing is sent anywhere.
08

Compatibility

The module descriptor only declares a minimum version. No upper bound is written in the code: the versions below are those on which the module has actually been run.

Compatibility of the Duplicate finder module
Dolibarr versionsDolibarr 19.0 minimum. Installed and run on 23.0.4 and 24.0.0.
Minimum PHP7.4
Dolibarr modules to enableThird Parties
LicenceGPL v3 or later, full source code
LanguagesFrench, English
MenuThird parties menu“Duplicates”.
09

Installation

  1. Get the module from the DoliStore and download the zip file.
  2. In Dolibarr: HomeSetupModules/Applications“Deploy/install external app/module” tab, then upload the zip. Otherwise, unzip the dolixdoublons folder into htdocs/custom/.
  3. Enable “Duplicate finder” in the list of modules. The history table is created at that point.
  4. Grant the “Use duplicate finder” permission to the users concerned. To merge, they must also have the Dolibarr create and delete permissions on the object concerned: third parties, contacts, or members.
  5. Set the two caps and the history in the module's setup page.

The details — permissions on the custom folder, shared hosting, upgrades, uninstalling — are on the page Installation and upgrades.

10

Frequently asked questions

Which Dolibarr versions does this module work on?

The descriptor requires Dolibarr 19.0 minimum and PHP 7.4 minimum. The module has been installed and run on 23.0.4 and 24.0.0. If you are on an older version and have any doubt, write before buying.

Can the scan change my database?

No. The scan only reads and groups. Nothing is written until you have chosen a record to keep, ticked a record to merge, clicked the button and confirmed the warning window.

What happens to the content of the deleted record when third parties are merged?

It is moved to the kept record by Dolibarr's own merge method: quotes, orders, invoices, contacts, categories. The empty fields of the kept record are filled in with those of the duplicate. Only then is the duplicate deleted. The operation is irreversible: make a backup before a merge campaign.

Does the module also merge contacts and members?

Yes. The Dolibarr core does not merge contacts, and has only merged members since version 23. Merging a contact or a member is written in the module. It moves to the kept record everything that pointed to the deleted record: roles on quotes, orders, invoices and projects, links to third parties, categories, agenda events, notifications, mass emailing targets, complementary attributes, and for a member its contributions and partnerships. Any linked user account follows too. The empty fields of the kept record are filled in with those of the duplicate, the notes are joined end to end, then the duplicate is deleted. The whole thing runs in a transaction: if one step fails, nothing is applied.

Could it suggest false duplicates?

Matching is strict equality after normalisation, not a similarity score: two records are only grouped if one of their values is genuinely identical once the formatting is stripped out. Values shared by more records than the group cap — a switchboard number, a generic mailbox — are set aside and reported.

What if I uninstall?

The menu disappears. Merges already carried out remain: they are data in your database. The history table and the settings also remain; you can delete them yourself.

Who handles support, and how do updates work?

Support is provided by the person who wrote the module, at support@dolix.fr. Ordering, payment, the invoice and the download are handled by the DoliStore, where new versions are published.

11

Version history

Taken from the module’s ChangeLog.md file: a single source.

1.1.310 September 2026

Technical: the anti-CSRF token check function now has a name prefixed by the module, so that a function of the same name added to Dolibarr one day cannot prevent the page from opening. An empty token is explicitly refused.

1.1.210 September 2026

Important fix: the merge form always sent the “third party” object type, whatever the type scanned. A merge started from contacts or members was processed as a third-party merge. The type actually displayed is now sent, and the merging of contacts and members, written since 1.1.0, is genuinely reachable from the screen. Fix: the setup screen returned a 500 error on saving, because Dolibarr's settings-writing function was called without its library being loaded. Settings now save normally.

1.1.110 September 2026

PostgreSQL compatibility fix: detection of optional columns now goes through Dolibarr's abstraction layer, since on PostgreSQL a failed query aborts the current transaction. No data was altered.

1.1.010 September 2026

Merging of contacts and merging of members, which Dolibarr does not offer natively: everything that points to the deleted record is moved to the kept record — documents and linked items, links, events, categories, notifications, contributions, partnerships and associated user account — in a transaction. Detection of duplicate members, offered when the Members module is enabled. Handling of unique-key conflicts during a merge. Compatibility across versions: columns missing depending on the Dolibarr version are detected and ignored. The history now records the type of object merged.

1.0.09 September 2026

First version: detection of duplicate third parties and contacts on four criteria, normalisation before matching, read-only scan, merging of third parties using Dolibarr's native method, safeguards, history and setup page.

12

Support for this module

Write to support@dolix.fr. The person who wrote the module is the one who replies.

Reply within two working days. This is not an on-call service.

To include in your message

  • The exact Dolibarr version.
  • The module concerned and its version — here dolixdoublons 1.1.3.
  • What you did, and what you expected.
  • The error message copied exactly, or a screenshot.
  • How Dolibarr is installed, if you know.

This module is on sale on the DoliStore.

Ordering, payment, invoicing and download are handled by the DoliStore.

Buy on the DoliStore — €79 excl. VAT
Also

The other modules