---
title: "Unofficial Python API for Google NotebookLM"
url: https://stacklist.com/card/0456082b-0b1a-42ac-9e56-25522a7e6713
source_url: "https://github.com/teng-lin/notebooklm-py"
stack: https://stacklist.com/stack/c691055b-de15-47a1-ad6a-6c4ecec55f18
summary: "NotebookLM-py is an unofficial Python library providing comprehensive programmatic access to Google's NotebookLM features, including capabilities not exposed in the web UI, for use with Python, CLI, and AI agents. It enables research automation, content generation (podcasts, videos, quizzes), and batch downloads while supporting integration with Claude Code, Codex, and other LLM agents."
tags: "notebooklm, python-api, ai-agents, content-generation, research-automation, unofficial-library"
key_entities: "NotebookLM (technology), Python (technology), Google (organization), Claude Code (technology), Codex (technology), MCP Server (technology), teng-lin (person), research-automation (concept), content-generation (concept)"
classification: "reference"
content_hash: "sha256:4037be036e71c6d966ce9468472a612ec06823b973176d42aaac0cc5c65d3c35"
acp_version: "0.2"
token_counts_approximate: 3017
visibility: public
agent_accessible: true
status: "final"
---

# Unofficial Python API for Google NotebookLM

notebooklm-py A Comprehensive NotebookLM Skill &amp; Unofficial Python API. Full programmatic access to NotebookLM's features—including capabilities the web UI doesn't expose—via Python, CLI, and AI agents like Claude Code, Codex, and OpenClaw. Source &amp; Development : https://github.com/teng-lin/notebooklm-py ⚠️ Unofficial Library - Use at Your Own Risk This library uses undocumented Google APIs that can change without notice. Not affiliated with Google - This is a community project APIs may break - Google can change internal endpoints anytime Rate limits apply - Heavy usage may be throttled Best for prototypes, research, and personal projects. See Troubleshooting for debugging tips. What You Can Build 🤖 AI Agent Tools - Integrate NotebookLM into Claude Code, Codex, and other LLM agents. Ships with a root NotebookLM skill for GitHub and npx skills add discovery, local notebooklm skill install support for Claude Code and .agents skill directories, and repo-level Codex guidance in AGENTS.md . 📚 Research Automation - Bulk-import sources (URLs, PDFs, YouTube, Google Drive), run web/Drive research queries with auto-import, and extract insights programmatically. Build repeatable research pipelines. 🎙️ Content Generation - Generate Audio Overviews (podcasts), videos, slide decks, quizzes, flashcards, infographics, data tables, mind maps, and study guides. Full control over formats, styles, and output. 📥 Downloads &amp; Export - Download all generated artifacts locally (MP3, MP4, PDF, PNG, CSV, JSON, Markdown). Export to Google Docs/Sheets. Features the web UI doesn't offer : batch downloads, quiz/flashcard export in multiple formats, mind map JSON extraction. Ways to Use Method Best For Python API Application integration, async workflows, custom pipelines CLI Shell scripts, quick tasks, CI/CD automation MCP Server Exposing NotebookLM tools to Claude Desktop/Code, Cursor, Windsurf, and other MCP clients REST Server Local automation over guarded HTTP routes without spawning a CLI process per call Agent Integration Claude Code, Codex, LLM agents, natural language automation Features Complete NotebookLM Coverage Category Capabilities Notebooks Create, list, rename, delete Sources URLs, YouTube, files (PDF, text, Markdown, Word, EPUB, audio, video, images), Google Drive, pasted text; refresh, get guide/fulltext Chat Questions, conversation history, custom personas Notes Create, list, rename, delete, save chat answers, save conversation history Source Labels AI-generated or manual topic labels; add/remove source membership; filter sources by label Research Web and Drive research agents (fast/deep modes) with auto-import Sharing Public/private links, user permissions (viewer/editor), view level control Content Generation (All Artifact Types) Type Options Download Format Audio Overview 4 formats (deep-dive, brief, critique, debate), 3 lengths, 50+ languages MP3/MP4 Video Overview 3 formats (explainer, brief, cinematic), 9 visual styles, plus a dedicated cinematic-video CLI alias MP4 Slide Deck Detailed or presenter format, adjustable length; individual slide revision PDF, PPTX Infographic 3 orientations, 3 detail levels PNG Quiz Configurable quantity and difficulty JSON, Markdown, HTML Flashcards Configurable quantity and difficulty JSON, Markdown, HTML Report Briefing doc, study guide, blog post, or custom prompt Markdown Data Table Custom structure via natural language CSV Mind Map Hierarchical node tree — two kinds : note-backed JSON or the newer interactive studio map ( --kind / MindMapKind ) JSON Beyond the Web UI These features are available via API/CLI but not exposed in NotebookLM's web interface: Batch downloads - Download all artifacts of a type at once Quiz/Flashcard export - Get structured JSON, Markdown, or HTML (web UI only shows interactive view) Mind map data extraction - Export hierarchical JSON for visualization tools Data table CSV export - Download structured tables as spreadsheets Slide deck as PPTX - Download editable PowerPoint files (web UI only offers PDF) Slide revision - Modify individual slides with natural-language prompts Report template customization - Append extra instructions to built-in format templates Save chat to notes - Save Q&amp;A answers or conversation history as notebook notes Source fulltext access - Retrieve the indexed text content of any source Programmatic sharing - Manage permissions without the UI Multi-account profiles - Switch between Google accounts without re-authenticating Browser cookie import - Reuse cookies from your existing browser session instead of driving Playwright Installation The full install guide — six personas (agent, end-user, library, headless, contributor, power-user), optional extras matrix, platform notes — lives in docs/installation.md . Quickest start (CLI users and AI agents) — install the CLI with uv tool (recommended) or pipx : uv tool install " notebooklm-py[browser] " # or: pipx install "notebooklm-py[browser]" notebooklm login # first run auto-downloads Chromium (~170 MB), then Google sign-in notebooklm auth check --test --json # verify: expect "status": "ok" Why uv tool / pipx ? They install the CLI into its own isolated environment and put notebooklm on your PATH — no dependency clashes with other tools, a one-line upgrade ( uv tool upgrade notebooklm-py ) or uninstall, and, crucially, they work on modern macOS (Homebrew Python) and Debian/Ubuntu where a system-wide pip install is blocked with error: externally-managed-environment ( PEP 668 ). No uv yet? curl -LsSf https://astral.sh/uv/install.sh | sh (or brew install uv / winget install astral-sh.uv ). Prefer plain pip ? It works the same inside a virtualenv (and directly on Windows, where Python isn't externally-managed): python3 -m venv .venv &amp;&amp; source .venv/bin/activate # Windows: .venv\Scripts\activate pip install " notebooklm-py[browser] " As a library (embedded in your app — no Playwright, no Chromium): uv add notebooklm-py # or, inside a virtualenv: pip install notebooklm-py If playwright install chromium fails on Linux with TypeError: onExit is not a function , see the Linux workaround . Contributors: see CONTRIBUTING.md . Quick Start 16-minute session compressed to 30 seconds CLI # 1. Authenticate (opens browser) notebooklm login # Or use Microsoft Edge (for orgs that require Edge for SSO) # notebooklm login --browser msedge # Or reuse cookies from an already-logged-in browser session # notebooklm login --browser-cookies chrome # notebooklm login --browser-cookies 'chrome::Profile 1' # one Chromium profile # (combine with --profile to populate a specific profile; # use --account / --all-accounts after auth inspect when several # Google accounts are signed in) # 2. Create a notebook and add sources notebooklm create " My Research " notebooklm use &lt; notebook_id &gt; notebooklm source add " https://en.wikipedia.org/wiki/Artificial_intelligence " notebooklm source add " ./paper.pdf " # 3. Chat with your sources notebooklm ask " What are the key themes? " notebooklm ask --prompt-file ./long_question.txt # Read question from file # 4. Generate content (use --prompt-file for long prompts) notebooklm generate audio " make it engaging " --wait notebooklm generate video --style whiteboard --wait notebooklm generate cinematic-video " documentary-style summary " --wait notebooklm generate quiz --difficulty hard notebooklm generate flashcards --quantity more notebooklm generate slide-deck notebooklm generate infographic --orientation portrait notebooklm generate mind-map # interactive studio map (default); --kind note-backed for the JSON tree notebooklm generate data-table " compare key concepts " # 5. Download artifacts notebooklm download audio ./podcast.mp3 notebooklm download video ./overview.mp4 notebooklm download cinematic-video ./documentary.mp4 notebooklm download quiz --format markdown ./quiz.md notebooklm download flashcards --format json ./cards.json notebooklm download slide-deck ./slides.pdf notebooklm download infographic ./infographic.png notebooklm download mind-map ./mindmap.json notebooklm download data-table ./data.csv Other useful CLI commands: notebooklm auth check --test # Diagnose auth/cookie issues notebooklm auth refresh --quiet # One-shot cookie keepalive (for cron / launchd / systemd) notebooklm auth refresh --browser-cookies chrome # Re-extract and repair account routing notebooklm auth inspect --browser ' chrome::Profile 1 ' # Preview one Chromium profile notebooklm agent show codex # Print bundled Codex instructions notebooklm agent show claude # Print bundled Claude Code skill template notebooklm language list # List supported output languages notebooklm metadata --json # Export notebook metadata and sources notebooklm share status # Inspect sharing state notebooklm source add-research " AI " # Start web research and import sources notebooklm skill status # Check local agent skill installation notebooklm profile list # List all Google account profiles notebooklm profile switch work # Switch active account profile Use --prompt-file PATH with ask , prompt-based generate commands, and source add-research when the text is too long for the shell command line. This reads prompt/query text from a file and is separate from source add ./file.pdf , which still uploads that file as a NotebookLM source. Python API import asyncio from notebooklm import NotebookLMClient , MindMapKind async def main (): async with NotebookLMClient . from_storage () as client : # Create notebook and add sources nb = await client . notebooks . create ( "Research" ) await client . sources . add_url ( nb . id , "https://example.com" , wait = True ) # Chat with your sources result = await client . chat . ask ( nb . id , "Summarize this" ) print ( result . answer ) # Generate content (podcast, video, quiz, etc.) status = await client . artifacts . generate_audio ( nb . id , instructions = "make it fun" ) await client . artifacts . wait_for_completion ( nb . id , status . task_id ) await client . artifacts . download_audio ( nb . id , "podcast.mp3" ) # Generate quiz and download as JSON status = await client . artifacts . generate_quiz ( nb . id ) await client . artifacts . wait_for_completion ( nb . id , status . task_id ) await client . artifacts . download_quiz ( nb . id , "quiz.json" , output_format = "json" ) # Generate a mind map via the unified client.mind_maps API (issue #1256) — # two kinds: the newer MindMapKind.INTERACTIVE studio map (shown; polled to # completion by default) or MindMapKind.NOTE_BACKED JSON. Both export via: await client . mind_maps . generate ( nb . id , kind = MindMapKind . INTERACTIVE ) await client . artifacts . download_mind_map ( nb . id , "mindmap.json" ) asyncio . run ( main ()) Agent Setup Option 1 — CLI install : notebooklm skill install Installs the skill into ~/.claude/skills/notebooklm and ~/.agents/skills/notebooklm . Option 2 — npx install (via the open skills ecosystem): npx skills add teng-lin/notebooklm-py Fetches the canonical SKILL.md directly from GitHub. Documentation CLI Reference - Complete command documentation Python API - Full API reference MCP Guide - MCP server setup, transports, and tool reference REST API Server - Experimental localhost FastAPI server Configuration - Storage and settings Release Guide - Release checklist and packaging verification Troubleshooting - Common issues and solutions API Stability - Versioning policy and stability guarantees Upgrading to v0.8.0 - Breaking-change migration guide for the v0.8.0 error-and-return contract For Contributors Architecture - Architectural overview and design principles Development Guide - Architecture, testing, and releasing RPC Development - Protocol capture and debugging RPC Reference - Payload structures Changelog - Version history and release notes Security - Security policy and credential handling Platform Support Platform Status Notes macOS ✅ Tested Primary development platform Linux ✅ Tested Fully supported Windows ✅ Tested Tested in CI Star History License MIT License. See LICENSE for details.
