PowerPoint to Markdown: Slides, Notes, and Images

Yes, you can convert PowerPoint to Markdown. Use the original PPTX when you need speaker notes or editable slide content. If you only have a PDF or screenshots, you need a page-extraction or OCR workflow, and it cannot recover presenter notes that are absent from that source.

The important distinction is between preserving the words and preserving how those words are used. In our recorded three-slide test, MarkItDown and Markovo kept the speaker notes but flattened the bullets. Docling kept the bullet lists but omitted the notes. Pandoc read the PPTX directly, but its output omitted both notes and list markers on this fixture.

These are configuration-specific observations, not universal limits of the projects. This revision reviews archived outputs and official documentation; it does not report a new conversion run. Markovo is the service we build.

Choose the source before choosing a converter

Available source Start here Check before accepting the result
Editable PPTX A native PPTX reader Slide order, titles, bullet hierarchy, notes, native tables
PDF with selectable text A PDF extraction path Reading order, table structure, and whether the export includes notes
Image-only PDF or slide screenshots OCR for visible words Missing text, diagrams, labels, and equations
PPTX containing screenshots alongside editable text Native extraction plus an image-aware path where needed Whether important content exists only inside a picture

An editable title does not make a pasted chart editable. Inspect the content carrying the argument, not just the first text box you can click.

Keep the original deck for visual reference. Markdown does not reproduce animation, transitions, slide geometry, or the meaning of a diagram merely because its labels appear as text.

The native PPTX results at a glance

The same deck.pptx contained three titles, six body points, a native table, and three speaker notes. The archived scores were recorded on October 16, 2026; Markovo's supplied deck response is dated October 14.

Recorded path Title recall / slide order List-item score Note recall Table row / header score Pipe table
MarkItDown 0.1.8, plugins disabled 1.0 / 1.0 0.0 1.0 1.0 / 1.0 Yes
Docling 2.133.0, default PPTX conversion 1.0 / 1.0 1.0 0.0 1.0 / 1.0 Yes
Pandoc 3.11, PPTX reader to GFM 1.0 / 1.0 0.0 0.0 1.0 / 1.0 Yes
Markovo, supplied cached output 1.0 / 1.0 0.0 1.0 1.0 / 1.0 Yes

Source: historical score file. The list metric requires list markers as well as the expected text. Note recall checks whether complete note strings occur anywhere; it does not independently verify attachment to the correct slide. Title-order scores do not establish the order of every shape within a slide.

This table supports a practical choice: start with the path that retains the information your destination needs, then check the remaining structures. None of these four outputs passed both the notes and list-item checks on this deck.

MarkItDown: speaker notes survived, bullet semantics did not

Install the PowerPoint extra in the Python environment you intend to use. For the historically tested version:

python -m pip install 'markitdown[pptx]==0.1.8'
        

The versioned MarkItDown README distinguishes format extras. The installation command is provided for setup; it was not executed for this revision.

The archived runner used:

from pathlib import Path
        from markitdown import MarkItDown
        
        result = MarkItDown(enable_plugins=False).convert_local("input.pptx")
        Path("output.md").write_text(result.markdown, encoding="utf-8")
        

An excerpt from the unedited MarkItDown deck output:

# Why We Moved to Event Queues
        Requests no longer wait on slow consumers
        Retries happen without user involvement
        Each consumer scales on its own
        
        ### Notes:
        Open with the outage from last spring as the motivating example.
        

The body points remain readable, but they are not Markdown list items. Depending on the renderer, single newlines can display as one paragraph. A parser that expects list nodes will not find three bullets here.

The installed converter source snapshot appends ordinary shape text separately from its note-handling branch. That is consistent with the observed result: retaining the talk track does not imply retaining the slide's list semantics.

For a speaker-notes archive, this can be a useful starting point. For an outline-driven documentation system, restore bullet and nesting information from the source before importing. Do not add a dash to every non-title line: a slide can contain captions, labels, quotations, and ordinary paragraphs too.

Docling: visible lists survived, notes were absent

The recorded default Docling conversion used:

from pathlib import Path
        from docling.document_converter import DocumentConverter
        
        document = DocumentConverter().convert("input.pptx").document
        Path("output.md").write_text(document.export_to_markdown(), encoding="utf-8")
        

The same body points became list items in the saved Docling output:

# Why We Moved to Event Queues
        
        - Requests no longer wait on slow consumers
        - Retries happen without user involvement
        - Each consumer scales on its own
        

The native table also survived the recorded checks, but all three expected notes were absent. A reader browsing only the Markdown would lose the explanation that accompanies the slide.

Use this result as evidence for the tested default call, not as a claim that every Docling version or workflow discards notes. If notes are required, compare the current output with the deck and supplement it from a verified source. The exact historical rerun command is available for provenance.

Pandoc: check the installed reader, not an old support claim

Pandoc added PPTX input in version 3.8.3, according to its official release notes. The archived environment had Pandoc 3.11, and its input-format list included pptx. It successfully converted the test deck directly. An older statement that Pandoc only writes PowerPoint does not describe that installation.

