source-lm

Blog

NotebookLM (Gemini Notebook) for a literature review: 200 papers in one source

A literature review starts with a reading list of 200 papers and a notebook that takes 50 sources. That is the free cap in NotebookLM — 50 sources per notebook, 300 on Google AI Pro (Google’s plan table, checked 2026-08-21). Dragging 200 PDFs in does not fit the free notebook, and it is the wrong first move anyway.

The thing you want to query first is not 200 full texts. It is 200 titles, abstracts and metadata — who wrote what, in which venue, in which year, and which ten papers you should actually read. That is text, and not much of it against a 500,000-word cap per source. This post gets it there with source-lm, then adds the PDFs that earn it.

Export the library from Zotero

Zotero already holds the list. Right-click the collection, choose Export Collection…, and pick CSL JSON as the format. You get one .json file: a bare array, one object per reference, with title, abstract, author, issued, DOI, URL and so on.

If you have the Better BibTeX plugin, its Better BibTeX JSON export works too — an object with an items array and abstractNote instead of abstract.

An arXiv reading list goes the same way: save it into Zotero, export. And a JSON response from Semantic Scholar’s bulk paper search (a data array) is read as-is, if that is where your list lives.

What source-lm does with it

Open the notebook, open the source-lm popup on the JSON tab, pick the file. Preview shows what will be uploaded before anything is.

  • The array is found without configuration — bare array, items, or data.
  • title becomes the heading of each record; abstract (or abstractNote) becomes the body under it. A missing abstract leaves the body empty — nothing is invented.
  • Everything else — authors, issued, DOI, URL, journal, volume, pages, citation key — goes under a ## Metadata heading as an indented bullet list; Better BibTeX’s date becomes the filename cursor instead. Nested values (CSL author: [{family, given}], issued.date-parts) come out as a bullet tree, readable but not formatted as a citation.
  • Records are packed in order into Markdown files under a 400,000-word budget each — a margin under NotebookLM’s 500,000 words per source. A record is never split.

None of these exports carry a library name, so the filename prefix is empty by default. Type one in the popup — zotero-lit — and the files come out as zotero-lit-001-….md.

In the fixture run — 12 references through the same code path the popup uses — CSL JSON came out as one file of 1,351 words, Better BibTeX JSON as one file of 1,684 words, Semantic Scholar as one of 1,266. The budget is 400,000 words per file, so 200 abstracts are a handful of sources at most, not 200 — the same mechanism as a Telegram chat export, just shorter records.

The files are built in memory and sent to the notebook’s own origin. Nothing touches a server of ours; there is none.

PDFs

source-lm does not upload PDFs. NotebookLM takes them natively through its own Add sources — one PDF is one source, up to 200 MB or 500,000 words each (Google’s source page, checked 2026-08-21).

So the order is: abstracts in bulk first, ask the notebook which papers matter, then add the 10 PDFs you are actually going to read. Ten full texts plus one or two abstract files is well inside 50 sources. Two hundred PDFs never was.

Conference talks

If the field has a conference channel or a workshop playlist on YouTube, source-lm adds an Add to notebook button on the channel header and the playlist page. One click, latest N videos (default 50) or the whole playlist as loaded, into the notebook you pick. Each video is one source, so mind the cap — a 30-talk playlist spends 30 slots. Details on /youtube.

What to ask

Prompts that work over a title-and-abstract source and fall flat over a pile of PDFs:

  • “Group these papers by method and list the three most cited in each group.”
  • “Which papers were published after 2023 and contradict the claims of the ones before?”
  • “Who are the recurring authors, and which venues do they publish in?”
  • “Which ten papers should I read in full for a review on retrieval-augmented generation, and why each?”

Citations point back into the Markdown, where the DOI and the authors sit in the Metadata block under each title.

Limits

  • Re-running on a grown library does not work reliably for Zotero exports. The incremental upload keys on a cursor — a date field when one is recognised, otherwise the record’s id. CSL JSON’s issued is not a date candidate, so the cursor is Zotero’s random item key; Better BibTeX’s date is the publication date, not the date you added the item. In the fixture, a second run re-uploaded old references and skipped new ones. So a re-export means a fresh notebook, or delete the old files first — source-lm adds a batch-delete control to the Sources panel for exactly that.
  • Better BibTeX tags are not preserved. Known issue. CSL keyword is not treated as tags either; it should land in Metadata as plain text.
  • Authors are nested bullets, not citations. No “Okafor & Lindqvist, 2023”, no normalised year — the bullet tree is what NotebookLM reads.
  • Text only. Abstracts and metadata. Attachments and notes stay in Zotero.
  • NotebookLM’s own caps apply — 50 sources on the free plan, 500,000 words per source. See NotebookLM limits for every plan.
  • Free tier: 5 bulk actions a calendar month. One library export is one; one playlist is one. After that it is $29, once.

Is NotebookLM better than Zotero?

Different job. Zotero keeps the library: the PDFs, the notes, the citation keys, the BibTeX that ends up in your manuscript. It is the record of what you have and where it came from, and nothing here replaces it.

NotebookLM answers questions over a slice of that library, with citations back to the text. It is not a reference manager — no citation keys, no bibliography export; delete the notebook and nothing is lost, because the canonical copy was never there. Export from one, ask the other. source-lm is the ten seconds in between.

Not affiliated with Google. NotebookLM and Gemini are Google trademarks; this is an independent extension that automates a signed-in session.

Get source-lm — the free tier covers five library exports or playlists a month.

Back to source-lm