# BulkMD > Convert any web page to clean Markdown in one click. Free Chrome extension — 60–80% fewer tokens, no server, no account. BulkMD is a free Chrome extension that converts web pages into clean Markdown for use as LLM context, note-taking, and local parsing. Conversion runs entirely in the browser — no servers, no accounts, no telemetry. Built by M. H. Tawfik at Soft Web Grove. ## Key facts - Free Chrome extension, Manifest V3 - Single-page copy and bulk URL processing (up to 10 pages in parallel, ~500 per batch) - Detect links on a page or a section you pick, review them, then bulk-convert the set - ZIP + AI-agent bundle export - Output formats: Markdown, plain text, minified Markdown, JSON; live token + cost counter - 60–80% fewer LLM tokens vs. raw HTML on a typical page (up to ~93% on boilerplate-heavy pages) - Author: M. H. Tawfik (https://mhtawfik.com) - Studio: Soft Web Grove (https://softwebgrove.com) - Source-of-truth domain: https://bulkmd.app ## Primary pages - [Home](https://bulkmd.app/): product overview, install, demo - [About](https://bulkmd.app/about): team, principles, contact - [Support](https://bulkmd.app/support): help, troubleshooting, contact - [Privacy](https://bulkmd.app/privacy): data handling (local-first) - [Blog](https://bulkmd.app/blog): field notes on Markdown + LLM workflows ## Blog posts - [Extract Links From a Web Page, Then Bulk-Convert Them](https://bulkmd.app/blog/extract-links-from-a-web-page) — How to extract every link on a web page — or just one section — auto-detect, review, remove the noise, and bulk-convert them to clean Markdown for LLM context. (published 2026-06-12, updated 2026-06-12) - [MarkDownload Alternative: A Migration Guide](https://bulkmd.app/blog/markdownload-alternative) — MarkDownload was pulled from the Chrome Web Store. Here's how to pick a MarkDownload alternative and migrate your web-to-Markdown workflow cleanly. (published 2026-06-12, updated 2026-06-12) - [Right-Click Copy as Markdown in Manifest V3](https://bulkmd.app/blog/chrome-context-menus-clipboard-mv3) — Build a right-click Copy as Markdown context menu in Manifest V3 — register it in onInstalled, branch on page versus selection, and copy from a service worker. (published 2026-06-02, updated 2026-06-02) - [Context Window Budgeting for RAG in 2026](https://bulkmd.app/blog/context-window-budgeting-rag-2026) — A practical guide to context window budgeting for RAG: chunk sizing, relevance versus recall, the cost of stuffing pages, and a token-budget worksheet. (published 2026-06-02, updated 2026-06-02) - [Estimating LLM Token Count and Cost Client-Side](https://bulkmd.app/blog/estimating-llm-token-cost-in-the-browser) — How to estimate LLM token count and cost in the browser without bundling a tokenizer — the chars-per-token heuristic, accuracy bounds, and a JS implementation. (published 2026-06-02, updated 2026-06-02) - [Generative Engine Optimization for Developer Docs](https://bulkmd.app/blog/geo-for-developer-docs) — Make developer documentation citable by AI Overviews, ChatGPT, and Perplexity with answer-first sections, semantic HTML, and fact density. (published 2026-06-02, updated 2026-06-02) - [Importing Markdown into Notion Without Losing Formatting](https://bulkmd.app/blog/importing-markdown-into-notion) — A practical guide to importing Markdown into Notion: what paste converts to blocks, what the file importer keeps, and how to avoid the lossy parts. (published 2026-06-02, updated 2026-06-02) - [Markdown vs JSON vs Text for LLM Context](https://bulkmd.app/blog/markdown-vs-json-vs-text-llm-context) — When to feed an LLM Markdown vs JSON vs plain text: token density, reasoning reliability, and the rule for picking a format per content type. (published 2026-06-02, updated 2026-06-02) - [Obsidian Frontmatter for Web Clipping, Done Right](https://bulkmd.app/blog/obsidian-frontmatter-web-clipping) — Clip web pages into Obsidian with clean YAML frontmatter and Properties: which fields to keep, the obsidian://new URI scheme, and Dataview-friendly metadata. (published 2026-06-02, updated 2026-06-02) - [Packaging a Web Corpus for AI Agents to Ingest](https://bulkmd.app/blog/packaging-a-web-corpus-for-ai-agents) — Turn clipped pages into an agent-ready web corpus — a folder of Markdown plus an index and a manifest.json with file, title, URL, and token counts. (published 2026-06-02, updated 2026-06-02) - [Send a Web Page to ChatGPT, Claude, Perplexity](https://bulkmd.app/blog/send-web-pages-to-chatgpt-claude-perplexity) — How to send a web page to ChatGPT, Claude, and Perplexity as clean Markdown context instead of a raw URL — paste vs link, per-tool quirks, and a one-click flow. (published 2026-06-02, updated 2026-06-02) - [YouTube Transcripts to LLM Context: A Clean Markdown Flow](https://bulkmd.app/blog/youtube-transcripts-to-llm-context) — Turn YouTube transcripts into clean, low-token Markdown LLM context: strip timestamps and filler, then feed Claude or ChatGPT a citable source. (published 2026-06-02, updated 2026-06-02) - [Building a Personal RAG with BulkMD Markdown Output](https://bulkmd.app/blog/building-a-personal-rag-pipeline) — A reproducible 200-line personal RAG pipeline — capture with BulkMD, chunk on Markdown headings, embed with OpenAI, retrieve with LanceDB, answer with Claude. (published 2026-05-26, updated 2026-05-26) - [Building an Obsidian Knowledge Base from Web Pages](https://bulkmd.app/blog/building-obsidian-knowledge-base-from-web) — A reproducible workflow for turning your read-it-later list into a structured Obsidian vault — frontmatter, folder shape, and linking patterns. (published 2026-05-26, updated 2026-05-26) - [chrome.storage Patterns for Manifest V3 Extensions](https://bulkmd.app/blog/chrome-storage-patterns-manifest-v3) — When to use chrome.storage.session, .local, .sync, or IndexedDB in a Manifest V3 extension — quotas, throughput, and a practical layout for queue-heavy work. (published 2026-05-26, updated 2026-05-26) - [Building a Claude Code Knowledge Base from Web Docs](https://bulkmd.app/blog/claude-code-cursor-knowledge-base) — A reproducible workflow for turning any documentation site into a local Markdown knowledge base that Claude Code, Cursor, and other coding agents can index. (published 2026-05-26, updated 2026-05-26) - [Claude Model Routing: Haiku vs Sonnet vs Opus for RAG](https://bulkmd.app/blog/claude-model-routing-rag) — When to call Haiku, Sonnet, or Opus in a RAG pipeline — a measured comparison of cost, latency, and answer quality across the Claude 4.x lineup in 2026. (published 2026-05-26, updated 2026-05-26) - [How Google AI Overviews Pick Citations in 2026](https://bulkmd.app/blog/how-google-ai-overviews-pick-citations) — What gets surfaced in AI Overviews — the signals Google uses to choose citations, why semantic HTML beats keywords, and what to fix this week. (published 2026-05-26, updated 2026-06-02) - [How to Write an llms.txt File for AI Search in 2026](https://bulkmd.app/blog/how-to-write-llms-txt) — A practical guide to authoring llms.txt — the emerging standard that tells ChatGPT, Claude, Perplexity, and Google AI Overviews what your site is about. (published 2026-05-26, updated 2026-05-26) - [Manifest V3 Service Workers for Bulk URL Processing](https://bulkmd.app/blog/manifest-v3-service-worker-bulk-processing) — Engineering patterns for a Chrome extension that survives service-worker restarts mid-job — queue persistence, tab pools, alarms, and what holds up at scale. (published 2026-05-26, updated 2026-05-26) - [How AI Agents Read Markdown Context in 2026](https://bulkmd.app/blog/markdown-context-for-ai-agents) — How Claude, ChatGPT, Cursor, and Perplexity actually parse Markdown — what they cite, what they drop, and how to structure pages for higher answer quality. (published 2026-05-26, updated 2026-05-26) - [OpenAI vs Voyage vs Cohere Embeddings: 2026 RAG Benchmark](https://bulkmd.app/blog/openai-voyage-cohere-embeddings-benchmark) — Three embedding-model families compared on a Markdown-corpus RAG task — retrieval quality, cost per million tokens, dimensions, and which fits which workload. (published 2026-05-26, updated 2026-05-26) - [Anthropic Prompt Caching + Markdown: 90% Cost Reduction](https://bulkmd.app/blog/prompt-caching-markdown-context) — How pairing Anthropic prompt caching with clean Markdown context drops repeat-query costs to ~10% of baseline — with reproducible numbers from a real workflow. (published 2026-05-26, updated 2026-05-26) - [Readability vs Trafilatura vs jsdom: 2026 Benchmark](https://bulkmd.app/blog/readability-vs-trafilatura-extractors) — A measured comparison of three HTML content extractors across 50 real pages — extraction fidelity, runtime, edge cases, and which fits a browser extension. (published 2026-05-26, updated 2026-05-26) - [Server Scrapers vs Browser Extensions: 2026 Tradeoffs](https://bulkmd.app/blog/server-scrapers-vs-browser-extensions) — When server-side scraping APIs win, when a browser extension wins, and the four metrics — latency, auth coverage, cost, rate-limit risk — that decide it. (published 2026-05-26, updated 2026-05-26) - [Handling SPA Pages in a Manifest V3 Content Script](https://bulkmd.app/blog/spa-content-script-manifest-v3) — Why naive document_idle injection fails on Next.js, React, and Vue apps — and the MutationObserver-and-quiescence pattern that reliably waits for hydration. (published 2026-05-26, updated 2026-05-26) - [Token Math by Content Type: Code, Tables, Lists in 2026](https://bulkmd.app/blog/token-math-content-types-2026) — How prose, code, tables, lists, and JSON tokenize differently in 2026 — the per-byte token cost of each content type, and where Markdown compresses best. (published 2026-05-26, updated 2026-06-02) - [Turndown vs Pandoc vs marked: Serializer Benchmark](https://bulkmd.app/blog/turndown-vs-pandoc-vs-marked-serializers) — Three HTML-to-Markdown serializers compared on the same 50 pages — output fidelity, GFM coverage, runtime, and which one fits a browser-side pipeline. (published 2026-05-26, updated 2026-05-26) - [Vite + Manifest V3: Bundling a Chrome Extension Right](https://bulkmd.app/blog/vite-manifest-v3-chrome-extension-bundling) — How to bundle a Manifest V3 extension with Vite without tripping the no-remote-code policy — single-file service workers, asset paths, and IIFE outputs. (published 2026-05-26, updated 2026-05-26) - [How to Convert Any Web Page to Markdown for ChatGPT & Claude (2026 Guide)](https://bulkmd.app/blog/web-page-to-markdown-for-llms) — A practical guide to turning live web pages into clean Markdown for LLMs — why it cuts tokens 60–80%, how Readability strips boilerplate, and the fastest browser-side workflow. (published 2026-05-04, updated 2026-05-18) - [Bulk Export Web Pages to Markdown: a Repeatable Chrome Workflow](https://bulkmd.app/blog/bulk-export-web-pages-to-markdown) — How to convert dozens of URLs to clean Markdown at once using a local Chrome extension — concurrency, retries, queue persistence, and the patterns that make it survive a service-worker restart. (published 2026-04-22, updated 2026-06-12) - [Cut LLM Token Costs by 60–80% with Clean Markdown Context](https://bulkmd.app/blog/reduce-llm-token-costs-with-markdown) — A measured breakdown of how converting source pages to Markdown reduces prompt tokens, the math behind the savings, and where the gains plateau — with real numbers from twenty benchmark pages. (published 2026-04-08, updated 2026-05-18) ## License Content on https://bulkmd.app may be cited with attribution. Please link back to the canonical URL of the page being cited.