Notion's web clipper has been broken for 7 years. I read the alternatives' code
Notion’s official Web Clipper has 1,000,000 users and a 3.3 rating. The top complaint has not changed since 2019: it saves the link and the title, and nothing else.
I wanted to know why, and what the alternatives do about it. So I opened the extension folders on disk and read the code. Here is what I found:
- The official clipper never touches your browser session. It sends the URL to Notion’s servers, which re-fetch the page. Anything behind a login comes back empty.
- The two most popular third-party clippers request the
cookiespermission. In the one I read fully, the service worker copies yourtoken_v2session cookie into a request header and calls eleven endpoints under/api/v3/. That is Notion’s private web-app API, not the public one. - One clipper, Notix, does neither. Its extension bundle contains zero Notion-related code. It is the only one of the four with a Chrome “Featured” badge.
Names are mostly left out below. The point is the pattern, and section 6 shows how to check any extension yourself in about thirty seconds.
1. Why I looked
I sorted the official clipper’s 619 reviews by lowest rating and read them all.
Two complaints repeat across every language, every year, from 2019 to 2026:
- “It only saves the URL and title, not the content.”
- “Please go online to save to Notion” — reported by people who are, in fact, online.
One review from May 2024 (29 of 31 found it helpful): “Didn’t clip the page but just provided the URL. @Notion: Please fix!”
One from December 2023, translated from Japanese: “It’s been almost 8 months since the same person commented. Slow response. Is this a service that won’t last?”
In seven years of reviews, Notion has not replied once.
2. What the official clipper actually does
The extension does not read the page in your browser. It sends the URL to Notion, and Notion’s servers fetch it.
That single design choice explains the whole review history. Any page that requires a login, an intranet page, a paywalled article, a search result inside a database you are signed into: the server sees a blank page or a login wall, and that is what gets saved.
A 2021 review put it precisely (26 of 26 found it helpful): “Grab content locally. I don’t want whatever copy Notion sees online from its server, because you’ll rarely ever see my content (university, research paper searches, and intranets).”
A January 2025 review, four years later: “I still can’t clip pages that require login or form submission completion, even though those are the pages I want to web clip.”
This is not a bug that a patch would fix. It is where the fetch happens.
3. What the popular alternatives do instead
The two most-installed third-party clippers (roughly 400,000 and 100,000+ users) both declare "cookies" in their manifest permissions. Neither declares "identity", which is the permission you would expect to see if they used OAuth.
I read the full service worker of the larger one. This is how it authenticates:
this.token && o.setHeader("cookie", `token_v2=${this.token};`)
this.activeUserId && o.setHeader("x-notion-active-user-header", ...)
token_v2 is the cookie Notion sets when you log in. The extension reads it with chrome.cookies.get, attaches it to its own requests, and Notion treats those requests as you.
These are the endpoints it calls, in the order they appear in the bundle:
/api/v3/getActivityLog
/api/v3/getAssetsJson
/api/v3/getRecordValues
/api/v3/getSnapshotsList
/api/v3/getUserSharedPages
/api/v3/loadPageChunk
/api/v3/loadUserContent
/api/v3/queryCollection
/api/v3/submitTransaction
/api/v3/search
/api/v3/syncRecordValues
None of these are in Notion’s public API (api.notion.com/v1/...). They are the endpoints the Notion web app uses to talk to itself. They are undocumented, unversioned, and change without notice.
The bundle also hunts for the cookie across several hosts (www.notion.so, notion.so, toto.www.notion.so, app.notion.com), and in one diagnostic block it collects cookies that have nothing to do with Notion: Google’s DV, Reddit’s _rdt_uuid, Customer.io’s _cioid, Cloudflare’s _cfuvid. A February 2025 review that said “they are using notion cookies and the content of my open notion tabs” was not paranoid. It was reading the code from the outside.
This design explains the other review pattern, the one on the third-party side: “it worked yesterday and stopped today.” When Notion changes an internal endpoint or moves a domain, everything built on top of it breaks the same hour. The fix then has to go through Chrome Web Store review. In June 2026 the larger clipper was down for about a week waiting on that review. One user wrote in a review that they had used Claude Code to build their own copy in the meantime.
4. The one that is different
The third clipper I looked at, Notix (4.6 rating, Chrome Featured badge), has no cookies permission. No affiliation; I have never spoken to them.
I grepped its entire bundle for api.notion.com, token_v2, and api/v3. Zero matches. The only URLs in the code point to the vendor’s own domain. The side panel loads a page from their web app, and as far as I can tell from the outside, authentication and every call to Notion happen on their server.
That has a cost: your Notion access token lives on a third party’s server, not in your browser. It also has a consequence: when Notion changes something, they patch their server and nothing goes through Chrome review. I cannot prove that is why they hold the Featured badge, but it is consistent with it.
5. Why this keeps happening
Four architectures, one problem:
| Auth | When Notion changes internals | Chrome review in the loop | |
|---|---|---|---|
| A. Official: server re-fetch | Notion’s own | Unaffected | Rarely |
| B. Cookie replay + private API | Your session cookie | Breaks | Every fix |
| C. Vendor server + thin extension | OAuth, token on vendor server | Unaffected | Never |
| D. Local OAuth, no server | Your own integration token | Unaffected | Every fix |
D is the one privacy-minded people would pick. Your token stays on your machine, there is no third-party server, and Notion’s public API is versioned.
I found six D-style clippers in the Chrome Web Store. Taglines like “the clipper that actually works,” “local-first,” “no server, 100% privacy.” Every one of them sits at 0.0 or a 5.0 from one or two reviews. Median Chrome extension has 18 users; these are in that median.
C won. Not on privacy, not on architecture purity. On not being blocked by Chrome review when Notion moves.
6. Check any extension in 30 seconds
Chrome unpacks every extension to disk. You do not need to trust anyone’s description.
Linux / macOS:
cd ~/.config/google-chrome/Default/Extensions/<extension-id>/<version>/
grep -o '"cookies"' manifest.json
grep -rhoE ".{0,40}token_v2.{0,40}" . | head
Windows (WSL or Git Bash):
cd "/mnt/c/Users/<you>/AppData/Local/Google/Chrome/User Data/Default/Extensions/<extension-id>/<version>/"
The extension id is the 32-letter string in its store URL.
If the first grep prints "cookies" and the second prints anything with token_v2, that extension logs into Notion as you.
I am collecting these reads, for Notion and for other tools people keep complaining about, in a short newsletter called Reproduced. No product, just what the code says. Link in the footer.
7. Why I am not building the fix
Obviously I was going to build a type C clipper. OAuth, public API, image upload through Notion’s file API, content pulled from the page in your browser so logins work. A week of work.
Then I found the six type D clippers. Six people had read the same reviews, reached the same conclusion, shipped it, and nobody found them. The difference between the clippers that live and the ones that die is not in the code. It is a Featured badge and a review count.
So I wrote this instead.