Source profileQuality 78/100Review permissions

github/awesome-copilot/skills/convert-pdf-to-md/SKILL.md

convert-pdf-to-md

Converts PDF (.pdf) documents into Markdown so their contents can be accurately analyzed, summarized, searched, or extracted from. Use this skill whenever the user shares, references, or asks about a .pdf file — even if they don't say "convert" or "markdown" explicitly. This includes requests to "read", "summarize", "review", "extract data from", "compare", or "analyze" a PDF report, paper, invoice, form, contract, or scanned document. Always run the bundled conversion script to produce Markdown

Source repository stars
37,126
Declared platforms
0
Static risk flags
2
Last source update
2026-07-28
Source checked
2026-07-28

Decision brief

What it does—and where it fits

Converts PDF (. pdf) documents into Markdown so their contents can be accurately analyzed, summarized, searched, or extracted from.

Best for

  • convert-word-to-md for any .docx files
  • convert-excel-to-md for any .xlsx files

Not for

  • Tasks that require unconfirmed production actions or broad system permissions.
  • Environments where the pinned source and install steps cannot be inspected.

Compatibility matrix

Platform support, with evidence labels

PlatformStatusEvidenceWhat to check
CodexNot declaredNo explicit evidencePortability before use
Claude CodeNot declaredNo explicit evidencePortability before use
CursorNot declaredNo explicit evidencePortability before use
Gemini CLINot declaredNo explicit evidencePortability before use
Open the compatibility checker

Installation

Inspect first. Install second.

The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

Source-detected install commandSource
npx skills add https://github.com/github/awesome-copilot --skill "skills/convert-pdf-to-md"
Safe inspection promptEditorial

Inspect the Agent Skill "convert-pdf-to-md" from https://github.com/github/awesome-copilot/blob/9933dcad5be5caeb288cebcd370eeeb2fc2f1685/skills/convert-pdf-to-md/SKILL.md at commit 9933dcad5be5caeb288cebcd370eeeb2fc2f1685. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

Workflow

What the source asks the agent to do

  1. 01

    Setup (once per environment)

    Before the first conversion in a given environment, follow references/setup.md step by step to ensure Python, pip, markitdown, and pymupdf (for image extraction) are installed. Do this proactively rather than guessing whether the environment is ready — the script itself will als…

    Before the first conversion in a given environment, follow references/setup.md step by step to ensure Python, pip, markitdown, and pymupdf (for image extraction) are installed. Do this proactively rather than guessing w…
  2. 02

    Usage

    The conversion script lives at scripts/convertpdftomd.py.

    The conversion script lives at scripts/convertpdftomd.py.Output structure: MarkItDown's PDF converter extracts text and tables only — it has no concept of embedded images at all. This script separately extracts real embedded images via PyMuPDF and writes a self-contained fold…Because MarkItDown's PDF text does not preserve reliable per-page markers, there's no safe way to know exactly where inline an image belongs. Rather than risk misplacing images next to the wrong paragraph, the script ap…
  3. 03

    When to use this skill

    Trigger this skill any time there is a .pdf file that needs to be understood or processed — for example, a user attaches a PDF and asks questions about it, wants a summary, wants specific data or tables pulled out, or wants multiple PDFs in a folder processed together. PDF is a…

    convert-word-to-md for any .docx filesconvert-excel-to-md for any .xlsx filesTrigger this skill any time there is a .pdf file that needs to be understood or processed — for example, a user attaches a PDF and asks questions about it, wants a summary, wants specific data or tables pulled out, or w…
  4. 04

    Deciding where output goes

    Default — always output next to the source file. The / folder is created in the same directory as the source .pdf. This is the required default for every case. Do NOT override it unless the user explicitly asks for a different location.

    Default — always output next to the source file. The / folder is created in the same directory as the source .pdf. This is the required default for every case. Do NOT override it unless the user explicitly asks for a di…Only use -o when the user explicitly provides an output path (e.g., "save the output to C:\output", "put the results in D:\work"). Do NOT pass -o based on the agent's current working directory, the session state folder,…If the source file path cannot be fully resolved — for example, the user provides only a filename with no directory, or the path is ambiguous — use askuser to confirm the full absolute path before running the conversion…
  5. 05

    Troubleshooting

    Review the “Troubleshooting” section in the pinned source before continuing.

    Review and apply the “Troubleshooting” source section.

