Select the text in your Google Doc, copy it, and paste it in the box below. You get Markdown with the headings, bold, italic, strikethrough, links, nested lists and tables of the document, ready for a README, a static site, Obsidian or a CMS. Everything runs in your browser.
Paste from Google Docs (Ctrl+V / ⌘V) or type HTML · · clear
Tip: copying from the document itself (not from File → Download) keeps the formatting.
Markdown
# ATX (default) or underlined setext style for h1 and h2.**bold**, *italic*, ~~strike~~, `code`.- item, 1. item). Ordered lists keep their start number.<br>. Merged cells (colspan/rowspan) are split into plain cells, with the text in the first one, so every value stays under its own column. Tables that only lay out a page (one column, or tables inside tables) become plain lines.language-* or highlight-source-* class is kept, so syntax highlighting still works on GitHub.- [x] done).Scripts, styles, forms, buttons and embedded frames are dropped. Pasted HTML is parsed with the browser's DOMParser, which never runs scripts or loads images, and it never leaves your device.
When you copy formatted text, the clipboard holds an HTML version of it, and the box above reads that version instead of the plain text. Google Docs marks bold, italic, strikethrough and monospace text with inline styles rather than tags, wraps the whole selection in a bold tag that isn't bold, and writes sub-lists next to their parent item instead of inside it. The converter repairs all three before converting, so a Doc comes out with real **bold**, nested lists and a table header. Word's <o:p> tags and list items wrapped in paragraphs are cleaned up too.
To turn a whole page into Markdown without copying it, use website to Markdown: it loads the page in real Chromium (so JavaScript sites work), keeps only the main article and gives you clean Markdown. From code, the /v1/content API does the same for a URL or for HTML you send, at 1 credit per page:
curl -X POST "https://shotmint.creasework.com/v1/content" -H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" \
-d '{"html": "<h1>Hello</h1><p>From <b>HTML</b></p>", "main_content": false}'
The JSON answer has the Markdown in content, plus title, words and other metadata. Add "links": false to keep link text without URLs or images, which cuts the token count for LLM prompts (see web page to Markdown for LLMs). Keys get 25 free credits a month; €5 buys 2,000 more, with no subscription.
Get 25 free credits a month Read the API docs
Why does my table have a header I didn't have? GitHub-flavored Markdown tables must start with a header row. When the HTML has none, the first row is used, which is usually what a header would have said anyway.
Why are some characters escaped with a backslash? Text such as 1. at the start of a line, * or _ would turn into formatting in Markdown, so it is escaped to show up exactly as in the HTML.
What happens to colors, fonts and sizes? Markdown has no syntax for them, so they are dropped. Underline is dropped too, except on links.
Can I go the other way? To turn Markdown into a document, use Markdown to PDF.
Related: html to markdown converter, PDF to Markdown, website to Markdown, URL to Markdown, extract text from a website, HTML to PDF, Word to PDF.
Markdown table generator · Markdown to PDF · CSV to Markdown table · HTML to Markdown · Markdown to Word · Markdown to HTML · Website to Markdown · PDF to Markdown · DOCX to Markdown · Excel to Markdown Table · Markdown Table to CSV Converter · Markdown to DOCX · Markdown Viewer · Online Markdown Editor with Live Preview · URL to Markdown · Word to Markdown Converter · all free tools