
Markitdown
Turn PDFs, Word files, and slide decks into clean markdown so your coding agent can search, summarize, and reuse document content without manual copy-paste.
Overview
MarkItDown is an agent skill most often used in Build (also Idea, Grow) that converts PDF, DOCX, PPTX, and similar files into markdown for agent-readable corpora.
Install
npx skills add https://github.com/davila7/claude-code-templates --skill markitdownWhat is this skill?
- Converts PDF, DOCX, and PPTX to markdown via the MarkItDown Python API
- Supports file paths, binary streams, and batch conversion over directories
- Includes scientific workflow patterns for research-paper folders
- Writes structured .md outputs for agent context and downstream editing
- Works as a library integration rather than a hosted conversion service
Adoption & trust: 1.4k installs on skills.sh; 27.8k GitHub stars; 1/3 security scanners passed (skills.sh audits).
What problem does it solve?
Your research, specs, and slide content are locked in binary office formats your agent cannot grep, diff, or chunk for RAG without a conversion step.
Who is it for?
Indie builders curating paper PDFs, client DOCX briefs, or pitch PPTX into a single markdown knowledge base before agent-assisted implementation.
Skip if: Teams that only need one-off paste from a short PDF page, or workflows where a managed document MCP with auth and retention policies is already mandatory.
When should I use this skill?
You need PDF, DOCX, PPTX, or similar files converted to markdown for agent context, RAG, or documentation pipelines.
What do I get? / Deliverables
After running the skill’s MarkItDown workflows, you get plain markdown files or in-memory text you can index, summarize, or drop into repo docs for the next build or content task.
- Markdown text content or .md files from source documents
- Batch-converted document sets for corpora
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Document ingestion sits on the build/docs shelf because solo builders most often install MarkItDown while wiring knowledge bases, specs, and reference material into agent workflows. The docs subphase is the canonical home for format conversion that feeds READMEs, RAG corpora, and implementation notes from office and scientific file types.
Where it fits
Batch-convert a folder of PDF preprints into markdown before competitor and literature synthesis.
Turn a client requirements DOCX into repo-local markdown the agent can diff against your implementation plan.
Export an onboarding PPTX to markdown to draft blog posts and in-app help from the same source deck.
How it compares
Use as a Python document-ingestion helper instead of asking the agent to read huge binary files token-by-token in chat.
Common Questions / FAQ
Who is markitdown for?
Solo builders and small teams who ship with coding agents and need office documents and research PDFs converted into markdown for search, summarization, and repo documentation.
When should I use markitdown?
Use it during Idea research when batch-converting papers, during Build docs when migrating specs from Word, and during Grow content when repurposing slide decks into articles or help docs.
Is markitdown safe to install?
Review the Security Audits panel on this Prism page and treat any skill that runs local Python on your filesystem as trusted-only code before processing confidential client documents.
SKILL.md
READMESKILL.md - Markitdown
# MarkItDown Example Usage This document provides practical examples of using MarkItDown in various scenarios. ## Basic Examples ### 1. Simple File Conversion ```python from markitdown import MarkItDown md = MarkItDown() # Convert a PDF result = md.convert("research_paper.pdf") print(result.text_content) # Convert a Word document result = md.convert("manuscript.docx") print(result.text_content) # Convert a PowerPoint result = md.convert("presentation.pptx") print(result.text_content) ``` ### 2. Save to File ```python from markitdown import MarkItDown md = MarkItDown() result = md.convert("document.pdf") with open("output.md", "w", encoding="utf-8") as f: f.write(result.text_content) ``` ### 3. Convert from Stream ```python from markitdown import MarkItDown md = MarkItDown() with open("document.pdf", "rb") as f: result = md.convert_stream(f, file_extension=".pdf") print(result.text_content) ``` ## Scientific Workflows ### Convert Research Papers ```python from markitdown import MarkItDown from pathlib import Path md = MarkItDown() # Convert all papers in a directory papers_dir = Path("research_papers/") output_dir = Path("markdown_papers/") output_dir.mkdir(exist_ok=True) for paper in papers_dir.glob("*.pdf"): result = md.convert(str(paper)) # Save with original filename output_file = output_dir / f"{paper.stem}.md" output_file.write_text(result.text_content) print(f"Converted: {paper.name}") ``` ### Extract Tables from Excel ```python from markitdown import MarkItDown md = MarkItDown() # Convert Excel to Markdown tables result = md.convert("experimental_data.xlsx") # The result contains Markdown-formatted tables print(result.text_content) # Save for further processing with open("data_tables.md", "w") as f: f.write(result.text_content) ``` ### Process Presentation Slides ```python from markitdown import MarkItDown from openai import OpenAI # With AI descriptions for images client = OpenAI() md = MarkItDown( llm_client=client, llm_model="anthropic/claude-sonnet-4.5", llm_prompt="Describe this scientific slide, focusing on data and key findings" ) result = md.convert("conference_talk.pptx") # Save with metadata output = f"""# Conference Talk {result.text_content} """ with open("talk_notes.md", "w") as f: f.write(output) ``` ## AI-Enhanced Conversions ### Detailed Image Descriptions ```python from markitdown import MarkItDown from openai import OpenAI # Initialize OpenRouter client client = OpenAI( api_key="your-openrouter-api-key", base_url="https://openrouter.ai/api/v1" ) # Scientific diagram analysis scientific_prompt = """ Analyze this scientific figure. Describe: - Type of visualization (graph, microscopy, diagram, etc.) - Key data points and trends - Axes, labels, and legends - Scientific significance Be technical and precise. """ md = MarkItDown( llm_client=client, llm_model="anthropic/claude-sonnet-4.5", # recommended for scientific vision llm_prompt=scientific_prompt ) # Convert paper with figures result = md.convert("paper_with_figures.pdf") print(result.text_content) ``` ### Different Prompts for Different Files ```python from markitdown import MarkItDown from openai import OpenAI # Initialize OpenRouter client client = OpenAI( api_key="your-openrouter-api-key", base_url="https://openrouter.ai/api/v1" ) # Scientific papers - use Claude for technical analysis scientific_md = MarkItDown( llm_client=client, llm_model="anthropic/claude-sonnet-4.5", llm_prompt="Describe scientific figures with technical precision" ) # Presentations - use GPT-4o for visual understanding presentation_md = MarkItDown( llm_client=client, llm_model="anthropic/claude-sonnet-4.5", llm_prompt="Summarize slide content and key visual elements" ) # Use appropriate instance for each file paper_result = scientific_md.convert("research.pdf") slides_result = presentation_md.convert("talk.pptx") `