Permission review

Static risk signals and limitations

Reads files

low · line 11

The documentation asks the agent to read local files, directories, or repositories.

open or parse the file directly.

Runs scripts

medium · line 66

The documentation asks the agent to run terminal commands or scripts.

python scripts\convert_pdf_to_md.py "C:\path\to\document.pdf"

Runs scripts

medium · line 74

The documentation asks the agent to run terminal commands or scripts.

python scripts\convert_pdf_to_md.py "C:\path\to\document.pdf" -o "C:\path\to\output_folder"

Reads files

low · line 94

The documentation asks the agent to read local files, directories, or repositories.

After conversion, read the resulting `.md` file(s) to perform the actual

Evidence record

Why each signal appears

EvidenceSourceComputedTestedEditorial
SignalValueEvidence typeMeaning
Quality score78/100ComputedDocumentation, specificity, maintenance, and trust rules
Repository stars37,126SourceRepository attention, not individual Skill quality
Compatibility0 platformsSourceDeclared in the catalog source record
Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

Pinned source

Provenance and original SKILL.md

Repository
github/awesome-copilot
Skill path
skills/convert-pdf-to-md/SKILL.md
Commit
9933dcad5be5caeb288cebcd370eeeb2fc2f1685
License
MIT
Collected
2026-07-28
Default branch
main
View the original SKILL.md

Convert PDF to Markdown

When to use this skill

Trigger this skill any time there is a .pdf file that needs to be understood or processed — for example, a user attaches a PDF and asks questions about it, wants a summary, wants specific data or tables pulled out, or wants multiple PDFs in a folder processed together. PDF is a layout/print format, not reliably readable as plain text, so always convert it to Markdown first using the script in this skill rather than trying to open or parse the file directly.

This skill only supports .pdf — that's MarkItDown's only PDF-family format, so there's no legacy format to worry about here (unlike Word's .doc or Excel's .xls).

Mixed file types: When the user references a folder or set of documents containing multiple supported file types (.pdf, .docx, .xlsx), this skill handles only .pdf files. The agent MUST also invoke the sibling skills in parallel:

  • convert-word-to-md for any .docx files
  • convert-excel-to-md for any .xlsx files

Never process a folder and silently skip a supported file type. All three skills must be invoked together when mixed types are present.

Setup (once per environment)

Before the first conversion in a given environment, follow references/setup.md step by step to ensure Python, pip, markitdown, and pymupdf (for image extraction) are installed. Do this proactively rather than guessing whether the environment is ready — the script itself will also fail with a clear pointer back to that file if a dependency turns out to be missing, so it's safe to just try the conversion first if you're reasonably confident setup was already done.

Usage

The conversion script lives at scripts/convert_pdf_to_md.py.

Output structure: MarkItDown's PDF converter extracts text and tables only — it has no concept of embedded images at all. This script separately extracts real embedded images via PyMuPDF and writes a self-contained folder per document:

<name>/
    img/
        page001_img001.<ext>
        page002_img001.<ext>
        ...
    <name>.md

Because MarkItDown's PDF text does not preserve reliable per-page markers, there's no safe way to know exactly where inline an image belongs. Rather than risk misplacing images next to the wrong paragraph, the script appends a ## Extracted Images section at the end of the Markdown, with a ### Page N subheading per page that has images — read this section separately from the main body text. If the document has no embedded images, no img/ folder or Extracted Images section is created.

Single file:

