Customer Merge: setup and help

Quick start

  1. Upload and install the ZIP in Modules > Module Manager, then open Customers > Customer Merge > Settings > System Check.
  2. Confirm AES-256-GCM and gzip support and back up the shop database before a real merge.
  3. Open Data Sources, press Rescan the database, review customer-reference tables and use Save strategies after choosing safe table actions.
  4. Review Settings > Configuration, especially What happens to absorbed accounts, undo retention and execution limits, then Save configuration.
  5. In Settings > Detection Rules, review matching rules and thresholds, then Save detection settings.
  6. Open Duplicate Customers, run Full scan, wait for its result and choose Review for a verified candidate group.
  7. Choose the surviving account, resolve Fields that differ and Addresses, then inspect Dry run and resolve every blocker.
  8. Confirm with Merge these accounts, then check History and Undo, surviving-account records and a sample historical order/document.

Requires PrestaShop 1.6.1 or later and PHP 7.1 or later.

Setup manual

Install and check the server

Upload the ZIP through Modules > Module Manager > Upload a module and install it. The module creates its tables and adds Customers > Customer Merge. Configure opens Duplicate Customers.

Requires PrestaShop 1.6.1 or later and PHP 7.1 or later.

Open Customer Merge > Settings > System Check before merging. The merge engine requires OpenSSL AES-256-GCM for encrypted snapshots, including when the undo option is disabled. Snapshot compression initially uses gzip, so gzip support is also required. Turning off undo does not bypass these requirements.

Back up the shop database before the first real merge. A merge changes customer ownership and can retire absorbed accounts. No storefront widget is added.

Review the data sources first

Rescan customer-reference tables

Open Customers > Customer Merge > Data Sources and press Rescan the database. The registry discovers tables with an id_customer column under the shop's table prefix. It reports known core tables, known module tables, unknown tables and their write risks.

The Possibly customer-related, not touched section reports columns that resemble customer references under other names. These are informational. The module does not guess how to move them. References stored in custom formats or external systems are outside this discovery.

Save a strategy for each table

Review Risk on repoint, then choose Strategy:

Strategy What it means
Move rows to the surviving account Reassign the customer reference.
Move rows, collapse exact duplicates Reassign rows and collapse supported exact duplicates.
Leave this table alone Preserve the table's rows. Review the resulting retained references before merging.
Ask me every time Leave the table requiring a decision in the merge plan.

Press Save strategies. Unknown tables start with the manual-decision policy. Unsafe tables cannot be made writable simply by selecting a move strategy. Views, missing primary keys, triggers, non-transactional storage and unsupported unique indexes restrict the available actions. The dry run identifies the remaining blockers.

Rescan after installing or changing a module that stores customer data, so its tables are checked again before any data is moved.

Configure general behavior and retention

Open Customer Merge > Settings > Configuration. Review the following fields and press Save configuration.

General

Setting Initial value Use
Module active Enabled Allows normal detection and scheduled processing.
What happens to absorbed accounts Anonymize and keep the row (recommended) Keeps an unusable customer row after absorption. The alternative is Delete the row when nothing references it.
Scan scope Only accounts that can legally be merged Keeps scanning in the current customer-isolation domain.

The scan-scope list also offers All shops, cross-shop matches shown for information. That option still scans only the current customer-isolation domain, which can be one shop or a shop group sharing customers. Run the scan in each applicable domain and review its reported scope.

Accounts may merge only inside one customer-isolation domain: the same shop, or the same shop group when customer sharing is enabled. A match across separate domains cannot be merged.

Undo and retention

Setting Initial value Use
Keep a snapshot so merges can be undone Enabled when authenticated encryption is available Controls whether a completed merge has an undo window. Installation disables undo if encryption is unavailable.
Undo window (days) 30 Sets the undo period. The form offers 1 to 365 days.
Keep detection data for (days) 30 Sets retention for stale detection records.
Audit log retention (days) 0 0 retains audit records indefinitely; a positive value limits their retention.

