Argus One
A DOI-based duplicate merger for Zotero
What is Argus One?
Argus One is a small Zotero plugin that solves exactly one problem: merging items that share the same DOI. Zotero’s built-in duplicate detector compares titles, creators, and years — useful, but the wrong tool when DOIs are the source of truth in a curated library.
Argus One groups items by normalized DOI, keeps the newest record’s field values, fills in blanks from older copies, unions tags, related items, and collection memberships, re-parents attachments and notes, and trashes the older copies — all in a single Zotero transaction.
Requirements
- Zotero 9 and later
- A user library with items that have DOIs (either in the dedicated DOI field or as
DOI: …in the Extra field)
Installation
- Download the latest
.xpifrom the Releases page. - In Zotero: Tools → Plugins.
- Click the gear icon → Install Plugin From File…
- Select the downloaded file.

A full walkthrough
1. Find a library with duplicates
Suppose you have imported the same set of papers from two sources — a shared group folder and a personal RIS export — and you now have two copies of many DOIs scattered across collections.

2. Run the merger
Open Tools → Argus One: merge DOI duplicates…
Argus One scans your user library, ignoring attachments, notes, trashed items, and child items. It groups what remains by normalized DOI and shows a confirmation dialog:
Found 12 DOI duplicate groups covering 27 items.
Merging will:
• Keep the newest record per DOI (by dateAdded)
• Fill missing fields from older copies
• Preserve every collection the duplicates appeared in
• Move 15 older records to trash
Proceed?
3. What happens during the merge
For each group of items that share a DOI:
| Step | Behaviour |
|---|---|
| Survivor selection | Newest dateAdded wins; ties broken by higher itemID. |
| Field conflicts | Survivor’s existing value wins. Only blank fields are filled from older copies. |
| Creators | Survivor’s creators are kept. If empty, borrowed from an older copy. |
| Tags | Unioned across all duplicates. |
| Related items | Unioned (excluding the merged-away items themselves). |
| Collections | Unioned — if the DOI was in collections A and B, the survivor ends up in both. |
| Attachments & notes | Re-parented from older copies to the survivor. |
| Older copies | Moved to trash. Not deleted permanently. |
All of the above runs inside a single Zotero.DB.executeTransaction call. If anything throws, the entire merge is rolled back.
4. After the merge
A summary dialog shows how many groups were merged and how many records were trashed:

Inspect the Zotero trash before emptying it. Once you are satisfied, Edit → Empty Trash.
DOI normalization
A DOI like https://doi.org/10.1000/XYZ.123, doi:10.1000/xyz.123, and 10.1000/XYZ.123 are all treated as the same key. Normalization:
- Lowercases the string
- Strips a leading
https://doi.org/orhttps://dx.doi.org/ - Strips a leading
doi: - Trims whitespace
- Requires the result to match
^10\..+/.+
If an item has no value in the dedicated DOI field, the Extra field is scanned for DOI: ….
What Argus One does not do
- It does not merge items without a DOI. Use Zotero’s Duplicate Items view for fuzzy title matching.
- It does not delete anything permanently. Losers move to trash.
- It does not modify group libraries in this version.
Citing Argus One
If you use Argus One in published work, please cite it. The canonical metadata lives in CITATION.cff.
BibTeX
@software{heller_argus_one_2026,
author = {Heller, Raban},
title = {Argus One: DOI-based duplicate merger for Zotero},
year = {2026},
version = {0.1.0},
license = {MIT},
url = {https://github.com/CTTIR/argus-one},
note = {Zotero 9+ plugin}
}APA
Heller, R. (2026). Argus One: DOI-based duplicate merger for Zotero (Version 0.1.0) [Computer software]. https://github.com/CTTIR/argus-one
Links
- Source code: https://github.com/CTTIR/argus-one
- Issues: https://github.com/CTTIR/argus-one/issues
- Releases: https://github.com/CTTIR/argus-one/releases
- License: MIT