Notion's official Web Clipper has a 3.4★ rating on the Chrome Web Store. The reviews tell the same story for years: "go online to save" errors while online, login loops every few hours, clips vanishing silently, and zero organization on save.
Pocket shut down. MarkDownload was removed from the Chrome Web Store. The gap was obvious, so I built ClipMark to fill it.
The Problems It Solves
I mapped the most common complaints from real Chrome Web Store reviews and built features that directly address each one:
| Complaint | How ClipMark fixes it |
|---|---|
| "Asks me to log in every time" | OAuth via Notion's official API — persistent token, no session cookie dependency |
| "Go online to save" while online | Every clip is saved locally first. If the API fails, it queues with automatic retry. Nothing is silently lost. |
| "Half the content is missing" | Content extraction with Readability.js + manual selection fallback + full page mode |
| "No tags, no organization" | AI generates 3–5 tags + a one-line summary at clip time, editable before saving |
| "Have to re-select the database every time" | Database choice is remembered across sessions |
How It Works
ClipMark is a Manifest V3 Chrome extension with three core actions:
1. Copy Markdown — Extracts the main content (no menus, footers, or cookie banners) and copies clean Markdown to clipboard. No account needed. This is the entry point for anyone who feeds web content into ChatGPT, Claude, or Obsidian.
2. Download .md — Saves a Markdown file with YAML frontmatter (title, URL, date, tags). Drop it into Obsidian or any note-taking system.
3. Save to Notion — Creates a page in your chosen database with native Notion blocks (not a bookmark, not a screenshot). Properties are mapped automatically: Title, URL, Date, Tags, Summary.
The first two work without any account or sign-up. Notion integration requires a one-time OAuth connection.
The AI Layer
When saving to Notion, ClipMark sends the extracted text to a lightweight backend (gpt-4o-mini on a VPS). The AI returns:
- 3–5 tags in the same language as the content
- A one-line summary
Both are shown in a review panel before saving — fully editable. The user stays in control.
Cost per clip: approximately $0.0005–0.002. At 20 free clips per month per user, the AI cost is negligible.
Anti-Loss Queue
This is the feature I'm most proud of. Every clip follows this flow:
- User clicks "Save to Notion"
- Clip is persisted to chrome.storage immediately — before any network call
- API call to Notion fires
- If it fails (network down, API error, rate limit): the clip stays in a local queue
- A chrome.alarm schedules a retry with exponential backoff (up to 6 attempts)
- The popup shows the queue status with per-item controls (retry, discard)
Nothing is ever silently lost. This directly addresses the #1 frustration with the official clipper.
Architecture
┌─────────────┐ ┌──────────────┐ ┌──────────────┐
│ Popup UI │────▶│ Service │────▶│ Notion API │
│ │ │ Worker │ │ (OAuth) │
└─────────────┘ │ │ └──────────────┘
│ background.js│
┌─────────────┐ │ │ ┌──────────────┐
│ Content │────▶│ • Queue mgr │────▶│ VPS Backend │
│ Script │ │ • AI client │ │ /enrich │
│ (extract) │ │ • Storage │ │ (gpt-4o-mini)│
└─────────────┘ └──────────────┘ └──────────────┘
- Extension: Manifest V3, vanilla JS, Readability.js + Turndown for HTML→Markdown
-
Backend: Express on a VPS — two routes:
/notion/token(OAuth code exchange) and/enrich(AI tags + summary + quota enforcement) - Payments: ExtensionPay (Stripe) — $4.99/month for unlimited AI, or $39/year
- Storage: chrome.storage.local for settings, queue, and plan status. Schema-versioned with migration on install/update.
What I'd Build Differently
Content extraction is harder than it looks. Readability.js handles 80% of pages well, but complex layouts (multi-column articles, heavy SPAs, paywalled content) still break. The manual selection fallback is essential — don't skip it.
The Notion API block limit matters. Notion's API accepts max 100 blocks per request. Long articles need to be batched. This is the kind of thing you only discover when testing with real content.
Onboarding is the first impression. An inline <script> tag in the onboarding page was silently blocked by Manifest V3's CSP. The buttons did nothing. Users would have seen a broken first experience. Always test every HTML page in the actual extension context, not just in a browser tab.
Pricing
| Free | Pro — $4.99/mo | |
|---|---|---|
| Clips (Markdown + Notion) | Unlimited | Unlimited |
| AI (tags + summary) | 20/month | Unlimited |
| Future features | — | Included |
The anchor: Web2MD charges $9/month. Copy to Notion is paid. ClipMark enters below both.
The math: gpt-4o-mini costs ~$0.001 per clip. 20 free clips = ~$0.02/user/month. Even at 1% conversion, the unit economics work.
Current Status and Roadmap
Live now: Published on the Chrome Web Store with 5.0★ rating. Core features complete (Markdown, Notion, AI, queue, payments).
Roadmap (v2):
- Obsidian URI export (direct save without downloading)
- YouTube transcript extraction
- ChatGPT/Claude conversation archiver
- Batch clipping (multiple tabs)
- Firefox support
Try It
If you use Notion, Obsidian, or regularly feed web content into AI tools:
🔗 ClipMark on the Chrome Web Store
Free for unlimited clips. AI is limited to 20/month on free, unlimited on Pro.
Feedback and feature requests welcome.
Top comments (0)