Snapshots contain customer data and are encrypted. Keep the shop's encryption material with your protected database backups if you need recoverable snapshots. Retention requires the housekeeping task to run. Erasure handling can purge a snapshot before its ordinary expiry.

Execution limits

Setting Initial value When to change it
Scan batch size 2000 Lower it if scans exceed your server's practical limits.
Largest usable match bucket 100 Excludes a shared value from useful matching when too many accounts use it.
Row ceiling per merge 50000 Blocks plans larger than the configured transaction size.
Preview stays valid for (minutes) 15 Requires a fresh check when the preview is too old.

Merges affecting more than 10000 rows also require explicit maintenance/CLI mode with the initial settings, even when they stay below the overall row ceiling. The ordinary back-office confirmation does not enable that mode.

Notifications

The screen offers Email a summary after scheduled scans and merges, off by default, and Send to, empty by default. Both values are saved, but the current version sends no summary email. Use the scan results and History and Undo to follow operations.

Configure detection rules and scan

Review matching signals

Open Customer Merge > Settings > Detection Rules. Each rule has an enabled switch and Weight. The initial rules are enabled with these weights:

Rule Weight Additional setting or limit
Same email address 70 Both accounts use exactly the same email address.
Email alias 60 Weight for lookalike characters starts at 20. Review lookalike matches yourself; on their own they are not enough for an automatic merge.
Same phone number 45 Compares phone numbers after normalizing their format.
Same name and postal address 45 Similarity starts at 0.78.
Same company or VAT number 55 Weight for company name alone starts at 30. Review only.
Same payment method 40 Weight for a card fingerprint alone starts at 20. For review only; card matching also has its own switch, which starts off.
Guest checkout and registered account 10 A bonus when another signal links the accounts. It is not an independent identity signal.

Signals of the same family do not simply add up, and conflicting signals can lower the score. A detected group is a suggestion to review, not a statement that the accounts belong to one person.

Under Thresholds, Show a group for review from starts at 55 and Treat as certain from starts at 95. Lower the review threshold to inspect weaker matches. It does not relax automatic-merge safeguards. Press Save detection settings after changing the rules.

Run the first scan

Open Duplicate Customers and press Full scan. The first scan builds the fingerprint index. Later scans can process changed customers incrementally. Scheduled scanning also periodically chooses a full scan, so detection is not limited forever to changed accounts.

Wait for the scan to finish or report a partial result. Check the scan status and scope before reviewing groups. Use Review to open a candidate group. Review confidence and the matched signals together with the accounts' actual details.

Preview and perform a manual merge

Choose the surviving account

The wizard has five steps. In Which account survives?, select the account that should retain its customer ID and registration date. Its credentials are the default source. Review registered and guest status, order counts, spending and addresses before continuing.

Resolve differing fields

Fields that differ lists conflicting values. Check the chosen first name, last name, email and other ordinary fields. Choosing Email address changes the login email, so the surviving account's original login address is not unconditionally retained.

Newsletter consent and Partner offers consent use the most restrictive value. Where the relevant PrestaShop fields exist, Risk level uses the more restrictive risk and Payment days allowed and Outstanding allowance use their lowest values. These fields are locked. The default group affects pricing; group memberships from the accounts are normally combined. Internal notes retain source markers.

Review addresses

In Addresses, inspect identical and similar addresses before collapsing them. An address referenced by an order keeps its ID and document fields. Its customer ownership can move. A duplicate referenced address is hidden rather than deleted, preserving historical document references.

Read the dry run

Press Preview the merge. Dry run reports rows moved, deduplicated, untouched and in conflict, with a per-table plan. Customer records have not been merged at this stage, although the module stores the preview job in its own tables.

Resolve every blocking conflict before proceeding. A missing primary key, trigger, non-transactional table, unresolved strategy or changed schema can block execution. Do not bypass those warnings by assuming the rows are unimportant.

Confirm and verify

In Confirm the merge, read the resulting-account sentence, row counts, absorbed-account action and undo deadline. Press Merge these accounts when the plan is correct.

