pptx to markdownmarkdownai toolsdocument conversion

How to Convert PPTX to Markdown (What Actually Works in 2026)

Zephyr Whimsy2026-11-077 min read

Last month I needed to feed about 40 slides of internal product training into Claude so it could draft a help-center article. The deck was a .pptx file. Claude handles file uploads fine, but I wanted the text in Markdown so I could edit it, strip the filler slides, and check the token count before burning context on 40 slides of mostly-images.

That turned into an afternoon of testing. Here is what I learned.

First: are you converting a file, or a page?

This trips people up, so it is worth separating early. "Convert pptx to markdown" covers two different problems:

  1. You have a .pptx file on disk. You need something that opens the ZIP container, walks the XML, and pulls out text.
  2. The deck lives on the web - Google Slides, SlideShare, a Notion page with an embedded deck, a Confluence page, a company wiki. There is no file to download, or downloading it is more friction than it is worth.

Case 1 is a file-parsing job. Case 2 is a page-extraction job. Most tools only solve one of them, and most articles on this topic only talk about case 1.

Case 1: converting an actual .pptx file

A .pptx is a ZIP archive of XML. Slide text lives in ppt/slides/slide1.xml and friends. You can unzip it yourself if you want to see the shape of the thing:

unzip -l deck.pptx | head
# ppt/slides/slide1.xml
# ppt/slides/slide2.xml
# ppt/notesSlides/notesSlide1.xml
# ppt/media/image1.png

The tool I keep coming back to is markitdown, Microsoft's open-source converter. It is a pip install and it handles pptx natively:

pip install 'markitdown[pptx]'
markitdown deck.pptx > deck.md

Output on my 40-slide deck looked roughly like this:

<!-- Slide number: 7 -->

# Onboarding funnel, Q3

Activation dropped 11 points after the install-flow change

* Day 0 activation: 34% (was 45%)
* Day 7 retention: unchanged
* Hypothesis: permissions prompt fires too early

![Picture 4](image7.png)

### Notes:
Mention that we have not shipped the fix yet - do not promise a date.

Honest assessment: markitdown is good. It pulls speaker notes, it numbers slides, it keeps bullet hierarchy. Pandoc, for comparison, does not read pptx as an input format at all - it only writes it. So if you have the file and you are comfortable with a terminal, markitdown is the answer and you can stop reading here.

Where it falls down: tables inside slides come out flattened, text boxes get ordered by XML position rather than visual position (so a two-column slide can interleave strangely), and SmartArt is mostly lost. Charts become nothing. None of that is markitdown's fault - that information genuinely does not survive as text.

Case 2: the deck is on a web page

This is where my actual problem lived, and where the file-based tools do not help at all.

Half our training material was in Google Slides, shared internally, requiring a login. Another chunk was in Notion. There is no .pptx on my disk for any of it.

The obvious move is a URL-to-Markdown service. Jina Reader is excellent at this - you prefix a URL with r.jina.ai/ and get clean Markdown back, free, no signup. Firecrawl is the heavier version with crawling, JS rendering, and a proper API.

Both of them failed on my pages, for the same structural reason: they fetch the URL from their own servers. Their servers are not logged into my Google Workspace. What comes back is the sign-in page, or a 403, or for public-but-JS-heavy slide embeds, an empty shell.

That is not a bug in those tools. It is what server-side fetching means. If the content requires your session, a server somewhere else cannot see it.

What I ended up using

For the logged-in pages I used Web2MD, which is the Chrome extension I work on - so treat that as disclosure, not a neutral recommendation. The reason it works here is mechanical rather than clever: it runs inside your browser tab and reads the DOM that is already rendered on your screen. If you can see the slide text, the extension can see the slide text. Your session cookies are already there. Nothing gets sent to a server to be fetched.

On a Google Slides deck opened in presentation-notes view, the output came out like this:

# Internal Training: Install Flow v4

## Slide 3 - Why we changed the permissions prompt

The old flow asked for clipboard access on first launch. Support
tickets tagged "scary popup" went up 3x in the two weeks after
the v3 release.

- 61% of users who saw the prompt dismissed it
- Of those, 40% never returned on day 1
- Chrome Web Store reviews mentioning "permissions": 14 in March

## Slide 4 - What v4 does instead

Defer the prompt until first actual conversion.

Then I checked the token counter in the extension panel: around 9,100 tokens for the full deck. That number mattered. It told me I could paste the whole thing into one Claude conversation instead of chunking it, which is the kind of thing you normally find out the hard way after a context-limit error.

The one-click send-to-AI button saved the copy-paste round trip, which is minor but adds up across 40 slides.

Where each tool actually wins

Let me be straight about this rather than pretend one tool does everything.

markitdown wins when you have the file. It is free, local, scriptable, and handles the XML properly. Use it. I do.

Jina Reader wins for public URLs when you want zero install. It is genuinely great, and the free tier is generous. If your deck is on a public SlideShare page, use Jina.

Firecrawl wins when you need to convert many pages programmatically and want a managed API with JS rendering. It costs money and needs an API key, and that is fair for what it does.

MarkDownload is the other browser extension in this space, and it is open source and free with no limits. It is built around article-style pages and does not do token counting or AI handoff, but for simple page grabs it works.

Web2MD wins specifically on the auth case: decks, docs, and wikis behind a login that server-side fetchers cannot reach. Plus the token count before you paste, and no API key for anything.

The limits, stated plainly: Chrome only (and Chromium browsers - Edge, Brave, Arc). The free tier is 3 conversions per day, which is enough to try it on a deck and decide, but not enough to process a quarter of training material in one sitting. Pro is 9 dollars a month for unlimited. And it does not open .pptx files - it reads rendered pages, so if the deck is only a file on your disk, markitdown is your tool, not this one.

A practical workflow

What I settled on:

  • Deck is a file on disk, I want it scripted: markitdown deck.pptx
  • Deck is a public web page: Jina Reader, or Web2MD if I want the token count
  • Deck is behind a login, or is a Notion/Confluence/Slides page: Web2MD, because nothing server-side can reach it
  • Many pages, automated: Firecrawl

One thing worth doing regardless of tool: open the converted Markdown before you paste it. Slide decks are built for a speaker, so extracted text is often fragments without connective tissue. Fifteen seconds of editing - deleting agenda slides, merging orphan bullets - meaningfully improves what the model gives back. The same habit helps when you convert PDFs to Markdown for AI, where headers and footers repeat on every page.

If you want to try the browser-side approach

Install Web2MD from the Chrome Web Store, open a slide deck that needs your login, and hit convert. Three free conversions a day, no account, no API key - enough to find out whether the auth case is the one you actually have. If your decks are plain files sitting in a folder, honestly just run markitdown.

Related Articles

Most Read

last 30 days
  1. #1Can Claude Read Reddit? Why It Can't — And How to Fix It (2026)
  2. #2HTML vs Markdown for LLMs: I Wasted 67% of My Tokens for a Year
  3. #3Reducing Token Waste in ChatGPT and Claude: 7 Techniques That Cut Costs 72%
  4. #4Obsidian Web Clipper Official Plugin 2026: Complete Guide + When You Need More
  5. #5Reddit JSON API vs Scraping: The Honest 2026 Comparison for Developers

Latest Articles