Twinmend documentation
Twinmend finds end users who exist more than once in your Zendesk account, shows them side by side, and merges the ones you approve through Zendesk's own merge, with a dry run first and a snapshot of every merged profile. It is made by Great Work LLC (hello@greatwork.company).
Requirements
- Zendesk Suite (any plan) or Support Enterprise: Twinmend keeps its records in one custom object.
- Merging needs an admin, or an agent role that can edit end users. Anyone the app is visible to can scan, compare and see the sidebar hint.
- Plans by team size: Team up to 15 agents and admins ($49 a month), Growth up to 50 ($129), Business up to 150 ($379), Enterprise above 150 ($2.75 per agent a month). 14-day trial.
Install
- Install from the Zendesk Marketplace and pick the plan for your team size.
- Settings: Let agents merge from the ticket and user sidebars (on by default) and Keep merge snapshots for (days) (365 by default).
- On Enterprise plans, give custom roles access to the "Twinmend record" object in Admin Center (Objects and rules, Custom objects), so their merges are recorded.
Find duplicates
Open Twinmend in the left navigation bar and click Scan end users. Twinmend reads your end users in your browser (100 per request, pausing when your account's API budget runs low) and lists groups of profiles that look like one person, best matches first. Each group shows a score and why it matched. Use the search box and the score filter to narrow the list.
- Compare opens the profiles in columns. Matching emails, phone numbers and organizations are highlighted. Ticket counts load when you open it.
- Pick the profile to Keep. Twinmend suggests the verified one with an organization, then the one with the most contact details, then the oldest.
- Not duplicates records that these are different people. Twinmend does not suggest them again, here or in the sidebar. History lists these pairs, with Suggest again.
- Groups larger than your bulk limit (6 by default) are marked for one-by-one review: open Compare and narrow them with Not duplicates first.
- Values shared by many users (a hotel switchboard, a reception address) are ignored and listed above the queue.
Matching rules
The Rules tab (admins) turns each rule on or off and sets its score:
| Rule | Default score | Example |
|---|---|---|
| Same email apart from case, a +tag or Gmail dots | 95 | dana.whitfield+shop@gmail.com and DanaWhitfield@gmail.com |
| Same phone number | 90 | (469) 555-0142 and +1 469 555 0142 |
| A caller's number matches a known phone | 85 | a user named Caller +1 (469) 555-0142 and the customer with that number |
| Same name in the same organization | 75 | Omar Haddad and Haddad, Omar, both in Lakeside Cycles |
| Same name and the same company email domain | 70 | both at lakesidecycles.example (webmail domains do not count) |
| Email one typo apart | 60 | dana.whitfeld@harbor.example and dana.whitfield@harbor.example |
| Same email user name at a different domain | 55 | dana.whitfield@gmail.com and dana.whitfield@outlook.com |
| Same full name only | 40, off | for small customer bases |
A pair's score is its strongest rule plus 5 for each other rule that matched, up to 100. Pairs at or above Suggest at score (60) are shown. Every email and phone on a profile counts, not just the primary ones. Names are compared without accents, punctuation, titles or word order; placeholders such as "Unknown", "Caller" or "Visitor 48213" never match by name.
Settings on the same tab: Phone country code for numbers typed without one (1 by default), Shared-value limit (25), Largest bulk group (6), Sidebar auto-check (days) (30), and whether dots in Gmail addresses matter.
Dry run and merge
Select groups and click Dry run. Nothing changes. For every merge Twinmend reads both profiles fresh and lists:
- Moves to the kept user: requested tickets (closed and archived ones too; each ticket's events show the requester change and triggers do not run), CCs on tickets that are not archived, email addresses (as secondary emails), phone numbers, and organizations (all of them if your account allows several organizations per user, otherwise only when the kept user has none).
- Lost in the merge: the merged profile's name, tags, notes, details, user fields, time zone, language and external ID, and the link to their Help Center activity. Zendesk then deletes the merged user permanently. Twinmend keeps a snapshot of these values for its undo.
- Refused by Zendesk: agents and admins, users who requested more than 10,000 tickets, users created by a ticket sharing agreement. A warning appears for users with an external ID (Zendesk refuses those when JWT or SAML single sign-on is on) and for unverified users without an email address or X account.
- The number of tickets that change requester, an estimate of API calls and time.
Click Merge. Twinmend merges one user at a time: it reads both users again, saves the snapshot in your Zendesk, then asks Zendesk to merge. If Zendesk refuses, the snapshot is removed and the reason is shown. Stop finishes the current merge and stops.
Sidebar hint
On a ticket, Twinmend checks the requester; on a user profile, that user. If it finds likely duplicates it says "This requester may be a duplicate of ...", with the score and the reason.
- New customers (created in the last 30 days, configurable) are checked when the ticket opens; others with Check for duplicates. A check makes up to six lookups.
- Compare shows both profiles and the dry run for this pair. Merge into ... merges right there when the setting allows it and your role can edit end users.
- Not duplicates works as on the main page.
History and undo (best effort)
History lists every merge made with Twinmend: who, when, the score, the reason, and the snapshot. Zendesk itself cannot undo a merge. Undo (best effort) first shows exactly what it can do, then on Recreate:
- creates the merged customer again as a new end user with the name, tags, notes, details,
user fields, time zone and language from the snapshot (tagged
twinmend_restored), - moves their email addresses and phone numbers from the kept user back to them,
- puts them back in their organizations and takes the kept user out of organizations the merge added,
- makes them the requester of their tickets that are still open (this is a normal ticket update, so your triggers run on it).
It cannot restore: the original user id (links to the old profile stop working), tickets that are closed (Zendesk locks them), CCs, Help Center activity, sign-in or the profile picture, and social or messaging identities. If an email address became the kept user's primary email, it stays there. The report is saved on the record.
Privacy, retention and erasure requests
- Twinmend has no server. Scan results live in the open page only and are gone when you close it. There is no download.
- Snapshots are personal data of the merged customer, kept in your Zendesk as "Twinmend record" records. Delete N older than ... days in History removes old ones; Delete removes one.
- When you handle a request to erase a customer, also delete their Twinmend records (search the "Twinmend record" object in Admin Center or use Delete in History): Zendesk's user deletion does not reach custom object records.
Uninstall
Uninstalling leaves your users as they are. Zendesk keeps the "Twinmend record" object, so a reinstall still has your history and rules. To remove everything, delete the object in Admin Center (Objects and rules, Custom objects).
Troubleshooting
| Message | What to do |
|---|---|
| "Twinmend could not save its before-merge snapshot" | The custom object is missing (a test install, a plan without custom objects, or it was deleted). Reinstall from the Marketplace on a Suite or Support Enterprise account. Nothing was merged |
| "Your Zendesk role does not allow this" | Merging needs an admin or an agent role that can edit end users |
| "Your account has N agents and admins. The ... plan covers ..." | Change plan in the Zendesk Marketplace; scans and dry runs keep working |
| A merge refused with "external id" | Your account uses single sign-on; Zendesk does not merge users with an external ID |
| The sidebar says "checks on request" | The user is older than the auto-check window; click Check for duplicates |
| A pair keeps coming back | Click Not duplicates; it is remembered |
Support: hello@greatwork.company, reply within one business day.