The engine validates the plan again, locks the relevant rows and performs the business-data changes in one database transaction. If transactional work fails, it rolls back. Job and failure records can still remain for investigation.

Open History and Undo after completion. Check the surviving account's orders and addresses. Compare a sample historical invoice, payment, credit slip and order total with your pre-merge records. All affected customer sessions are revoked rather than transferred; users must log in again.

Understand document and ownership changes

The module changes customer ownership on supported orders, returns, credit slips and messages. In particular, a credit slip's id_customer can change. It does not rewrite issued invoice or credit-slip amounts and document content.

Payments, order totals, order details, carriers, order history, stock movements and shipment records are outside the ordinary order-ownership change. An order-linked address retains its ID and document fields. Review custom modules and external systems separately through the data-source assessment.

Use history and undo

Open Customer Merge > History and Undo to inspect the merge and its result. Undo is available only when the merge has retained, usable snapshots within its undo period.

Undo verifies that the affected data and schemas still match the state after the merge. It refuses when records changed, restoration would collide, a customer ID was reused, the snapshot expired or an erasure request purged required data. It does not overwrite later work to force restoration.

Customer sessions are an exception to snapshot restoration. Revoked sessions are never restored by undo. Disabling undo makes completed merges unavailable for reversal through this screen, even though the merge engine still requires encrypted snapshot processing during execution.

The audit log stores event type, outcome, UTC time, actor and employee information, linked customer IDs and supplied row counts or context. Entries include a previous hash and event hash, and the merge and undo paths verify the chain. Customer identifiers are recorded in this log.

Use Export CSV in History and Undo for the job summary: job ID, completion time, status, surviving customer ID, affected rows, conflicts and actor. This export reads up to 5,000 finished jobs; it is not an export of every hash-chained audit entry.

Review automatic-merge controls and scheduled tasks

Automatic controls

In Detection Rules > Automatic merging, the visible controls are:

Setting Initial value
Enable automatic merging Disabled
Guest into registered only Enabled
Independent signals required 2
Row ceiling per automatic merge 10000

The certainty threshold initially uses 95. Safety checks still exclude unresolved conflicts, unknown tables, triggers and non-transactional tables from unattended processing.

In the current version these controls do not merge candidates automatically. The visible switch does not enable scheduled merging, and scans only list candidates without creating merge jobs. Merge candidates through the manual review workflow.

Scheduling and cleanup

Settings > Cron exposes the shared scheduling tools. The module registers Scan for duplicate customer accounts at 02:00, Process the auto-merge queue (disabled by default) at 02:30 and Purge expired snapshots and stale detection data at 04:00. Actual execution depends on the configured shared scheduler.

Connect a working scheduler entry point for your installation, then inspect scan and housekeeping results. The module does not include a root cron.php, so verify that a displayed CLI command points to an existing entry point before scheduling it. Keep housekeeping running if you depend on automatic expiry of snapshots or detection data.

Troubleshoot

  • A group is blocked: read its Dry run table plan. Check strategies, primary keys, triggers, storage engines, unique-key conflicts and isolation domains.
  • The scan finds nothing: check enabled detection rules and the review threshold. Run Full scan when an incomplete or incremental scan may have missed the expected accounts.
  • All-shop scanning appears unchanged: the scan worker does not recognize the saved all-shops value and scans only the current customer-isolation domain. Run the scan in each applicable domain.
  • A merge fails on encryption or compression: check System Check, AES-256-GCM and gzip support. Turning off undo does not remove the snapshot requirement.
  • The preview expires or changes: regenerate Dry run, review the new counts and confirm again.
  • Undo is unavailable: read its reason in History and Undo. Later data changes, expiry, restoration conflicts and erasure can all prevent it.
  • No summary email arrives: no summary emails are sent. Use the scan and history screens.
  • Automatic merging does nothing: the visible switch does not enable the separate cron worker gate or turn scan candidates into jobs. Continue with manual review.

Uninstall

Export or back up the records you need before uninstalling through Module Manager. Completed customer merges remain applied. Uninstall does not undo them.

