Is NotebookLM Flashcards Export safe?
We analyzed NotebookLM Flashcards Export version 1.0.1's actual code and gave it a 78/100 trust score. This is a mostly purpose-aligned exporter, but Anki…
Bottom line
This is a mostly purpose-aligned exporter, but Anki export uploads all flashcards to a separate service without clearly telling you.
What it can access
It can read NotebookLM flashcard text on matching pages and create downloads, which fits its export purpose but may include sensitive work or study material [Q1].
Security weaknesses
The Anki result is downloaded without checking the server response type, though the package is not opened or executed [Q22].
Signs of misuse
Anki export sends complete flashcard contents to a separate converter after a click, without clearly warning that the material leaves the browser [Q6].
Code findings
What access does this extension ask for, and does that access make sense for what it claims to do?
It has active-tab script-injection capability plus persistent host access to NotebookLM and Google user-content hosts. Current code uses that access only after an export click and injects one packaged extractor into the active tab.
Declares activeTab, scripting, notebooklm.google.com, and *.usercontent.goog access. — manifest.json:10-24
Queries the active tab and injects extractFlashcardsFromPage only from the three export-button handlers. — popup.js:1-18,29-46,57-75
Which websites can it run on, and can it read or change what appears on those pages?
It reads a page's app-root data-app-data attribute and returns the flashcards inside it. It does not scan arbitrary text, links, or unrelated page fields.
Finds app-root, decodes its data-app-data attribute as JSON, and returns data.flashcards. — popup.js:85-97
Runs the extractor in all active-tab frames and accepts the first non-empty result. — popup.js:5-15,33-43,61-71
Can it see sensitive information you type, such as passwords, payment details, messages, or form entries?
Flashcards can contain personal, educational, or work-related source material. The extension reads their front and back text for the requested export, but does not inspect forms, messages, or other page data.
Extracts data.flashcards and reads each card's front and back fields. — popup.js:85-104
Provides explicit CSV and Anki export actions. — index.html:10-15
Can it access private browser data such as cookies, signed-in sessions, browsing history, bookmarks, or downloads?
No evidence of this behavior was found in the reviewed package.
Requests activeTab and scripting only; it has no cookies, history, bookmarks, storage, or tabs permission. — manifest.json:10-24
Contains no storage API and uses the active tab only as the injection target. — popup.js:1-134
Can it access anything else on your device, such as files, location, camera, microphone, clipboard, or installed applications?
It creates CSV and Anki-package downloads after explicit button clicks. It has no general file-system, clipboard, camera, microphone, location, or native-application access.
Creates Blob URLs and clicks temporary download anchors for the selected export. — popup.js:99-114,124-131
Declares none of the device, clipboard, downloads, or native-integration permissions. — manifest.json:10-24
Does it send information outside your browser? If so, what information is sent, where does it go, and why?
Exporting an Anki deck sends the complete flashcard array to a separate Cloud Run converter. This is feature-related and requires a click, but the popup does not tell the user that their card content will be uploaded.
The Anki button extracts the cards, then POSTs their JSON to flashcard-converter1-774031092485.us-central1.run.app. — popup.js:1-19,116-123
Labels the action only as Export Anki Deck and provides no remote-upload notice. — index.html:10-16
Does it download or run code, settings, or instructions supplied by a remote server?
No evidence of this behavior was found in the reviewed package.
Uses the converter response only as a Blob downloaded as notebooklm-flashcards.apkg. — popup.js:116-131
Contains no other fetch or remote configuration path. — popup.js:1-134
Can it take actions without a clear user request, such as opening pages, redirecting searches, downloading files, or sending requests?
No evidence of this behavior was found in the reviewed package.
Places every executeScript call inside an export-button click handler. — popup.js:1-83
Declares no background worker, content script, alarms, or startup behavior. — manifest.json:1-28
Can it change important browser settings, including your proxy, search engine, homepage, privacy settings, or other extensions?
No evidence of this behavior was found in the reviewed package.
Requests none of the browser-setting, proxy, management, or policy permissions. — manifest.json:10-24
Is any important behavior difficult to inspect because the code is hidden, heavily obfuscated, dynamically generated, or supplied by third parties?
No evidence of this behavior was found in the reviewed package.
Shows an approximately 12 KB unpacked package with one 3.8 KB script. — inventory.json:1-47
Contains the complete readable extraction and export implementation. — popup.js:1-134
Does it use eval(), new Function(), or string-based timers to turn text into executable code?
No evidence of this behavior was found in the reviewed package.
Uses ordinary functions, DOMParser, JSON.parse, Blob, and fetch without a dynamic execution sink. — popup.js:1-134
Loads only the packaged popup.js script. — index.html:1-18
Does it track the websites, pages, searches, or links you visit?
No evidence of this behavior was found in the reviewed package.
Uses active/currentWindow tab queries and passes only tab.id to executeScript. — popup.js:1-7,29-35,57-63
Declares no history, tabs, or webNavigation permission. — manifest.json:10-24
Does it create a persistent ID or browser fingerprint to recognize you?
No evidence of this behavior was found in the reviewed package.
Contains no identifier generation, analytics SDK, storage, or tracking request. — popup.js:1-134
Declares no account or background component. — manifest.json:1-28
Does it send cookies, session details, authentication data, or page contents elsewhere?
No evidence of this behavior was found in the reviewed package.
Does not request cookies or webRequest access. — manifest.json:10-24
Returns data.flashcards and serializes only that array into the converter request body. — popup.js:85-96,116-123
Does it record typing, form entries, clipboard contents, or screenshots?
No evidence of this behavior was found in the reviewed package.
Reads only app-root[data-app-data] and performs no input or event monitoring. — popup.js:85-97
Declares no clipboard, desktop capture, or input-monitoring capability. — manifest.json:10-24
Can a website or remote server send commands that make the extension take actions?
No evidence of this behavior was found in the reviewed package.
Declares no externally_connectable origins, content scripts, or background worker. — manifest.json:1-28
Treats the converter response solely as download bytes. — popup.js:116-131
Does it alter links, referral codes, advertisements, shopping carts, or search results?
No evidence of this behavior was found in the reviewed package.
Queries and parses page data without writing to the page DOM. — popup.js:85-97
Creates download anchors only inside the extension popup context. — popup.js:99-114,124-131
Does it redirect or modify web traffic, request headers, downloads, or proxy settings?
It uploads flashcards to a fixed HTTPS converter for Anki export and downloads local or remote Blob results. It does not intercept other traffic, redirect browsing, rewrite requests, or control the proxy.
Builds local CSV downloads and POSTs Anki data to a fixed converter before downloading its response. — popup.js:99-133
Declares no webRequest, declarativeNetRequest, proxy, or downloads permission. — manifest.json:10-24
Can it communicate with software on the computer or services running on localhost?
No evidence of this behavior was found in the reviewed package.
Declares no nativeMessaging permission or localhost access. — manifest.json:10-24
The only remote call uses a public HTTPS Cloud Run endpoint. — popup.js:116-133
Does it decode, decrypt, or unpack hidden data and then execute or inject it?
No evidence of this behavior was found in the reviewed package.
Wraps card fronts and backs in quotes and doubles embedded quotes, but preserves formula-leading characters. — popup.js:99-105
Downloads the resulting text as notebooklm-flashcards.csv after the user's export action. — popup.js:107-114
Establishes the complete source path from page-controlled flashcard fields into the CSV formatter. — popup.js:85-96
Can ordinary websites access privileged extension features through messaging or exposed files?
No evidence of this behavior was found in the reviewed package.
Declares no externally_connectable configuration or content-script messaging surface. — manifest.json:1-28
Uses executeScript's direct result rather than a page-controlled messaging channel. — popup.js:1-18,85-97
Does suspicious behavior activate only for certain users, websites, dates, or remote settings?
No evidence of this behavior was found in the reviewed package.
Converts the server response directly to a Blob and downloads it under an .apkg filename without status or type validation. — popup.js:116-131
Contains no path that opens, parses, imports, or executes the downloaded package. — popup.js:1-134
Does it perform hidden resource-intensive work, such as cryptocurrency mining?
No evidence of this behavior was found in the reviewed package.
Contains only click-driven extraction, formatting, upload, and download functions. — popup.js:1-134
Declares no background worker or persistent execution path. — manifest.json:1-28
Does it change form fields or where a form sends its information?
No evidence of this behavior was found in the reviewed package.
Queries only app-root and reads data-app-data. — popup.js:85-97
Contains no form, input, action, submit, or webpage DOM-write operation. — popup.js:1-134