FreeScout automation · runs weekly
Merge duplicate FreeScout conversations
A customer who gets no answer writes again instead of replying, and now two conversations about one problem sit in your FreeScout queue, each with a different teammate working on it.
Cotlet does it in your own FreeScout account with list_conversations, get_conversation and merge_conversations, called by your AI agent, an n8n workflow or a script.
Hosted · nothing to install or maintain
Can FreeScout do this on its own?
FreeScout merges conversations in its web app, but its REST API lists no merge endpoint (checked 23 Oct 2026). So even with the paid API & Webhooks module a script or agent cannot merge two conversations; it can only move one to another mailbox or change its status.
How you do it in FreeScout today
- An agent notices the second conversation from the same customer, or finds it by searching the customer, or by number with a # in front, for example #12345.
- The agent opens one of the two conversations and chooses Merge (key M) from its actions.
- The agent picks the other conversation to merge with, and FreeScout joins the two.
- Merging customers is a separate action: an agent adds the extra email address to the customer profile, or presses the Merge button at the bottom of the customer profile. Only email addresses and conversations move.
- Nothing flags duplicates in the list, so they are found by reading the queue.
How to merge duplicate FreeScout conversations
Find active conversations in my Support mailbox where the same customer wrote twice about the same problem. Merge the newer one into the older one and list pairs you are unsure about. - 01
Collect the active queue
list_conversations reads the active conversations of the mailbox page by page. The agent groups them by the customer email in each row, because two conversations of one customer are the only pairs it considers.
- 02
Compare the two threads
For each pair, get_conversation reads both threads. The agent merges only when the subjects and the first customer messages describe the same problem. Two different questions from one customer stay apart.
- 03
Pick which one stays
The older conversation is kept, because it carries the history your teammates know. merge_conversations takes the newer one as conversation_id and the older one as merge_into_id.
- 04
Merge and report
merge_conversations asks for your OK per pair by default, since a merge cannot be reversed with one call. The agent reports the conversation that remains and its link.
- 05
Leave unsure pairs
Pairs where the customer wrote about two topics, or where two teammates are already answering, are listed with the reason and not merged.
What you get back
Active conversations scanned: 41
Same customer, 2 or more conversations: 5 pairs
Merged 3 (e.g. Tom Becker, "Export to CSV fails" into the older one)
Left for you 2:
- Maria Silva: billing question and a feature request
- Jake Ortiz: two teammates already replying Other ways to ask
- Look only at conversations from the last 7 days and merge exact duplicates by subject.
- List the duplicates and the conversation I should keep, but do not merge.
- Also check the Closed conversations for a customer who reopened the same issue as a new one.
What FreeScout allows, and what to know first
- FreeScout offers Merge as an action inside a single conversation, with the shortcut M.
- FreeScout's REST API lists no merge endpoint, so merging conversations only happens in the app.
- Merging customers in FreeScout is a different action from merging conversations: only email addresses and conversations move, and no other customer data is copied.
- FreeScout's search finds a conversation by number when you put # in front of it, for example #12345, and it shows deleted conversations too unless you set the State filter.
- With the Custom Fields module, merging conversations also merges custom fields: empty fields in the original take the values from the second conversation.
merge_conversations asks for your OK by default. To run it weekly without you, switch confirmation off for that tool in your dashboard.
Sources: FreeScout: Keyboard Shortcuts module · FreeScout API docs · FreeScout Wiki: FAQ · FreeScout: Custom Fields module
Call merge_conversations from a script
curl -X POST https://cotlet.dev/api/v1/freescout/merge-intos/4821/conversations/4833/merge \
-H "Authorization: Bearer $COTLET_API_KEY" {
"merged_conversation_id": 4833,
"remaining_conversation_id": 4821,
"url": "https://support.yourcompany.com/conversation/4821"
} MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is freescout_write → merge_conversations. Example data.
Schedule it in n8n, Make, Zapier or cronFreeScout tools this automation uses
| Tool | Parameters |
|---|---|
| list_conversations | mailbox_id, status, assigned_to, query, page |
| get_conversation | conversation_id |
| merge_conversations | conversation_id, merge_into_id |
Frequently asked questions
Is it safe to connect FreeScout to Cotlet?
Yes. You sign in to FreeScout yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get FreeScout 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.
Give your agent access to FreeScout.
Free 7-day trial with 2,000 credits, no card needed. Cotlet is independent and not affiliated with FreeScout.