The schema removes detection records, temporary plans and merge snapshots. Completed merges can no longer be undone through the module after their snapshots are removed. The schema marks merge jobs, job members, absorbed-to-surviving identity mappings and audit records as persistent, so those tables are retained.

Uninstall removes the menu and the module's working tables. Settings and scheduled-task entries can stay behind, so check the shared scheduler afterwards and remove any leftover entries. An audit record kept after uninstall cannot be used to undo a merge.

Questions

No questions about this module yet

Ask anything about installation, compatibility or setup. Answers appear here.

Known Issues

7

Wizard choices do not affect the merge

ResolvedUpdated:
Fixed in: 1.0.4
Selected customer field values and address consolidation choices could be ignored, including when reusing a saved draft.

Blocking conflicts appear as warnings

ResolvedUpdated:
Fixed in: 1.0.4
The merge wizard could leave the merge button enabled for a blocking conflict, then fail when the merge was attempted.

Deleting absorbed accounts fails during merge

ResolvedUpdated:
Fixed in: 1.0.4
Choosing Delete for absorbed accounts could produce a preview that failed when the merge was applied.

Administration pages redirect to a broken system check

ResolvedUpdated:
Fixed in: 1.0.4
Module pages could redirect repeatedly to System Check, which could itself fail to open.

Duplicate counts and previews are misleading

ResolvedUpdated:
Fixed in: 1.0.4
Duplicate group totals could show zero, and previews could overstate moved orders or include unrelated records.

Administration labels remain untranslated

ResolvedUpdated:
Fixed in: 1.0.4
Some administration labels stayed in the source language despite available translations.

Security hardening

ResolvedUpdated:
Fixed in: 1.0.4
Security hardening.

Feature Requests

3

Implemented

Duplicate customer detection

Implemented
Find potential duplicate accounts using weighted email, phone, name, address, company and tax information.

Previewed customer account merging

Implemented
Preview how customer accounts and related records will be combined before applying a merge.

Merge history and undo

Implemented
Review merge history and undo eligible merges using saved snapshots.

Changelog

v1.0.02026-07-28

  • Initialrelease
  • InitialDuplicate detection scored on exact email, Gmail dot and plus aliases, lookalike characters, phone numbers normalised to international format, fuzzy name and postal address, company and VAT number, and guest to registered signals
  • InitialSQL-first indexing with keyed fingerprints and capped match buckets, so only hashes are stored and the scan holds up on large customer bases
  • InitialFive step merge wizard: choose the surviving account, resolve conflicting fields, review addresses, read an exact dry run, then confirm
  • InitialDry run reports per-table rows moved, deduplicated, left untouched and in conflict before anything is written, from the same code path that executes
  • InitialIssued invoices, credit slips, payments, order details, carriers, order history, stock movements and shipments are never rewritten
  • InitialAn address referenced by an order keeps its ID and every field that appears on documents
  • InitialAutomatic discovery of every table carrying a customer reference, with a per-table strategy and detection of unique keys that would collide
  • InitialMerges run in one database transaction and block on triggers, views, non-transactional tables, missing primary keys and unresolved conflicts
  • InitialEncrypted snapshots make every merge reversible, with undo refusing when data changed after the merge
  • InitialCustomer sessions are revoked and never restored, by design
  • InitialAppend-only, hash-chained audit trail with CSV export
  • InitialAutomatic merging available but disabled by default, gated on score, independent signals and safety checks
  • InitialGDPR erasure hook purges snapshots and makes affected merges permanently non-undoable
  • InitialPrestaShop 1.6.1 to 9.x on PHP 7.1 and later, multishop aware, six languages

Demo

Test the full module before you buy

Buy a licence later and keep your settings.

  • Your 30-day demo Test it on your own shop for 30 days from the first install.
  • Ready demo shop Explore a ready demo shop in your browser.
  • No registration No account, email or store domain needed.
Launch demo shop

By downloading, you accept the demo terms and privacy policy.

By opening this demo you accept the demo terms and the privacy policy.

Loading...
Back to top