compare

MarkItDown vs. Nutrient

MarkItDown is Microsoft’s open source Python tool for converting files to Markdown. Nutrient keeps more of the structure: headings and tables in PDFs, and separate tables, titles, and empty cells in Excel workbooks.


Nutrient vs. MarkItDown at a glance

Nutrient
MarkItDown
What it is
A PDF-to-Markdown CLI for local use, and the Data Extraction API for PDFs, scans, Office files, and spreadsheets.
An open source Python library and command-line tool (MIT license).
Where it runs
Locally with the CLI, as a hosted API, or self-hosted with the SDKs for PDFs and images.
Locally, in Python.
Excel workbooks
Reads XLSX workbooks cell by cell. Tables, titles, and notes come back separately; merged titles become headings; and empty cells stay empty.
Converts each sheet into one Markdown table.
Structured extraction
Schema-based extraction and document classification.
Not included. MarkItDown converts files to Markdown only.
Price
The CLI’s standard mode is free. The API includes 5,000 free credits a month.
Free and open source.

PDF to Markdown: Reading order, tables, and headings

Both tools appear on two public PDF benchmarks. The figures below are the leaderboards’ own numbers.

opendataloader-bench (0 to 1)
PDF-to-Markdown CLI
MarkItDown
Overall
0.885
0.589
Reading order (NID)
0.925
0.844
Table structure (TEDS)
0.708
0.273
Heading hierarchy (MHS)
0.819
0.000
ParseBench (0 to 100)
Data Extraction API (agentic)
MarkItDown
Overall
76.4
18.6
Tables
72.1
15.8

opendataloader-bench scores retrieved 15 October 2026; the Nutrient entry is the free PDF-to-Markdown CLI. ParseBench scores retrieved 15 October 2026; the Nutrient entry is the Data Extraction API in agentic mode, run through ParseBench’s harness. Nutrient also timed both local tools on the 200 opendataloader-bench PDFs on 6 July 2026. The CLI’s standard mode was 17 times faster than MarkItDown. See all Data Extraction benchmarks.

EXCEL RESULTS

Excel to Markdown: What happens to structure

One sheet with a note, two titled tables, a blank cell, and a literal “NA,” plus a hidden sheet. This is how the Data Extraction API returns it.

Example workbook

Two sheets, one of them hidden

.xlsx
Workbook: q3-report.xlsx
Sheet "Q3 sales"
A1 All amounts in USD thousands. Figures are unaudited.
A3:E3 Q3 2026 regional sales (merged title)
A4:E7 Region | Orders | Revenue | Returns | Status (Excel table)
North | 412 | 1284.5 | 12 | On track
South | | 978.0 | 9 | NA
East | 388 | 1102.3 | 15 | On track
A9:C9 Top products (merged title)
A10:C12 Product | Units | Share
Widget A | 1020 | 34%
Widget B | 870 | 29%
Sheet "Internal" (hidden)

Nutrient output

Headings, a note, and two tables