Check your own build:

pandoc --version
        pandoc --list-input-formats
        pandoc -f pptx -t gfm --wrap=none input.pptx -o output.md
        

The saved probe records the installed version, available readers, and successful direct conversion. The saved Markdown retains slide titles and table rows, but represents body points as paragraphs and omits notes.

If pptx is absent from your installed reader list, use a supported build or another native converter. If it is present, test the structures you care about. Choosing a different Markdown output flavor is not evidence that missing notes or list structure will reappear.

Markovo: a hosted notes-preserving route, with the same list limitation

The PowerPoint to Markdown converter provides a hosted option. The supplied capability reference identified PPTX as a signed-in beta path; check the current page and account requirements before use.

The recorded Markovo output kept the titles, notes, and native table, but left the body points as unmarked lines. It therefore shares the same practical limitation as the tested MarkItDown output for a list-aware destination.

The deck response snapshot reports three pages and an OCR-page count of zero (pages_ocr=0). Its quality_score=1 coexists with a list-item score of 0.0 in the independent scorer. A completed job and a high service quality value do not establish that every required structure survived.

These results came from previously supplied API artifacts. The response is dated October 14, 2026, and the October 16 score file reused the output. A stored elapsed time of zero is not a measured service latency. We did not submit a new API request for this revision.

For a hosted conversion, start with one representative deck, download the result, and inspect it in the destination that will consume it. Check pricing and account requirements on the current product page, rather than treating historical Credits as a current quote.

If you only have a slide PDF

A slide-face PDF commonly contains no speaker notes. Obtain the PPTX or a notes-inclusive export if the presenter commentary matters. OCR can recover visible words; it cannot recover notes that were never included.

The historical PDF baseline used PyMuPDF4LLM 1.28.2 and the following API. This is an archived-version example, not a current installation recipe. The project repository now directs users to PyMuPDF 2.x; follow its current setup and migration guidance for a new deployment.

from pathlib import Path
        import pymupdf4llm
        
        Path("output.md").write_text(
            pymupdf4llm.to_markdown("input.pdf"), encoding="utf-8"
        )
        

The associated historical PDF probes were independent synthetic documents, not exports of the three-slide PPTX. They demonstrate PDF failure modes, not how much information PowerPoint's export process loses.

In those probes, the recorded local MarkItDown and default PyMuPDF4LLM calls omitted scan sentences from image-only and mixed PDFs. The supplied Markovo PDF outputs recovered them. Current projects may offer other OCR configurations; these baseline results do not measure those configurations.

Table representation also changes by path. The saved simple-table PDF result from Markovo uses HTML, although its native PPTX result uses a pipe table. The grouped-header PyMuPDF4LLM result places the parent label and leaf labels on different rows. Both require checking the destination's table handling.

For missing image text, use an explicitly OCR-enabled path or evaluate the PDF to Markdown converter. For troubleshooting local PDF extraction, see MarkItDown's text, table, and OCR paths.

A practical acceptance checklist

Before converting an entire presentation archive:

  1. Choose a representative deck with notes, nested points, a native table, and a picture that matters to the explanation.
  2. Check that every slide appears in the right order. Review within-slide text order separately.
  3. Compare notes with their original slides, including blank notes and notes containing multiple paragraphs.
  4. Inspect list markers and nesting in the Markdown source, not just the rendered page.
  5. Verify table headers, units, row values, and totals. Check whether the destination accepts HTML tables.
  6. Retain diagrams or slide images when plain text would lose relationships.
  7. Record the converter version and configuration alongside the original and unedited output.

The three-slide fixture did not test nested lists, hyperlinks, charts, SmartArt, animations, image-only PPTX slides, or equation fidelity. Those require their own examples before you can rely on them.

Historical test details

The native-reader comparison used Python 3.11.14, MarkItDown 0.1.8, Docling 2.133.0, and Pandoc 3.11. The separate PDF probes used PyMuPDF4LLM 1.28.2. MarkItDown plugins were disabled; Docling used its recorded default conversion. Input hashes and provenance identify the synthetic corpus and distinguish supplied outputs from local runs.

The score file contains other formats and pre-supplied tool outputs. They are not evidence that those tools read the PPTX, and they are not included in the native-deck comparison above. Timing values from single local calls and cached service outputs are not comparable throughput measurements.

Choose the workflow by what must survive. Speaker notes, semantic lists, native table data, and visual explanation are separate requirements. Confirm each one before calling the conversion complete.

Sources

  1. historical score file
  2. versioned MarkItDown README
  3. unedited MarkItDown deck output
  4. installed converter source snapshot
  5. Docling
  6. saved Docling output
  7. exact historical rerun command
  8. official release notes
  9. saved probe
  10. saved Markdown
  11. recorded Markovo output
  12. deck response snapshot
  13. project repository
  14. saved simple-table PDF result from Markovo
  15. grouped-header PyMuPDF4LLM result
  16. Input hashes and provenance