When something goes wrong with notebooklm-py, start by checking your authentication state. Most issues are either expired session cookies or a changed Google RPC method ID.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/teng-lin/notebooklm-py/llms.txt
Use this file to discover all available pages before exploring further.
Common errors
Authentication errors
Authentication errors
”Unauthorized” or redirect to login page
Cause: Your session cookies have expired. This happens every few weeks. Note that automatic CSRF token refresh handles most short-lived auth errors transparently — you only see this error when the underlying cookies set duringnotebooklm login have fully expired.Solution:The client automatically refreshes CSRF tokens when authentication errors are detected. When an RPC call fails with an auth error, the client fetches a fresh token from the NotebookLM homepage and retries the request once. Concurrent requests share a single refresh task to prevent token thrashing. Most “CSRF token expired” errors resolve without any action on your part.
”CSRF token missing” or “SNlM0e not found”
Cause: The CSRF token expired and the automatic refresh also failed. This should rarely occur.Solution: If automatic refresh fails, you can trigger a manual refresh in Python:notebooklm login — the session cookies themselves may have expired.Browser opens but login fails
Cause: Google is detecting automation and blocking the login attempt.Solution:- Delete the browser profile:
rm -rf ~/.notebooklm/profiles/default/browser_profile/ - Run
notebooklm loginagain - Complete any CAPTCHA or security challenges that appear
- Use a real mouse and keyboard — do not paste credentials via a script
RPC errors
RPC errors
”RPCError: No result found for RPC ID: XyZ123”
Cause: Google periodically changes internal RPC method IDs. The library sends a method ID that no longer matches what the server expects. This can also occur due to rate limiting, account quota limits, or API restrictions.Diagnosis: Enable debug mode to see what RPC IDs the server is returning:- Wait 5–10 minutes and retry
- Try with fewer sources selected
- Reduce generation frequency
”RPCError: [3]” or “UserDisplayableError”
Cause: Google returned an application-level error. Common causes are invalid parameters, a resource that no longer exists, or rate limiting.Solution:- Verify that your notebook and source IDs are valid
- Add delays between intensive operations (see the rate limiting section below)
Generation failures
Generation failures
Audio or video generation returns None
Cause: A known issue that occurs under heavy load or when rate limited.Solution: Use--wait to poll until the artifact is ready, or poll manually:Mind map or data table generates but doesn’t appear
Cause: Generation can silently fail without raising an error.Solution: Wait 60 seconds and then checkartifact list. If the artifact is still missing, try regenerating with different or fewer sources.File upload issues
File upload issues
Text or Markdown files upload but return None
Cause: A known issue with native text file uploads.Workaround: Useadd_text instead of uploading the file directly:Large files time out
Cause: Files over approximately 20 MB may exceed the upload timeout.Solution: Split large documents into smaller parts, or extract the text locally and useadd_text.Protected website content
Protected website content
X.com / Twitter content is incorrectly parsed
Symptoms: The source title shows something like “Fixing X.com Privacy Errors”, and generated content discusses browser extensions instead of the actual post.Cause: X.com has aggressive anti-scraping protections. When NotebookLM fetches the URL, it receives an error page instead of the real content.Solution: Use thebird CLI to pre-fetch content and pass it as a local file:add_text is the most reliable fallback.Known limitations
Rate limiting
The CLI’s--retry flag adds automatic exponential backoff:
Quota restrictions
Some features have daily or hourly quotas per account:- Audio overviews: Limited generations per day
- Video overviews: More restricted than audio
- Deep research: Consumes significant backend resources
Download requirements
Artifact downloads usehttpx with cookies from your storage state. Playwright is not required for downloads — only for the initial notebooklm login. If downloads fail with authentication errors, re-authenticate:
from_storage(path=...) or from_storage(profile="work"), artifact downloads automatically use the same storage path for cookie authentication. If you are on an older version where downloads fail with “Storage file not found” pointing to the default location, upgrade or set NOTEBOOKLM_HOME as a workaround.
URL expiry
Download URLs for audio and video are temporary and expire within hours. Always fetch a fresh artifact list immediately before downloading:Platform-specific issues
Linux
Playwright missing dependencies:playwright install chromium fails with TypeError: onExit is not a function:
This occurs with some newer Playwright builds on Linux. The workaround is to install a known-good Playwright version in a clean virtual environment, before installing notebooklm-py:
pip install -e ".[all]" to avoid picking up an older broken global playwright executable. If you already have another playwright on your system, verify which one is active with which playwright after activating the venv.
No display available (headless server): Browser login requires a display. Authenticate on a machine with a GUI, then copy storage_state.json to the headless machine.
macOS
Chromium not opening:Windows
CLI hangs indefinitely: On certain environments (particularly sandboxing software like Sandboxie), the defaultProactorEventLoop can block at the IOCP layer. The library automatically sets WindowsSelectorEventLoopPolicy at CLI startup to avoid this. If you are using the Python API directly, add this before any async code:
UnicodeEncodeError when outputting Unicode characters. The library automatically sets PYTHONUTF8=1 at CLI startup. For Python API usage, either set PYTHONUTF8=1 in the environment before running, or run Python with the -X utf8 flag:
WSL
Browser login opens in the Windows host browser. This is expected behavior. The storage file is saved in the WSL filesystem.Debugging tips
Logging configuration
UseNOTEBOOKLM_LOG_LEVEL to control how much detail notebooklm-py emits:
| Variable | Default | Effect |
|---|---|---|
NOTEBOOKLM_LOG_LEVEL | WARNING | Set to DEBUG, INFO, WARNING, or ERROR |
NOTEBOOKLM_DEBUG_RPC | (unset) | Legacy: set to 1 to enable DEBUG level |