[Cotlet](https://cotlet.dev/index.md) · [Integrations](https://cotlet.dev/integrations.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Use cases](https://cotlet.dev/use-cases.md) · [Security](https://cotlet.dev/security.md) · [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md) · [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [Contact](https://cotlet.dev/contact.md) · [Pricing](https://cotlet.dev/pricing.md) · [Sign up](https://cotlet.dev/signup)

# Merge duplicate Mautic contacts

> Find duplicate Mautic contacts after imports and form fills, check each pair and merge them, with unclear pairs left for you. Runs weekly.

Source: https://cotlet.dev/integrations/mautic-api-mcp-server/merge-duplicate-contacts

After a CSV import and a few webinar forms, the same person sits in Mautic twice, once with their old email and once with a new one, and every campaign emails both.

Cotlet does it in your own Mautic account with list\_contacts, get\_contact, get\_contact\_history and merge\_contacts, called by your AI agent, an n8n workflow or a script.

[Sign up free](https://cotlet.dev/app/signup?app=mautic) [All Mautic tools](https://cotlet.dev/integrations/mautic-api-mcp-server.md)

Hosted · nothing to install or maintain

## Can Mautic do this on its own?

Mautic merges one pair at a time from the contact page (checked 23 Oct 2026). It matches duplicates on the fields of its duplicate-matching operator, AND by default or OR if you change it under Contact Merge. The REST API is off by default and needs OAuth2 or basic auth set up first. Nothing in the documentation lists likely duplicate pairs for you.

## How you do it in Mautic today

1. On the Contact detail page, click the drop down box arrow at the top right and choose the Merge item.
2. Search for the other contact, then press the Merge button.
3. To find the pairs first, scan the Contacts list by hand, or open each contact History and look for Imported, Added through API and Form Submitted events to see where the second record came from.
4. Under Settings > Configuration, the Contact Merge setting decides whether the duplicate-matching operator is AND (the default) or OR.
5. The scan and the merges repeat after every import, because nothing lists the pairs for you.

## How to merge duplicate Mautic contacts

Prompt

```
Find duplicate contacts in Mautic with the same name and a similar email, keep the one with more points and merge the other into it. Leave unclear pairs for me.
```

1. 01  
### Collect candidates  
Your agent reads the contacts page by page with list\_contacts and groups them by lowercased email and by name plus company. Pairs that share a name but not a company or an email domain go to the unclear pile, not to a merge.
2. 02  
### Compare each pair  
For every pair, get\_contact brings both records. The agent keeps the contact your rule prefers, for example the one with more points, and notes which custom fields only the other one has filled.
3. 03  
### Check where the copy came from  
get\_contact\_history shows the Imported, Contact Created By Source and Form Submitted events of the second record. A copy made by an import of the same list is a safe merge; a copy from a different form may be another person with the same name.
4. 04  
### Merge, one pair at a time  
merge\_contacts runs from the contact you keep. Each call waits for your OK by default, because the agent cannot undo a merge. An ID that is gone fails before anything changes.
5. 05  
### Stop on changed pairs  
Right before merging, the agent reads both contacts again. If either one changed, for example a form fill added points, it skips the pair and lists it for you.

### What you get back

Example data

```
Contacts scanned: 480
Duplicate pairs found: 7
Merged 5 (same email, one from the webinar-signups.csv import)
Left for you 2:
- Tom Becker: two companies, two email domains
- Maria Silva: second record came from a different form
```

### Other ways to ask

- Only check contacts added in the last 30 days, and list the pairs without merging.
- Merge pairs with the same email when one has an Imported event and the other a Form Submitted event, keep the form one.
- After each import, report how many of the imported contacts already existed.

## What Mautic allows, and what to know first

- Mautic's duplicate-matching operator is AND by default, so two contacts match only when all the matching fields agree; switching it to OR under Contact Merge matches on any one field.
- Mautic's contact History records how each record arrived, with events such as Imported, Added through API and Contact Created By Source.
- Mautic's Delete Selected batch action handles at most 100 contacts per run, so deleting duplicates by hand is slower than merging them.
- Contact page menu items Segments and Campaigns show a green switch where the contact is a member, so you can see what a duplicate was subscribed to before merging.

merge\_contacts asks for your OK by default. To run it weekly without you, switch confirmation off for that tool in your dashboard.

Sources: [Mautic Documentation: Managing Contacts](https://docs.mautic.org/en/5.x/contacts/manage%5Fcontacts.html) · [Mautic Developer Documentation: Getting started with the REST API](https://devdocs.mautic.org/en/5.x/rest%5Fapi/getting%5Fstarted.html)

## Call merge\_contacts from a script

curl

```
curl -X POST https://cotlet.dev/api/v1/mautic/duplicates/2217/contacts/1042/merge \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

Example response

```
{
"merged": true,
"contact_id": 1042,
"removed_contact_id": 2217
}
```

MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is mautic\_write → merge\_contacts. Example data.

[Schedule it in n8n, Make, Zapier or cron](https://cotlet.dev/integrations/mautic-api-mcp-server.md#automations)

## Mautic tools this automation uses

__Cotlet Mautic tools used to merge duplicate Mautic contacts__
| Tool | Parameters |
| --------------------- | ------------------------------------- |
| list\_contacts | search, limit, cursor |
| get\_contact | contact\_id |
| get\_contact\_history | contact\_id, include, exclude, cursor |
| merge\_contacts | contact\_id, duplicate\_id |

[All 15 Mautic tools with descriptions](https://cotlet.dev/integrations/mautic-api-mcp-server.md#tools)

## Frequently asked questions

### Is it safe to connect Mautic to Cotlet?

Yes. You sign in to Mautic yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get Mautic once you enable it, every background request is listed, and the browser profile is stored encrypted with AES-256-GCM, the cipher 1Password uses for its vaults. The AI model never sees a login, posts and messages wait for your OK, and Disable for agents cuts access in one click. Independent scanners grade cotlet.dev A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory; live results are on https://cotlet.dev/security.

## More Mautic automations

- [Add Mautic contacts to segments in bulk](https://cotlet.dev/integrations/mautic-api-mcp-server/add-contacts-to-segments.md)
- [Weekly Mautic email performance report](https://cotlet.dev/integrations/mautic-api-mcp-server/weekly-email-report.md)
- [Mautic API and MCP server: every tool](https://cotlet.dev/integrations/mautic-api-mcp-server.md)
- [All use cases](https://cotlet.dev/use-cases.md)

## Give your agent access to Mautic.

Free 7-day trial with 2,000 credits, no card needed. Cotlet is independent and not affiliated with Mautic.

[Sign up free](https://cotlet.dev/app/signup?app=mautic)

---

Give your AI agents your signed-in browser.

**Product:** [Integrations](https://cotlet.dev/integrations.md) · [Use cases](https://cotlet.dev/use-cases.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Pricing](https://cotlet.dev/pricing.md) · [Security](https://cotlet.dev/security.md)

**Resources:** [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [GitHub](https://github.com/cotletdev/cotlet)

**Solutions:** [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md)

**Company:** [About](https://cotlet.dev/about.md) · [AI info: company facts](https://cotlet.dev/ai-info.md) · [Contact](https://cotlet.dev/contact.md)

**Legal:** [Terms of service](https://cotlet.dev/terms) · [Privacy policy](https://cotlet.dev/privacy) · [Refund policy](https://cotlet.dev/refunds) · [Acceptable use](https://cotlet.dev/acceptable-use) · [Cookie policy](https://cotlet.dev/cookies) · [DPA](https://cotlet.dev/dpa) · [Subprocessors](https://cotlet.dev/subprocessors)

**Elsewhere:** [Status page](https://status.cotlet.dev) · [Cotlet on GitHub](https://github.com/cotletdev) · [Cotlet on X](https://x.com/cotletdev) · [Cotlet on LinkedIn](https://www.linkedin.com/company/cotletdev) · [Cotlet on Product Hunt](https://www.producthunt.com/products/cotlet) · [Cotlet on Crunchbase](https://www.crunchbase.com/organization/cotlet) · [Cotlet on SaaSHub](https://www.saashub.com/cotlet)

Cotlet.dev is built by Bart Krawczyk and Jake Slugocki, the founders of Take Group sp. z o.o., ul. Wincentego Janasa 4, 40-855 Katowice, Poland. KRS 0000871398, NIP 6342984273, VAT EU: PL6342984273. [About us](https://cotlet.dev/about.md)

Cotlet is an independent service. It is not affiliated with, endorsed by or sponsored by any of the products listed on this site. Product names are trademarks of their respective owners.
