I use Zotero as my source of truth for all my scientific literature, and whenever I look into a new topic, it starts with a new collection of the latest papers in Zotero. My favorite workflow:
- take those new papers-->
- dump them into a new NotebookLM notebook-->
- generate a audio "podcast"-->
- and off to my favorite jogging trail with headphones!
Unfortunately, there's no native integration between Zotero and NotebookLM, and--what's worse--Zotero's article storage on a local file system is an utter pain to navigate, select from, and use from the NotebookLM interface's file dropzone. So, I built this plugin to automate the workflow.
It's a bit of a kludge: NotebookLM only offers an API to business customers as of this time, and so we have to manipulate the web interface using a browser extension. This arrangement likely means that the overall setup is a bit brittle! But, as I need to use it many times a week (what else am I going to listen to when I am huffing up Puʻu Pia?), I am likely to invest the time to try and keep this project maintained---and I'd welcome requests and contributions.
🌴 🌴 🌴
A Zotero 7 plugin and Chrome extension that lets you select articles from your Zotero library and import their PDFs directly into Google NotebookLM — no manual file wrangling required.
Zotero stores PDFs in opaque, key-based folder names. Manually gathering files from a subcollection and uploading them to NotebookLM is tedious and error-prone. This tool automates the entire workflow: browse your collections in Zotero, pick your sources, and push them to NotebookLM with two clicks.
The system has two parts:
-
Zotero Plugin — Adds an "Export to NotebookLM" dialog to Zotero's Tools menu. Browse your collection tree, search/filter items, and select which sources to stage. The plugin starts a local HTTP server that serves the staged files.
-
Chrome Extension — Connects to the Zotero plugin's local server, fetches the staged files, and injects them into NotebookLM's upload interface.
- Download or build the
.xpifile (see Building below) - In Zotero 7: Tools → Add-ons → ⚙ → Install Add-on From File...
- Select the
.xpifile and restart Zotero if prompted
- Open
chrome://extensions/in Chrome - Enable Developer mode (top right toggle)
- Click Load unpacked and select the
chrome-extension/directory
- Open Zotero and go to Tools → Export to NotebookLM...
- Browse the collection tree on the left to find your subcollection
- Use the search box to filter items by title, author, or year
- Click items to select them (checked items will be exported). Items without a valid PDF attachment are greyed out.
- Click Export to NotebookLM to stage the selected files
- Open notebooklm.google.com in Chrome and create or open a notebook
- Click the Zotero → NotebookLM extension icon in your Chrome toolbar
- The popup will show your staged sources with a green "Zotero connected" indicator
- Click Import to NotebookLM
- The extension will fetch each file from Zotero, then upload them all to NotebookLM's sources panel
- Keep Zotero running while importing — the Chrome extension fetches files from Zotero's local server
- You can deselect items in the Chrome popup if you change your mind
- After a successful import, staged items are automatically cleared
- If the import fails, refresh the NotebookLM tab and try again
npm install
npm run buildThe Zotero plugin .xpi will be at .scaffold/build/zotero-notebook-lm.xpi.
The Chrome extension requires no build step — load chrome-extension/ directly.
- Large batches (9+ files) may occasionally time out due to a race condition in the Chrome extension's file injection. If this happens, try importing in smaller batches.
- NotebookLM's DOM structure may change without notice, which could break the upload mechanism.
MIT — see LICENSE.
