Skip to content

BibTeX Deduplicator

Find the entries in a .bib file that describe the same work, keep one of each and download the result.

Step 1: Add your library

Paste or upload a library in step 1 to scan it.

Step 2: Keep one of each

Duplicate entries will be grouped here

Scan your library and entries that share a DOI, or have the same title once case, braces and punctuation are ignored, are shown side by side. Entries with different DOIs are never grouped. You pick the one to keep in each group; nothing is merged for you.

How-to guide

How to de-duplicate a BibTeX library

Merging reference libraries almost always creates duplicate citations. Here is the fastest way to find and remove them without uploading your research data.

1

Add your library

Paste BibTeX entries into step 1, or press Upload .bib to load a file. Merged exports from Zotero, Mendeley or EndNote are the usual source of duplicates. Load example gives you five entries to try.

2

Scan for duplicates

Press Scan for duplicates. Entries that share a DOI, or whose titles match once case, braces and punctuation are ignored, are put in one group. Two entries with different DOIs are never put in one group, whatever their titles.

3

Keep one of each

In each group, click the entry to keep. Keep the most complete in each picks, in every group, the entry with a DOI and the most fields filled in.

4

Download the clean file

When every group has an entry kept, press Download cleaned .bib. The file is your library with the other entries taken out: the order, the kept entries and any @string, @comment or @preamble blocks are as they were. If you change the text in step 1 after a scan, the results are marked out of date and the download is switched off until you scan again.

How the deduplicator works

Two kinds of match

A DOI is a globally unique identifier, so two entries sharing one are treated as the same work. A DOI is read in any of the forms it is written in (bare, as a doi.org, dx.doi.org or www.doi.org link, or after doi:) and compared without regard to case; a doi field that does not hold a DOI, such as n/a, counts as none. Entries are also grouped when their normalized titles match once case, braces, accents, formatting commands and punctuation are set aside. Every word, number and formula still counts, so two titles that differ only in \ce{NaCl} and \ce{KCl} stay apart. This catches duplicates where one copy is missing its DOI, a common result of merging databases.

Transitive grouping & privacy

Matches are combined with a union-find structure, so a chain such as A(doi)=B(title)=C collapses into a single conflict. A DOI outranks a title: two entries with different DOIs are never grouped. A title that entries with different DOIs share (Editorial, or a preprint and the article it became) is the title of more than one work, so it links nothing: those entries are grouped by DOI alone, an entry with that title and no DOI is left on its own, and all of them are listed under the groups for you to compare. The result does not depend on the order of the file. Nothing is auto-merged field-by-field, you choose which record survives. All parsing happens locally in your browser; your library is never uploaded.

Frequently asked questions

Is my bibliography uploaded to a server?
No. Parsing and de-duplication run entirely in your browser using client-side JavaScript. Your .bib data never leaves your device.
How are duplicates detected?
Two entries are grouped when they share a DOI (the most reliable signal) or their normalized titles match. Matches are grouped transitively, so overlapping DOI and title links are collapsed into one conflict. Two entries with different DOIs are never grouped: a title they share is not used to link any entry, and the entries with that title are listed separately for you to compare.
Will it automatically merge fields from both copies?
No. The tool never silently combines records. For each conflict you keep exactly one entry, so you stay in control of which metadata is retained.
Why were two different papers flagged as duplicates?
They share an identical normalized title (for example, a generic title like ‘Introduction’) and at most one of them has a DOI. Review the conflict and keep both by choosing one, then re-adding the other if needed. Entries with different DOIs are never grouped, so DOIs prevent most false matches.
What input does it accept?
Standard BibTeX (.bib) entries such as @article, @inproceedings and @book. @string macros and month macros such as jul are expanded before entries are compared; @comment and @preamble blocks are not compared. The download keeps all of these blocks, and each kept entry exactly as it was written.

Runs entirely in your browser, no data leaves your device.