Free open source tool

ticket-dedupe

Scan a ticket export offline and cluster likely duplicate and repeat contacts into a human merge-review sheet. It never merges, closes, or modifies anything.

View source on GitHub

Runs fully in your browser, files never leave your device.

Run it in your browser

Upload a ticket CSV export with id, requester, subject, body, created_at and status columns, and download the exact files the CLI writes: clusters.csv and repeat-contacts.md. Review only, nothing is merged or changed.

CLI flag: --threshold. Default 0.8.
CLI flag: --window-days. Default 7, boundary inclusive.
CLI flag: --repeat-days. Default 30. Used by the repeat contacts report.

What it does

Subject normalisation first: reply and forward prefixes stripped, ticket numbers removed, case folded
Exact matches on the normalised subject, plus fuzzy matches from word overlap (Jaccard) similarity over subject and body
Pairs only considered inside a configurable time window (default 7 days, boundary inclusive)
Version 1 pairs tickets from the same requester only, with a small confidence boost for repeat contacts
Outputs clusters.csv with reason and confidence per cluster, plus a repeat-contacts.md report
Fully offline and review-first: a human decides every merge

Install and usage

Requires Node.js 20 or newer. No packages to install.

git clone https://github.com/aamirtechs/ticket-dedupe.git
cd ticket-dedupe
node src/cli.js examples/tickets.csv --out-dir out

This writes clusters.csv and repeat-contacts.md to the output directory. Similarity threshold, window and repeat period are configurable.