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.
| Cluster | Ticket IDs | Reason | Confidence |
|---|
repeat-contacts.md
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.