You have a hard drive full of PDFs, sorted into folders over the years. Zotero wants them one at a time.
Zotero Folder Import takes the whole tree. Your folders become nested collections, your filenames stay exactly as they are, and nothing is renamed or looked up online. What you see in Finder is what you get in Zotero.
Before anything is written, you get a review screen. You see the counts, the collections that will be created, and the status of every single file. Then you decide.
- 📁 Your folders, kept: the directory tree becomes nested collections, filenames preserved. No metadata lookup, no renaming.
- 👀 Look before you leap: the review dialog shows totals, the collections about to be created, and per-file status — before a single file moves.
- 🤝 Conflicts are yours: Replace, Keep Both, or Ignore, file by file. A Replace imports the new copy first and only trashes the old one after that succeeds.
- ⏹️ Stop anytime: cancel mid-import and whatever already landed stays put.
- 🧩 Independent copies: each import is its own attachment, so deleting or annotating in one collection never touches another.
- 🔒 Private by design: no network calls, no telemetry, no metadata lookup. File contents are never read or hashed — matching is by filename within the destination collection only.
| Import Folder… in the File Menu | Installed in the Plugins Manager |
![]() |
![]() |
| Import Complete | |
![]() |
|
Download the .xpi from the releases page. The current release is v0.1.21.
In Zotero, go to Tools → Add-ons → gear icon → Install Add-on From File…, pick the file you downloaded, and restart if prompted.
Then choose File → Import Folder…, or right-click any collection.
Requires Zotero 10.
npm install
npm test
npm run buildnpm run build writes dist/folder-import-<version>.xpi.
There is no auto-update channel — new versions are installed the same way as the first one.



