| .github | ||
| docs | ||
| maschine | ||
| plugin | ||
| scripts | ||
| src/kindle_zotero_importer | ||
| .gitignore | ||
| main.py | ||
| match-overrides.json | ||
| MEMORY.md | ||
| plugin_runner.py | ||
| pyproject.toml | ||
| README.md | ||
| zotero-writer.js | ||
Kindle Zotero Importer
Import Kindle My Clippings.txt highlights into Zotero as native annotations — directly inside Zotero, no terminal needed.
If this saves you time, please consider a small donation — please give me money ♥ (also PayPal · Ko-fi)
Install (30 seconds)
- Download
kindle-zotero-importer.xpifrom Releases (latest0.6.4, or0.6.4-betafor preview). - In Zotero:
Tools → Plugins → gear → Install Plugin From File…→ pick the.xpi→ restart Zotero. Tools → Kindle Zotero Importer…to open the manager.
Works with Zotero 7–10, macOS/Windows/Linux, PDF and EPUB.
Use
- Choose your file — click
Choose My Clippings.txtand pick your cumulativeMy Clippings.txtfrom Kindle (/Documents/My Clippings.txt). Keep the window open — you’ll see live progress. - Check Integrated — after the run,
Integratedshows what was imported (Highlight Text,Citekey,Added On,Integrated,Page). Filter to find anything. - Fix Conflicts — if a Kindle title didn’t match a Zotero item,
Conflictsshows it with up to 3 suggestionscitekey · title (score%). ClickUseon the right one, or type anycitation key/Zotero key/Item IDunderUse Custom, orIgnore Titleto skip it forever. If you mapchabot2013for oneSimondonvariant, it will offer to apply the same mapping to the other variants with that candidate. - Re-import — after you’ve fixed one or more titles, click
↻ Re-import with saved overrides(re-uses the last file, or asks for it). Only new/changed highlights are re-positioned — already integrated ones are skipped, so the second run is fast. CheckFull re-import from scratchonly if you want to rebuild everything. - Mappings — see all titles you’ve approved or ignored, newest first, with date.
Deleteany entry to send it back toConflictsfor re-matching. - Settings / Artifacts — change
Python/Zotero DBpaths andSave Settings, orOpen/Revealany generated file (mismatch-review.md,match-overrides.json, …).
Your choices are saved in match-overrides.json in the project folder — back it up, share it, or delete an entry to undo a mapping.
Tips
- Keep
My Clippings.txtcumulative (don’t clear it on the Kindle). The importer remembers what’s already integrated viakindle-id:<hash>tags, so re-imports are incremental. - If a highlight is positioned in the wrong place, check that the Zotero item has the correct PDF/EPUB attached (not a link).
Matched-title-no-attachmentinConflictsmeans that. Full re-importis only needed if you changed many mappings at once or want to rebuild from scratch.
For developers / CLI
python scripts/build_plugin.py # → dist/kindle-zotero-importer.xpi
python -m kindle_zotero_importer run "/path/to/My Clippings.txt" --workdir . --pretty
python -m kindle_zotero_importer run ... --full # ignore incremental, re-process all
PDF positioning uses Poppler (pdftotext, pdftohtml, pdfinfo) + qpdf fallback; EPUB uses CFI. Zotero writes are only via Zotero.Annotations — never direct zotero.sqlite writes.
Releases
Stable releases are on Releases with kindle-zotero-importer.xpi + updates.json attached. Pre-releases (beta) are marked Pre-release on GitHub. Zotero auto-updates from releases/latest/download/updates.json.
Support
If it helps your research, a small donation keeps the time for maintenance: please give me money ♥. Issues and pull requests welcome at Issues.