python scripts\convert_pdf_to_md.py "C:\path\to\document.pdf"

This creates a document\ folder next to the source file (containing document.md and, if present, document\img\). To control the destination folder explicitly:

python scripts\convert_pdf_to_md.py "C:\path\to\document.pdf" -o "C:\path\to\output_folder"

A folder of PDFs (batch mode):

python scripts\convert_pdf_to_md.py "C:\path\to\folder"

Add --recursive to also include subfolders:

python scripts\convert_pdf_to_md.py "C:\path\to\folder" --recursive

Each .pdf found gets its own <name>\ output folder next to it by default. Pass -o "C:\path\to\output_parent" to collect all the generated <name>\ folders under a separate parent directory instead (subfolder structure is preserved when combined with --recursive).

After conversion, read the resulting .md file(s) to perform the actual analysis the user asked for — the script's job is only to produce accurate Markdown (and images), not to interpret the content.

Deciding where output goes

Default — always output next to the source file. The <name>/ folder is created in the same directory as the source .pdf. This is the required default for every case. Do NOT override it unless the user explicitly asks for a different location.

Only use -o when the user explicitly provides an output path (e.g., "save the output to C:\output", "put the results in D:\work"). Do NOT pass -o based on the agent's current working directory, the session state folder, or any implied location.

If the source file path cannot be fully resolved — for example, the user provides only a filename with no directory, or the path is ambiguous — use ask_user to confirm the full absolute path before running the conversion. Never guess or assume the directory.

Troubleshooting

SymptomLikely causeFix
ModuleNotFoundError: No module named 'markitdown' or 'fitz' / exit code 2MarkItDown or PyMuPDF not installedFollow references/setup.md
ERROR: Unsupported file type '...' / exit code 3Not a .pdf fileAsk the user for the correct file, or if it's .doc/.docx/.xlsx, use the matching sibling skill instead
ERROR: Input path not found / exit code 3Wrong path, or file movedConfirm the correct path with the user
FAILED <file> -> ... in batch outputThat specific file is corrupt, password-protected, or otherwise unreadableReport which file(s) failed; other files in the batch still succeed
NOTE: skipped N non-.pdf file(s)Folder contains non-PDF filesExpected — those files are intentionally ignored
Markdown body is empty or near-empty despite images being extractedThe PDF is scanned/image-only with no embedded text layer; MarkItDown does not perform OCRTell the user OCR isn't supported — the extracted page images are still available for them to view
Images appear in an appendix instead of inline with the textDeliberate limitation — MarkItDown's PDF text has no reliable per-page markers to place images inlineExpected behavior; cross-reference the ### Page N heading with the surrounding text context if needed

Alternatives

Compare before choosing

Computed 10042,015

coreyhaines31/marketingskills

ab-testing

When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program

Computed 10042,015

coreyhaines31/marketingskills

churn-prevention

When the user wants to reduce churn, build cancellation flows, set up save offers, recover failed payments, or implement retention strategies. Also use when the user mentions 'churn,' 'cancel flow,' 'offboarding,' 'save offer,' 'dunning,' 'failed payment recovery,' 'win-back,' 'retention,' 'exit survey,' 'pause subscription,' 'involuntary churn,' 'people keep canceling,' 'churn rate is too high,' 'how do I keep users,' or 'customers are leaving.' Use this whenever someone is losing subscribers o

Computed 997

event4u-app/agent-config

design-review

Use when the user says "review the design", "check the UI", or wants a comprehensive UI/UX review. Uses a 7-phase methodology covering interaction, responsiveness, accessibility, and more.

Computed 9831,966

K-Dense-AI/scientific-agent-skills

dask

Distributed computing for larger-than-RAM pandas/NumPy workflows. Use when you need to scale existing pandas/NumPy code beyond memory or across clusters. Best for parallel file processing, distributed ML, integration with existing pandas code. For out-of-core analytics on single machine use vaex; for in-memory speed use polars.