She booked online as "Jen Alvarez," called back and the front desk created "Jennifer A," then her husband walked in and made a third record. Now her invoice history is split three ways and her lifetime spend is wrong on all three.
SalesThumb has a real merge for this. It lives on the customer's profile — not on the Customers list, which is where most people go looking for it first.
Where the merge button actually is
Go to Customers, open the record you want to get rid of (the duplicate, not the keeper), then click the pencil icon in the top-right of the Contact card. That opens the Edit customer dialog. At the bottom-left, next to the red Delete button, is Merge into another customer.
Direction matters. You start from the record you want to retire — the dialog moves *that* customer's history onto whoever you pick, then archives it.
From there:
- Use the Merge into search box to find the customer you're keeping — it only searches existing customers, there's no "create new" option here
- A line of small print confirms the duplicate will be archived and that this can't be undone from the app
- Click Merge, then click Confirm merge — it's a deliberate two-step, so the first click never fires the merge
- On success you get a toast with the counts that moved, and SalesThumb drops you on the surviving customer's profile
This is web-dashboard only. The mobile app's customer edit screen has a Delete button but no merge.
What actually moves
- Vehicles — all of them, with their VIN/plate/history intact
- Appointments — and the job photos with them, since photos are attached to the appointment rather than to the customer
- Quotes
- Invoices — and their payment history, which hangs off the invoice
- The Pipeline card, if the duplicate had one
The pipeline card has one rule worth knowing. If both records are sitting on the Customers → Pipeline board, the duplicate's card is dropped rather than stacked onto the keeper — you can't have two cards for the same person. If only the duplicate was on the board, its card moves over and keeps its column and position.
What does not move
This is the part to understand before you click Confirm.
- Text and email history — messages stay attached to the archived record, so past SMS threads do not show up under the surviving customer
- Loyalty stamps — the stamp count stays on the duplicate
- Memberships — subscriptions and their redemption history stay put
- Warranties
- Review requests, waitlist entries, recurring appointments, and customer-portal links
That's deliberate, not an oversight. The customers table is referenced by roughly twenty other tables; the merge re-points the five things the customer profile and the pipeline board actually show an operator, and everything else stays attached to the old row. Which is exactly why the old row gets archived instead of deleted — deleting it would take those records with it.
The duplicate is archived, not deleted
After a merge, the source record is stamped with a reserved internal tag, gets a dated note reading "Merged into [keeper's name] on [timestamp]," and has its marketing opt-in switched off so no campaign ever fires at a dead record.
Practically, that means it vanishes from the Customers list and from every customer picker in the app — booking, quotes, invoices, and the merge picker itself. It is still in the database, and its direct profile URL still opens if you happen to have the link. It just stops cluttering the directory.
There is no undo button. If you merge the wrong direction — keeper into duplicate instead of the other way round — stop and email info@roffik.com rather than trying to merge it back, because a second merge only creates a second archived record.
Copy the good details over first
There's no field-by-field "which phone number wins" step. The keeper's name, email, phone, address, tags, and notes are left exactly as they were, and the duplicate's contact details are simply not consulted.
So if the duplicate is the record with the correct email and the keeper has none, put it on the keeper before you merge. Afterward it's sitting on an archived record you can't find from the list.
Who's allowed to do it
Merge and delete both require the manage customers permission. Owner, Admin, Manager, Front Desk, and Service Writer have it by default; Technician does not. An owner can flip it for a specific person through that staff member's permission overrides under Staff.
It isn't gated to a plan tier — merge works the same on Basic through Pro.
Both customers have to belong to the same shop. If you're running multiple locations, you can't merge a customer at one location into a customer at another — you'll get "Customer not found." And merging a customer into itself is rejected outright.
Why a customer won't delete
Click Delete customer on a record with any real history and you get a red banner reading something like: "Cannot delete a customer with existing 2 quotes, 1 invoice — archive or merge into another customer instead."
That's not a glitch. Quotes, invoices, appointments, and warranties all carry a required link back to the customer, so deleting the customer would orphan real financial records. SalesThumb checks first and refuses cleanly instead of letting the database throw a raw error at you. Four things block a delete:
- Any quote
- Any invoice
- Any appointment
- Any warranty
Status is irrelevant — a canceled appointment or a long-dead draft quote still counts. The message lists every category that's blocking you, with counts, in one shot.
A delete only goes through on a customer with none of those four. In practice that's a typo'd walk-in from five minutes ago, or an empty record somebody created by accident.
Ignore the delete confirmation's wording
The confirmation box says the delete "removes the customer and every vehicle, quote, invoice, and message history tied to them." That copy overstates what happens. If the customer has a quote, invoice, appointment, or warranty, the delete never runs at all.
When a delete *does* succeed — meaning the record was already empty of those four — what goes with it is the customer's vehicles, their loyalty stamps, and any membership subscription or redemption rows. Text and email history isn't destroyed; it stays in your Messages inbox, just no longer attached to a customer.
Merging does not unlock the delete
The obvious next move after a merge is to delete the empty shell. It won't work, and that's by design. Warranties don't move in a merge, so a duplicate that had one still has one and still blocks the delete. Loyalty stamps and message threads stay too.
Archived is the intended end state. It's already out of your list, your search, and your pickers — which is the outcome you actually wanted.
There's no duplicate detector
Nothing scans your customer base and suggests merges, and there's no bulk merge or multi-select on the Customers list. You find duplicates by searching a name or phone number, and you merge them one at a time from each duplicate's profile.
The only automatic dedupe runs at import time. On the import screen you choose how a row that matches an existing customer by email or phone is handled — skip it, update the existing record with the new non-empty fields, or allow the duplicate anyway. See CSV format for customer import for the column layout, and How to add a vehicle to a customer's profile for cleaning up the vehicle side after a merge.
Every merge is logged
A merge writes both an activity-feed entry and an audit-log record: who did it, when, both customers' names, and the counts of vehicles, appointments, quotes, and invoices that moved. If someone's lifetime spend jumps overnight and nobody can explain it, that's where to look.
Q: Can I merge three duplicates into one record? A: Yes, one at a time. Open each duplicate and merge it into the same keeper. Order doesn't matter.
Q: The customer I want to merge into isn't showing up in the picker. A: The picker searches your live customer list, which excludes already-archived records. If that record was itself archived by an earlier merge, pick the one that survived instead.
Q: Will merging fix the customer's lifetime spend? A: For invoices, yes, and immediately — the profile calculates lifetime spend live from completed payments on the customer's invoices, so the number is correct the moment the invoices move. Loyalty stamp counts won't follow.
Q: Can I merge a customer across two of my locations? A: No. Both records have to belong to the same shop; a cross-location attempt returns "Customer not found."
Still stuck on a record that won't delete or merge? Use the in-app help widget or email info@roffik.com with the customer's name and shop.