.md
# Q3 sales
All amounts in USD thousands. Figures are unaudited.
## Q3 2026 regional sales
<table>
<tr><th>Region</th><th>Orders</th><th>Revenue</th><th>Returns</th><th>Status</th></tr>
<tr><td>North</td><td>412</td><td>1284.5</td><td>12</td><td>On track</td></tr>
<tr><td>South</td><td></td><td>978.0</td><td>9</td><td>NA</td></tr>
<tr><td>East</td><td>388</td><td>1102.3</td><td>15</td><td>On track</td></tr>
</table>
## Top products
<table>
<tr><th>Product</th><th>Units</th><th>Share</th></tr>
<tr><td>Widget A</td><td>1020</td><td>34%</td></tr>
<tr><td>Widget B</td><td>870</td><td>29%</td></tr>
</table>
In the example workbook
Nutrient Data Extraction API
MarkItDown
A title, a note, and two tables on one sheet
A separate heading, paragraph, and two tables.
One Markdown table per sheet (converter source).
Blank cells
Stay empty.
Become NaN (issues #183 and #2498).
Literal “NA” or “NULL” text
Kept as written.
Becomes NaN (issue #2498).
Whole numbers in a column that has a blank
Kept as displayed (412).
Get a “.0” suffix, such as 412.0 (issue #2484).
Hidden sheets
Not converted.
Included in the output (pull request #2456).

MarkItDown behavior as of version 0.1.8 (21 September 2026), from its source code and open GitHub issues, checked on 30 September 2026. The Nutrient output above is an example of the documented output format.


CHOOSE

Which Nutrient tool fits

PDFs on a developer machine

The PDF-to-Markdown CLI converts PDFs locally, and its standard mode is free. Install it with npm install -g @pspdfkit/pdf-to-markdown.

Mixed formats in production

The Data Extraction API parses PDFs, scans, images, Office files, and Excel workbooks through one API, with one output format.

Documents that can’t leave the network

The Data Extraction SDK runs extraction for PDFs and images on servers under the organization’s control.

SWITCHING

Switching from MarkItDown

MarkItDown returns Markdown from a function call. The Data Extraction API returns it from one HTTP request, in output.markdown.

MarkItDown

Local Python library

Python
from markitdown import MarkItDown
md = MarkItDown(enable_plugins=False)
result = md.convert("q3-report.xlsx")
print(result.markdown)

Data Extraction API

One HTTP request

Python
import requests
response = requests.post(
"https://api.nutrient.io/extraction/parse",
headers={"Authorization": "Bearer your_api_key_goes_here"},
files={"file": open("q3-report.xlsx", "rb")},
data={"instructions": '{"output":{"format":"markdown"}}'},
)
print(response.json()["output"]["markdown"])

Questions about MarkItDown and Nutrient

Is Nutrient a drop-in replacement for MarkItDown?

No. MarkItDown is a Python library. The Data Extraction API is a hosted API that returns Markdown in its response, and the PDF-to-Markdown CLI converts PDFs locally. Switching means one HTTP request in place of one function call.

Does Nutrient run locally like MarkItDown?

Partly. The PDF-to-Markdown CLI runs locally for PDFs. The Data Extraction SDK is self-hosted for PDFs and images. The Data Extraction API, which reads Excel workbooks, is hosted.

How do MarkItDown and Nutrient compare on Excel files?

MarkItDown converts each sheet into one Markdown table, and its open GitHub issues report blank cells and literal “NA” values turning into NaN. For XLSX workbooks, the Data Extraction API splits each sheet into separate tables, headings, and notes, and empty cells stay empty. Extract data from Excel.

Which formats does MarkItDown convert that Nutrient doesn’t?

The Data Extraction API doesn’t accept audio files, YouTube URLs, EPUB books, or HTML pages. It also doesn’t list text formats such as CSV, JSON, and XML as input types. MarkItDown converts all of these to Markdown.

Is MarkItDown free?

Yes. MarkItDown is open source under the MIT license. The PDF-to-Markdown CLI has a free standard mode, and the Data Extraction API includes 5,000 free credits a month.


EXPLORE

Keep comparing

Unstructured.io

Unstructured.io is a strong RAG-ingestion platform with partitioning, chunking, schema extraction, and 40+ connectors. Nutrient adds a match label on every extracted field, plus viewing, editing, signing, and conversion from the same vendor.

LlamaIndex

LlamaParse scores higher than Nutrient on ParseBench, LlamaIndex’s own benchmark. Nutrient adds a match label on every extracted field, a viewer to check each citation on the page, and viewing, editing, and signing from the same vendor.

Reducto

Reducto is a strong agentic extraction platform, with webhooks and batch processing in its cloud API. Nutrient is the broader document platform: a match label on every extracted field, plus viewing, editing, signing, and conversion from the same vendor.

Documents in, structured data out

5,000 free Data Extraction API credits per month, no credit card required. Convert PDFs, scans, Office files, and Excel workbooks to Markdown or JSON.