Blog

PDF- en Word-bestanden omzetten naar tekst voor AI: Microsofts MarkItDown

Markdown

Zet PDF- en Word-bestanden om naar tekst voor AI met Microsoft MarkItDown. Bekijk installatie, ondersteunde documenten en het verschil met een gewone converter.

Lees het volledige artikel

Belangrijkste punten

MarkItDown is een gratis hulpprogramma van Microsoft dat Word-, Excel- en presentatiebestanden en PDF's omzet in gestructureerde tekst voor AI. Het verwerkt Office-bestanden netjes in een fractie van een seconde. PDF's met complexe lay-outs maakt het tot een rommeltje, en bij een scan levert het een leeg bestand op met een exitcode van nul. Hieronder vind je een werkend installatiecommando, metingen op documenten met Cyrillische tekst en een regel voor wanneer je een ander hulpmiddel moet gebruiken.

Meer instructies vind je in de Ailoot-documentatie.

Wat is MarkItDown en waarvoor dient het?

Belangrijkste punten

MarkItDown is een Python-hulpprogramma van Microsoft dat een bestand leest en de inhoud ervan als gestructureerde tekst teruggeeft. Koppen worden koppen en tabellen worden tabellen. Het staat in een openbare GitHub-repository onder de MIT-licentie, installeert met één commando en verwerkt alles op je computer. Het heeft één taak: een document zo voorbereiden dat een AI niet alleen de woorden, maar ook de structuur kan zien.

Je stuurt een contract, rapport of boekhoudkundige export naar een AI en krijgt een antwoord dat niets met het document te maken heeft. Meestal ligt dat niet aan het model. Het bestand bevat een formaat: Word is een archief met opmaakcode, Excel is een spreadsheet met koppelingen tussen cellen en PDF is een verzameling tekens met coördinaten op een pagina. Het model werkt met tekst, en iemand moet die tekst eruit halen.

Dat is wat MarkItDown doet. De repository staat op github.com/microsoft/markitdown onder de MIT-licentie, dus je kunt het zonder beperkingen gebruiken. Op 18 augustus 2026 heeft het 174,412 sterren en 12,756 forks; de nieuwste release, 0.1.7, verscheen op 29 juli. Het project is actief, al is de focus verschoven van ontwikkeling naar onderhoud: er staan 481 pull requests open, tegenover 183 die in de hele geschiedenis zijn samengevoegd.

De ontwikkelaars beschrijven het doel als volgt:

MarkItDown is een lichtgewicht Python-hulpprogramma om bestanden in allerlei formaten om te zetten naar Markdown voor gebruik met grote taalmodellen en verwante tekstanalysepijplijnen.

— Microsoft, projectbeschrijving (vertaald), https://github.com/microsoft/markitdown

De volgende zin in de beschrijving verklaart de helft van de klachten die mensen over het hulpmiddel hebben:

Hoewel de uitvoer er vaak behoorlijk goed en gebruiksvriendelijk uitziet, is die bedoeld voor verwerking door tekstanalysetools en is hij mogelijk niet de beste keuze voor een zeer nauwkeurige omzetting van documenten die door mensen moeten worden gelezen.

— Microsoft, projectbeschrijving (vertaald), https://github.com/microsoft/markitdown

De uitvoer is ruwe input voor een model. Het wordt geen mooi document, en het project zegt dat ronduit, meteen in het eerste gedeelte.

De beschrijving legt rechtstreeks uit waarom Markdown wordt gebruikt: toonaangevende modellen “spreken” deze opmaaktaal al en nemen die zonder verzoek op in hun antwoorden, omdat ze er tijdens hun training enorme hoeveelheden van hebben gezien. De opmaak is ook compact: drie hekjes voor een kop in plaats van een dozijn regels met metadata.

Waarin verschilt MarkItDown van een gewone converter?

Belangrijkste punten

Converters zoals pandoc vertalen de ene opmaaktaal naar de andere en behouden de lay-out voor mensen. pandoc accepteert helemaal geen PDF als invoer. MarkItDown lost het tegenovergestelde probleem op: inhoud uit een Office-bestand halen en zo ordenen dat een model die meteen begrijpt, zonder tokens te verspillen. Het behouden van de visuele lay-out is niet het doel; daarin zit het hele verschil.

Het verschil blijkt duidelijk uit één voorbeeld. Neem een map met twintig PDF's en probeer ze met pandoc te verwerken. Dat lukt niet: pandoc kan PDF's als uitvoer produceren, maar kan ze niet als invoer lezen. En juist deze situatie — “Ik heb een stapel documenten; geef ze aan het model” — komt het vaakst voor.

De auteurs van MarkItDown vergelijken zichzelf met textract, een bibliotheek die overal simpelweg tekst uit haalt. Het verschil is dat MarkItDown probeert de structuur te behouden: koppen, lijsten, tabellen en links.

FunctiepandocMarkItDown
Leest PDF'sneeja, met kanttekeningen
Leest Word, Excel en presentatiesgedeeltelijkja
Voor wie is de uitvoer bedoeld?mensenmodellen
Belangrijkste voordeelgetrouwe lay-outstructuur en weinig tekens
Installatiezelfstandig programmaéén Python-commando

De praktische conclusie is eenvoudig. Als je een artikel wilt omzetten naar een lay-out voor publicatie, gebruik dan pandoc. Als je wilt dat AI twintig contracten begrijpt, gebruik dan MarkItDown.

Hoe installeer je MarkItDown zonder per ongeluk de eerste release te krijgen?

Belangrijkste punten

Vanaf release 0.1.8 installeert het commando uit de projectbeschrijving de nieuwste versie op Python 3.14 en 3.12; dit is opnieuw gecontroleerd in acht schone omgevingen. Een stille downgrade naar 0.0.2, de tweede release in de geschiedenis van het project, komt nog steeds voor op Python 3.15, op Intel-Macs met 3.14 en op Macs met oudere macOS-versies waarop 3.13 en 3.14 draaien. In deze gevallen meldt het installatieprogramma dat de installatie is geslaagd. Gebruik daarom Python 3.12, vermeld de benodigde formaten bij naam en controleer direct het versienummer.

Eerst het juiste commando; daarna waarom dat het juiste is.

  1. Controleer de Python-versie

    Python 3.12 is het betrouwbaarst: de nieuwste MarkItDown-versie installeert in elke daarop geteste omgeving. Met python3 --version zie je welke versie je hebt. Op Intel-Macs of Macs met een oudere macOS-versie kunnen Python 3.13 en 3.14 stilzwijgend downgraden; Python 3.15 wordt nog niet ondersteund, zoals hieronder wordt uitgelegd.

  2. Installeer met de formaten vermeld

    Voer pip install 'markitdown[pdf,docx,xlsx,pptx]' uit. De aanhalingstekens zijn nodig, anders interpreteert de shell de vierkante haken. Voeg op een Intel-Mac de vlag --prefer-binary toe na install.

  3. Controleer meteen of de installatie is gelukt

    Voer markitdown --version uit. Het antwoord moet markitdown 0.1.8 of hoger zijn. Een lager nummer betekent dat de installatie is gedowngraded; in dit gedeelte lees je waarom.

pip install 'markitdown[pdf,docx,xlsx,pptx]'
markitdown --version

De projectbeschrijving noemt pip install 'markitdown[all]' als het hoofdcommando om alles in één keer te installeren. Op 28 september 2026, een week nadat 0.1.8 uitkwam, zijn vier varianten uitgevoerd in schone omgevingen op een Apple Silicon-Mac met Python 3.14.6 en 3.12.12:

CommandoGeïnstalleerd op Python 3.14Geïnstalleerd op Python 3.12
pip install markitdown0.1.80.1.8
pip install 'markitdown[pdf,docx,xlsx,pptx]'0.1.80.1.8
pip install 'markitdown[all]'0.1.80.1.8
pip install 'markitdown[all]==0.1.8'0.1.80.1.8

Alle acht installaties eindigden met “Successfully installed”, en markitdown --version gaf in elk geval 0.1.8 terug. In augustus, toen 0.1.7 de nieuwste release was, installeerde het derde commando op Python 3.14 versie 0.0.2, uitgebracht op 8 maart 2025 — de tweede release in de geschiedenis van het project. Het project heeft nu elf stabiele releases, van 0.0.1 tot 0.1.8, en zesentwintig releases als je prereleases meetelt.

De oorzaak zat in de afhankelijkheidsketen. In 0.1.7 haalt de extra [all] een bibliotheek voor YouTube-ondertiteling uit een specifieke releasereeks binnen; alle releases in die reeks geven aan dat ze niet werken met Python 3.14. Het installatieprogramma weigert ze en gaat, omdat er geen versie is vastgezet, terug langs eerdere MarkItDown-versies totdat het er een vindt die kan worden geïnstalleerd. Het vindt 0.0.2 en installeert die, zodat er een release van anderhalf jaar oud op je computer terechtkomt. In 0.1.8 is de vereiste versie van de ondertitelingsbibliotheek verhoogd naar een reeks die met 3.14 werkt, waardoor de downgrade daar stopte.

Het mechanisme bestaat nog steeds. Als het installatieprogramma een vereiste component voor jouw systeem niet kan vinden, gaat het op dezelfde manier stilzwijgend terug naar 0.0.2. In recente versies is die component de onnxruntime-engine die de bestandstypedetector gebruikt. Op Mac wordt die als volgt gebouwd: voor Python 3.12 met macOS 11 en hoger; voor 3.13 met macOS 13; voor 3.14 alleen op Apple Silicon met macOS 14 of hoger. Voldoet je Mac niet aan die vereisten, dan installeert zelfs het kale commando pip install markitdown versie 0.0.2. Een test op een Intel-Mac met Python 3.14 via Rosetta leverde precies dit resultaat op: “Successfully installed”, geen waarschuwingen en versie 0.0.2.

Intel-Macs hebben nog een complicatie. Sinds juni 2026 wordt de cryptography-bibliotheek die nodig is om PDF's te lezen uitgebracht zonder voorgebouwde versie voor deze processor, waardoor het installatieprogramma probeert de bibliotheek vanuit de broncode te bouwen. Voeg de vlag --prefer-binary aan het commando toe; dan gebruikt het de vorige versie met een voorgebouwd pakket. In een test op Python 3.13 voor Intel werd zo 0.1.8 geïnstalleerd en ging de PDF open. De vlag installeert cryptography 48.0.1, die drie bekende kwetsbaarheden heeft: bij PKCS#7-ontsleuteling en verificatie van de certificaatketen. MarkItDown gebruikt deze bibliotheek alleen om versleutelde PDF's te ontsleutelen; bij het lezen van documenten komt het niet aan die onderdelen toe.

Op Python 3.15 vindt de downgrade om twee redenen plaats. Versie 0.1.8 ondersteunt alleen 3.10 tot en met 3.14, en er is nog geen engine voor 3.15. De oplossing van het installatieprogramma voor 3.15 bevestigt dit: zowel het kale commando als het commando met formaten installeert dezelfde versie 0.0.2.

Een downgradewaarschuwing ziet er zo uit, één regel voor elke extra in het commando:

WARNING: markitdown 0.0.2 does not provide the extra 'all'

De regel raakt verloren tussen tientallen downloadregels en zegt niets over de versie die in de plaats komt. Bij een kaal commando zonder extra's verschijnt zelfs helemaal geen waarschuwing. Het eindrapport klinkt opgewekt: “Successfully installed.”

Installeren zonder extra's is ook geen oplossing. Het kale pakket wordt geïnstalleerd, maar kan geen PDF's openen:

PdfConverter recognized the input as a potential .pdf file, but the
dependencies needed to read .pdf files have not been installed. To resolve
this error, include the optional dependency [pdf] or [all] when installing
MarkItDown. For example:

* pip install 'markitdown[pdf]'
* pip install 'markitdown[all]'

Het hulpmiddel zelf raadt [all] aan, en met 0.1.8 werkt dat advies weer op Python 3.14 en 3.12. Toch kun je de formaten beter bij naam vermelden: [all] voegt nog eens vijftien of zo pakketten en ongeveer 55 megabyte toe, waaronder een prerelease van een Azure-bibliotheek en de YouTube-afhankelijkheidsketen die de installatie al eens heeft gebroken.

Het installatieprogramma regelt de Azure-prerelease zelf. Normaal slaat pip prereleases over, maar hier wordt in de vereiste expliciet een prerelease genoemd, dus installeert pip die. Vier pip-versies, van 23.2 tot 26.2, zijn getest op Python 3.12; ze selecteren allemaal 0.1.8.

Let op

Voer direct na de installatie markitdown --version uit. Dat kost vijf seconden en is de enige manier om te weten of je hebt geïnstalleerd wat je wilde. De melding dat de installatie is geslaagd, zegt hier niets.

In augustus leverde een herinstallatie in een andere schone omgeving hetzelfde resultaat op: 0.0.2 en het woord “Successfully”.

Een paar praktische zaken zijn handig om vooraf te weten.

Het is vrij groot: een kale installatie neemt 143 megabyte in beslag; met vier formaten is dat 303. Het zwaarste onderdeel is de bestandstypedetector van 81 megabyte, die zelfs bij de basisinstallatie wordt meegeleverd. Voor een laptop maakt dat niet uit, maar voor een cloudfunctie met een groottelimiet wel.

Reken niet op mirrors als alternatief. Een geteste mirror bood een index en de MarkItDown-bestanden waren aanwezig, maar één vereiste afhankelijkheid ontbrak, waardoor de installatie zowel op Python 3.14 als 3.12 mislukte.

De installatie is een klein probleem vergeleken met het hoofdprobleem. Veel vaker produceert een AI onzin omdat het verkeerde, of de verkeerde weergave ervan, in het contextvenster terechtkwam. Het vermogen om voorafgaand aan een taak te beslissen wat je een model geeft, heet context engineering, en documentvoorbereiding is daar een onderdeel van.

Hoe zet je je eerste document om naar tekst?

Belangrijkste punten

Eén commando in de terminal: de programmanaam en het bestandspad. Standaard wordt het resultaat meteen in het venster weergegeven, zodat je het rechtstreeks naar een bestand kunt opslaan. Er zijn drie methoden: uitvoer naar de console, schrijven met een vlag of het bestand als stream doorgeven. Voor gebruik in je eigen scripts is er een Python-wrapper van drie regels, die ook URL's accepteert.

De kortste optie:

markitdown dogovor.docx

De tekst wordt in de terminal afgedrukt. Er zijn twee manieren om die in een bestand op te slaan:

markitdown dogovor.docx -o dogovor.md
markitdown dogovor.docx > dogovor.md

Op Mac en Linux is het verschil verwaarloosbaar, maar op Windows maakt het uit: omleiden met > kan het programma laten crashen als de uitvoer Cyrillische tekst bevat.

Je kunt een bestand als stream doorgeven; in dat geval is de extensiehint handig:

cat dogovor.docx | markitdown -x docx

Dit zijn de belangrijkste vlaggen uit de helptekst van 0.1.8:

VlagWat doet deze?
-o, --outputschrijft het resultaat naar een bestand in plaats van het in het venster af te drukken
-x, --extensionextensiehint wanneer het bestand als stream wordt doorgegeven
-m, --mime-typehint voor het contenttype
-c, --charsethint voor de tekencodering
-d, --use-docintelverwerking via de betaalde clouddienst van Microsoft
-v, --versiontoont de versie

Dezelfde helptekst vermeldt nog drie handige vlaggen, die elk zijn getest: --list-plugins toont geïnstalleerde plugins, -p schakelt ze in voor een specifieke uitvoering en --keep-data-uris behoudt afbeeldingen die in het document zijn ingesloten in de uitvoer (standaard worden ze uitgesneden). De overige opties zijn instellingen voor de clouddiensten van Microsoft.

De Python-wrapper bestaat uit drie regels:

from markitdown import MarkItDown

md = MarkItDown()
print(md.convert("ostatki.xlsx").text_content)

Dezelfde aanroep accepteert ook een URL. Een eenvoudige pagina leverde schone tekst op van 167 tekens, inclusief een kop en een link, zonder menu en voettekst:

r = md.convert("https://example.com")

Welke formaten begrijpt MarkItDown, en wat betekent dat in de praktijk?

Belangrijkste punten

De projectbeschrijving vermeldt een breed scala: Office-bestanden, PDF's, afbeeldingen, audio, archieven, YouTube-links en e-books. Drie onderdelen werken niet zoals je op basis van de omschrijving zou verwachten. De gratis versie heeft helemaal geen tekstherkenning voor afbeeldingen. Spraak wordt naar een Engelstalige engine gestuurd. Bestanden die niet kunnen worden geparseerd, verdwijnen zonder waarschuwing uit archieven.

Een overzichtstabel van wat wordt beloofd en wat dat in de praktijk betekent.

FormaatVolgens de claimWat er daadwerkelijk gebeurt
Word, Excel, presentatiesjawerkt netjes; dit is de sterke kant
CSV, JSON, XML, HTMLjawerkt, maar CSV heeft een valkuil met scheidingstekens
PDFjahangt af van de lay-out: één kolom wordt samengevoegd, twee kolommen vallen uiteen
Afbeeldingen“metadata en herkenning”geen herkenning, alleen metadata of een betaald vision-model
Audio“spraaktranscriptie”gaat naar Googles Engelstalige engine
ZIP-archieven“doorloopt de inhoud”alles wat niet kan worden geparseerd verdwijnt stilzwijgend
YouTube-linksjaalleen volledige links in de vorm '<OFFICIAL_URL>'?...
EPUB-e-booksjawerkt

Drie onderdelen nader bekeken.

Afbeeldingen. In de beschrijving staat het woord OCR, dus mensen verwachten dat het programma tekst op een foto kan lezen. Dat doet het niet. Het leest metadata met een afzonderlijk programma, exiftool, en kan de afbeelding voor een beschrijving naar een vision-model sturen als je dat met je eigen sleutel verbindt.

Audio. Spraaktranscriptie is beschikbaar, maar de taal wordt niet doorgegeven en de engine verwacht standaard Engels. Bovendien gebruikt die de onofficiële gratis endpoint van Google, die is beperkt tot ongeveer vijftig verzoeken per dag per sleutel.

Archieven. Het programma pakt ZIP-bestanden uit en doorloopt de bestanden erin, waarbij het de resultaten samenvoegt. Als het een bestand niet kan parsen, wordt de fout opgevangen en onderdrukt. Het bestand verschijnt simpelweg niet in het resultaat en je weet er niets van.

Wat gebeurt er met documenten met Cyrillische tekst?

Belangrijkste punten

Drie bestanden met Cyrillische tekst — een Word-contract, een Excel-inventarisblad en een presentatie — zijn met de nieuwste versie verwerkt. De Cyrillische tekst en het getal bleven in alle drie intact. Er gaat op drie plaatsen iets mis: bij CSV-bestanden met puntkomma's, valutaopmaak in Excel-cellen en uitvoer in de Windows-console. Voor alle drie bestaan oplossingen.

De onderstaande bestanden zijn speciaal voor de test gemaakt; de gegevens zijn verzonnen.

Het Excel-inventarisblad kwam er net zo netjes uit, met de bladnaam omgezet in een kop:

## Stock
| Item | In stock | Reserved | Available |
| --- | --- | --- | --- |
| Coffee beans, kg | 420 | 38 | 382 |
| Loose-leaf tea, kg | 180 | 52 | 128 |

De presentatie werd tekst, met dianummers als annotaties en diatitels als koppen. Ook hier is de Cyrillische tekst intact. De algemene bewering dat “MarkItDown geen Cyrillisch begrijpt” is onjuist.

Dan nu de drie plaatsen waar het wel misgaat.

CSV met puntkomma's. Er zijn twee identieke factuurexports verwerkt ter vergelijking. De versie met komma's leverde een nette tabel met vier kolommen op. Met puntkomma's belandt de hele regel in één cel.

De volledige regel kwam in één cel terecht. De codering werd correct herkend en er was geen fout; de vlag -c helpt niet. Het model krijgt deze tabel en begrijpt niet welke waarde het bedrag is en welke de status. Exporteer het bestand opnieuw met een expliciet kommascheidingsteken en de juiste codering en laat het origineel ongewijzigd. Vervang puntkomma’s niet overal: scheidingstekens in tekst tussen aanhalingstekens en decimale komma’s kunnen deel van een waarde zijn. Is opnieuw exporteren niet mogelijk, lees dan het origineel met het werkelijke scheidingsteken en schrijf een nieuwe CSV met een CSV-bewuste schrijver die aanhalingstekens en celwaarden behoudt. Vergelijk vóór analyse aantallen kolommen, aantallen rijen en controletotalen met de bronexport.

Valutaopmaak in Excel. Het valutateken is opgeslagen in de weergave-instellingen van de cel en maakt geen deel uit van de waarde zelf. De projectonderhouders hebben de oorzaak bevestigd. Voor een prijslijst of factuur is dit belangrijk: het model ziet getallen zonder te weten welke valuta erbij hoort.

Windows-console. Bij bestanden met niet-Latijnse tekens kan het programma crashen.

De fouttrace vermeldt de codering cp1251, wat op de Windows-console wijst. Het document zelf wordt goed geparseerd; het afdrukken van het resultaat in het terminalvenster is wat misgaat. Er zijn dus twee oplossingen:

markitdown dogovor.docx -o dogovor.md
$env:PYTHONUTF8 = "1"; markitdown dogovor.docx > dogovor.md

Met de eerste omzeil je de console volledig; de tweede zorgt ervoor dat Python in UTF-8 schrijft. Mensen hebben minstens zes keer oplossingen voor het probleem in het hulpmiddel zelf ingediend: sommige voorstellen werden gesloten zonder te worden samengevoegd, terwijl de rest nog openstaat. Je moet er dus omheen werken.

Een vierde symptoom verschijnt in PDF's: reeksen zoals (cid:1090) in plaats van letters. Dit betekent dat het bestand een niet-standaard lettertypetabel heeft en de tekens niet konden worden gedecodeerd. Het heeft geen zin zo'n document met MarkItDown te verwerken; je hebt een ander hulpmiddel nodig.

Waarom wordt een PDF een rommeltje?

Belangrijkste punten

Een PDF bevat geen structuur, alleen tekens met coördinaten op de pagina. Tekst in één kolom wordt redelijk goed samengevoegd. Twee kolommen worden een rommeltje: regels worden over kolommen heen aan elkaar geplakt, woorden lopen in elkaar over en de lay-out verandert in tabellen die nooit in het document stonden. Het hulpmiddel herkent helemaal geen koppen in PDF's — dat blijkt zowel uit de broncode als uit onafhankelijke metingen.

Voor de test is een wetenschappelijk artikel van 2.16 megabyte met twee kolommen verwerkt. De exitcode was nul; na 0.9 seconden bevatte de uitvoer 88,000 tekens, die vrijwel allemaal onzin waren. Achten­tachtigduizend tekens wekken de indruk dat alles goed is gegaan. Totdat je het bestand opent:

|     | Hybrid |          | OCR-LLM     |     | Framework  |
| --- | ------ | -------- | ----------- | --- | ---------- |
...
Informationextractionfromcopy-heavydoc-
5202 tcO 11  ]LC.sc[  1v83101.0152:viXra

Er gingen drie dingen tegelijk mis. De lay-out met twee kolommen werd omgezet in tabellen die niet in het artikel staan. Woorden liepen zonder spaties in elkaar over. De laatste regel is een verticale zijbalk op de pagina, die achterstevoren is geëxtraheerd.

Daarna kwam het grappige gedeelte. Het testartikel bleek precies het werk te zijn waarin MarkItDown werd gemeten en met andere hulpmiddelen vergeleken. Het hulpmiddel zette de alinea met zijn eigen meetresultaten om in dit:

cues. This name-matching error could be miti-  OCRpreprocessingoverhead(0.056s),whileDo-
gatedthroughpromptengineeringtoprovidemore  clingandMinerUadoptmorecomputationallyin-
explicit matching instructions or fine-tuning the  tensive strategies with OCR latencies of approxi-

De linker- en rechterkolom zijn regel voor regel samengevoegd. Een model dat dit krijgt, leest een halve zin uit de ene alinea en een halve zin uit een andere.

De oorzaak is technisch en eenvoudig. Word slaat expliciet op “dit is een kop” en “dit is een tabelcel”. Een PDF slaat op “dit is een teken” en “dit zijn de coördinaten ervan op de pagina”. De structuur uit coördinaten reconstrueren is een afzonderlijke, lastige taak, en MarkItDown doet daar nauwelijks moeite voor. De broncode voor PDF-parsing bevat geen kopherkenning: als een pagina niet als formulier of tabel wordt herkend, wordt het hele document met eenvoudige teksextractie verwerkt.

Gebruikers melden dit regelmatig in de repository van het project, ook voor wetenschappelijke artikelen en tabellen.

Het hulpmiddel vindt geen enkele kop in PDF's, precies zoals de broncode laat zien.

De bewering “MarkItDown behaalt 82% nauwkeurigheid” circuleert online zonder enige methodologie. Terugzoeken naar de oorspronkelijke bron levert niets op: de linkketen eindigt op een pagina die niet laadt. Dit kan niet als een meting worden beschouwd.

Wat gebeurt er met een gescand contract?

Belangrijkste punten

Niets. Het bestand wordt verwerkt, het programma meldt dat de verwerking is geslaagd en de uitvoer bevat nul tekens. Geen fout, geen waarschuwing. Dit is twee keer getest met een PDF die van een afbeelding was gemaakt, en afzonderlijk met de afbeelding zelf — het resultaat was hetzelfde. Het hulpmiddel haalt tekst eruit die al als tekst in het bestand is opgeslagen; de gratis versie heeft geen herkenningsmogelijkheden.

Dit gedrag is gevaarlijker dan de andere problemen, omdat het niet op een mislukking lijkt.

Voor de test is een PDF gemaakt van een afbeelding met tekst — precies wat je krijgt wanneer een contract wordt gefotografeerd of gescand. De test is herhaald om toeval uit te sluiten:

InvoerExitcodeTekens in uitvoerFoutmelding
PDF van afbeelding, test 100geen
PDF van afbeelding, test 200geen
PNG-afbeelding rechtstreeks01 (regeleinde)geen

Twee keer achter elkaar nul tekens en nul fouten. Een exitcode van nul betekent “alles is goed gegaan”, en elk script dat succes controleert aan de hand van de exitcode telt het document als verwerkt. Daarna gaat de lege uitvoer naar het model, ziet het model niets en begint het uit het niets een antwoord te verzinnen.

Let op

Controleer de lengte van de uitvoer als je documenten in batches verwerkt. De exitcode vertelt je niets: een leeg bestand met exitcode nul is hoe een scan eruitziet.

Er zijn twee oplossingen en ze zijn allebei betaald. De eerste is de vlag -d, die het document naar de cloudherkenningsdienst van Microsoft stuurt; in de helptekst staat expliciet dat een geldig service-endpoint vereist is. De tweede is een afzonderlijk aanvullend pakket dat pagina's met jouw sleutel naar een vision-model stuurt, zodat je de modelprovider per pagina betaalt. Sinds april 2026 meldt een openbare discussie over de tweede methode dat alleen de eerste pagina van een scan met meerdere pagina's wordt verwerkt.

Je kunt ook op je eigen computer een herkenningsmodel uitvoeren, maar dat is een apart project.

Voor een eenmalig document is het eenvoudiger om het te openen en de tekst handmatig te kopiëren. Voor een stroom scans heb je een hulpmiddel met ingebouwde herkenning nodig.

Kun je het bestand gewoon uploaden naar een online converter?

Belangrijkste punten

Technisch gezien wel; er zijn veel domeinen met deze naam. Maar geen ervan is aan Microsoft gelieerd. De bewering “het bestand verlaat je browser nooit” kun je met één klik controleren, en die klopt niet altijd. Controleer zelf waar het bestand naartoe gaat voordat je een contract of een export met namen van mensen uploadt.

“MarkItDown online” is een van de vaakst voorkomende zoeksuggesties, en er zijn sites die het aanbieden. Het oorspronkelijke hulpmiddel van Microsoft heeft helemaal geen website; het is alleen beschikbaar als programma dat je zelf installeert. Alles met een vergelijkbare naam dat in een browser opent, is door iemand anders gemaakt.

Je kunt zo'n dienst binnen een minuut controleren: open de ontwikkelaarstools op het tabblad met netwerkverzoeken, upload een onschuldig bestand en kijk of het naar een server wordt gestuurd. Als dat zo is, is de bewering dat de verwerking in de browser plaatsvindt onjuist, hoe stellig die ook in de FAQ wordt gepresenteerd.

Let op

Een contract, factuur of export met namen van werknemers bevat persoonsgegevens. Als je zo'n bestand naar een website van een derde partij stuurt, ben jij degene die het heeft verzonden. Een lokaal hulpprogramma vermijdt dat probleem: het bestand verlaat je computer niet.

Daarom wordt MarkItDown gewaardeerd op plekken waar documenten niet buiten de organisatie mogen worden verzonden. In één discussie beschreef iemand de situatie: willekeurige programma's waren verboden op de werklaptop, maar Python-bibliotheken waren toegestaan en het lokale hulpprogramma bleek de enige beschikbare optie.

Hoeveel bespaart MarkItDown eigenlijk?

Belangrijkste punten

Het belangrijkste voordeel is dat het model het document überhaupt kan begrijpen. Er is ook een verschil in omvang: als je de omvang van de opmaak in Office-bestanden vergelijkt met die van de geëxtraheerde tekst, zie je een reductie met een factor vijf tot zeven. Ook wordt alles verwijderd wat het model niet hoeft te lezen: beschrijvingen van lettertypen, marges en celkleuren.

Een Office-bestand is opgebouwd als een archief met opmaakcode. Pak je de drie testbestanden uit en vergelijk je de grootte van het onderdeel met de inhoud met die van de uitvoer, dan krijg je dit:

BestandOpmaakcode in bestandGeëxtraheerde tekstKeer kleiner
Word-contract3,701 bytes711 bytes5.2
Excel-spreadsheet1,561 bytes262 bytes6.0
Presentatie2,203 bytes296 bytes7.4

De bestanden zijn klein; bij grotere bestanden zullen de verhoudingen anders zijn en er is geen vast besparingscijfer. Vraag naar de methodologie wanneer vergelijkingsartikelen ronde getallen noemen.

De ontwikkelaars zelf spreken ook over besparingen: de projectbeschrijving zegt expliciet dat Markdown-conventies zeer zuinig zijn qua aantal tekens. Dat klopt, maar het zou niet het belangrijkste verkoopargument moeten zijn. Het verschil tussen “het model kreeg drieduizend tekens in plaats van vijftienduizend” en “het model kreeg een duidelijke structuur in plaats van een warboel” is van een heel andere orde. Het eerste bespaart geld; het tweede bepaalt of het antwoord ergens op slaat.

Als je je zorgen maakt over contextgebruik, wordt dat apart behandeld: Waar tokens naartoe gaan in Claude en hoeveel er in elk abonnement zijn inbegrepen.

Hoe koppel je MarkItDown via MCP aan Claude?

Belangrijkste punten

Het project heeft een afzonderlijk pakket dat met één commando een MCP-server start: geef een bestandspad op en krijg tekst terug. In september 2026 is het pakket eindelijk bijgewerkt naar 0.0.1a7, maar de build is nog steeds een prerelease en stuurt standaard telemetrie naar Microsoft. Het commando hieronder koppelt het via uv, zet de versie vast, gebruikt Python 3.12 en schakelt telemetrie uit. Er is geen authenticatie en volgens de eigen documentatie kan de server elk bestand lezen dat beschikbaar is voor de gebruiker die hem heeft gestart.

MCP is een manier om een AI een extern hulpmiddel te geven dat die zelf kan gebruiken. Voor een overzicht van het mechanisme en andere servers kun je de bespreking van MCP-servers voor Claude Code lezen.

De MarkItDown-server biedt precies één hulpmiddel: een document omzetten naar tekst. De server accepteert een lokaal bestandspad, een pagina-URL of gegevens die rechtstreeks in het verzoek zijn opgenomen.

Je koppelt de server met één commando aan Claude Code en zet daarbij de serverversie vast. Je hebt de pakketbeheerder uv nodig:

claude mcp add --scope user --env 'ORT_DISABLE_TELEMETRY=1' --env 'UV_PYTHON=3.12' --transport stdio markitdown -- uvx markitdown-mcp@0.0.1a7
claude mcp list

Het antwoord op het tweede commando moet voor markitdown “Connected” tonen. De eerste keer worden ongeveer zeventig pakketten gedownload en dat kan tot een minuut duren; daarna start de server in één tot anderhalve seconde.

Elk van de volgende kanttekeningen is handmatig gecontroleerd.

Build 0.0.1a7 is uitgebracht op 14 september 2026. Daarvoor was de server ruim een jaar blijven steken op 0.0.1a4 uit mei 2025. Het nieuwste versienummer duidt nog steeds op een prerelease.

De server installeert niet op elk systeem met een recente Python-versie. De onnxruntime-engine waarvan die afhankelijk is, is voor Python 3.14 op Mac alleen beschikbaar voor Apple Silicon met macOS 14 of hoger. Daarom mislukt de installatie op Intel-Macs en op macOS 13 of ouder met Python 3.14. Op een Apple Silicon-Mac is de server getest met Python 3.14, 3.13 en 3.12, en op alle drie geïnstalleerd. Het commando gebruikt UV_PYTHON=3.12: voor 3.12 zijn voorgebouwde pakketten beschikbaar op Windows, Linux en Apple Silicon-Macs, en als je die Python-versie niet hebt, downloadt uv die voor je. Ook voor Intel-Macs geldt hier een kanttekening: uv bouwt de cryptography-bibliotheek vanuit de broncode omdat er sinds juni 2026 geen voorgebouwd pakket voor Intel is. De installatie duurt langer en kan mislukken.

De versie van MarkItDown die intern wordt geïnstalleerd, hangt af van de uv-versie. Vanaf MarkItDown 0.1.6 vereist de extra [all] een Azure-bibliotheek in prerelease: uv 0.12 en hoger installeert die en de nieuwste MarkItDown 0.1.8, terwijl oudere uv-versies downgraden naar 0.1.5. Controleer je uv-versie met uv --version.

Er worden twee dingen buiten de computer verstuurd. Het eerste is telemetrie: op Mac en Linux stuurt de onnxruntime-engine in de server standaard telemetrie naar Microsoft. De variabele ORT_DISABLE_TELEMETRY=1 in het commando schakelt die uit. In de test maakte de server verbinding met de telemetrie-endpoints van Microsoft wanneer de variabele ontbrak. Met de variabele ingesteld waren er helemaal geen verbindingen terwijl bestanden vanaf schijf werden verwerkt.

Het tweede is audio. De server stuurt WAV-, MP3-, M4A- en MP4-bestanden voor transcriptie via gewone HTTP, zonder versleuteling, naar de spraakherkenningsdienst van Google. Stuur er liever geen opnamen van gesprekken met klanten naartoe.

Een groot document past er niet doorheen. In een openbare discussie wordt beschreven dat een serverantwoord van 51,000 tokens tegen een limiet van 25,000 tokens aanliep; het hulpmiddel splitst bestanden niet in stukken.

En dan de beveiliging. In de eigen documentatie van het pakket staat het duidelijk:

De server ondersteunt geen authenticatie en draait met de rechten van de gebruiker die hem heeft gestart. Het conversiehulpmiddel kan worden gebruikt om elk bestand te lezen waartoe de servergebruiker toegang heeft, of gegevens op het netwerk.

— Microsoft, beschrijving van het pakket markitdown-mcp (vertaald), https://github.com/microsoft/markitdown/tree/main/packages/markitdown-mcp

Met andere woorden: een agent met dit hulpmiddel kan alles lezen wat jij kunt lezen. Dat is acceptabel voor werk op je eigen computer. Je mag de server niet openbaar beschikbaar maken of aan een niet-vertrouwde agent geven.

Let op

De projectdocumentatie bevat geen configuratie die specifiek voor Claude Code is bedoeld — er wordt alleen Claude Desktop beschreven en hoe je de server via een container start. Als je online een kant-en-klare configuratie vindt die “uit de officiële documentatie” voor Claude Code zou komen, weet dan dat er in de repository geen dergelijke configuratie staat.

Voor regelmatig werk is het eenvoudiger het programma met een commando aan te roepen en de resulterende tekst in het project te zetten. Het bestand staat dan naast het andere materiaal, waar het model het zelf kan raadplegen.

Wanneer is het eerlijker om een ander hulpmiddel te gebruiken?

Belangrijkste punten

De regel is eenvoudig: als de structuur al in het bestand is vastgelegd, gebruik dan MarkItDown — het is het snelst en gratis. Als de structuur moet worden gereconstrueerd op basis van een afbeelding van de pagina, gebruik dan een hulpmiddel met lay-outmodellen. Docling verwerkt tabellen en complexe lay-outs, MinerU verwerkt formules en meerdere kolommen, en betaalde clouddiensten helpen als je geen tijd hebt om ermee te prutsen.

Een vergelijking op basis van taken; GitHub-sterren hebben hier niets mee te maken:

HulpmiddelSterk puntWaarin je betaalt
MarkItDownOffice-bestanden, snelheid, gratiskan geen complexe PDF's of scans verwerken
Doclingtabellen en lay-outs via gespecialiseerde modellentientallen seconden per document
MinerUmeerdere kolommen, formules, dichte tabellenmoeilijker te installeren
Markerhoge nauwkeurigheid, formules, illustratiesvereist een grafische kaart en de licentie beperkt omzet
unstructuredgeeft de documentstructuur terug in delen met beschrijvingende uitvoer is moeilijker te gebruiken
Cloudparsersgeen installatie nodiggeld en het document buiten je computer versturen

Er is een detail over Marker dat vergelijkingsartikelen weglaten. Sinds juli 2026 valt de code zelf onder een permissieve licentie, terwijl de modelgewichten een afzonderlijke licentie hebben met een drempel: gebruik is gratis als je bedrijf het afgelopen jaar niet meer dan vijf miljoen dollar omzet had en ook niet meer dan hetzelfde bedrag aan financiering heeft opgehaald. Een aparte bepaling verbiedt gebruik door iedereen die een concurrerend product bouwt. Dit maakt voor de meeste lezers niet uit, maar is voor een groeiend bedrijf reden om de licentie te lezen voordat het hulpmiddel wordt gebruikt.

Daaruit volgt een praktische werkwijze in vier stappen:

  1. Haal alles door MarkItDown — het is gratis en direct.
  2. Open het resultaat en controleer de omvang.
  3. Als de tekst logisch is, ben je klaar; er is niets anders nodig.
  4. Als de uitvoer een rommeltje of leeg is, verwerk dan alleen dat specifieke bestand met een zwaarder hulpmiddel.

Zo betaal je de kosten in tijd en complexiteit alleen voor documenten die dat nodig hebben.

Hoe neem je MarkItDown op in je workflow?

Belangrijkste punten

Anthropic vermeldt zelf de regel in de beschrijvingen van zijn skills: gebruik dit hulpmiddel om een document te lezen. Plan geen bewerkingen op basis daarvan. Dit zijn drie scenario's waarin het meteen bij de eerste keer iets oplevert: een reeks vergelijkbare documenten parsen, blijvend referentiemateriaal één keer aan een AI-project toevoegen en een export uit een boekhoudsysteem voorbereiden voor analyse.

Anthropic gebruikt MarkItDown in zijn eigen kant-en-klare skills voor Office-bestanden, en die skills leggen de grens vast die je volledig moet overnemen:

Bekijk een werkblad snel: markitdown file.xlsx. Celcoördinaten zijn niet beschikbaar, dus plan hier geen bewerkingen op basis van.

— Anthropic, beschrijving van de skill voor het werken met tabellen (vertaald), https://github.com/anthropics/skills/blob/main/skills/xlsx/SKILL.md

Cel- en paginaverwijzingen gaan verloren in de tekst, dus je kunt die niet gebruiken om het bronbestand te wijzigen. Hier zijn drie scenario's.

Een reeks vergelijkbare documenten — akten, facturen, formulieren, aanvragen. Zet ze in een map en voer één regel uit:

for f in dokumenty/*.docx; do markitdown "$f" -o "text/$(basename "$f" .docx).md"; done

Geef het model vervolgens de map met tekstbestanden en vraag het de relevante informatie in een tabel samen te vatten. Dit werkt met digitale bestanden; scans mislukken, en je ziet ze meteen aan hun bestandsgrootte van nul.

Vast projectmateriaal — prijslijsten, contractmodellen, beleidsregels, dienstbeschrijvingen. Zet het één keer om naar tekst en plaats het bij het project. Het model kan het dan bij elk verzoek lezen, zodat je de bestanden niet telkens aan het gesprek hoeft toe te voegen. Het artikel over bestanden uploaden naar Claude legt uit hoe dit verschilt van een bestand naar de chat uploaden.

Een export uit een boekhoudsysteem. Een Excel-export uit boekhoudsoftware of een bankrekening wordt in een derde van een seconde een tabel, en het model kan ermee rekenen zonder tussenstappen. Controleer of de CSV met zijn echte scheidingsteken, aanhalingstekens en codering is geëxporteerd of ingelezen en vergelijk rijen, kolommen en controletotalen voordat je hem aan het model geeft. Normaliseer scheidingstekens niet met zoeken en vervangen. Leg ook de valuta expliciet vast: een symbool dat alleen in de Excel-celopmaak staat, overleeft de extractie niet.

Grote PDF's in de terminal verwerken staat niet op deze lijst. Dat is een afzonderlijk onderwerp over contextgebruik, behandeld in het artikel over PDF's in Claude Code zonder tokens te verliezen. Als je je werkruimte nog aan het inrichten bent, begin dan met Claude Code installeren.

Om meteen aan de slag te gaan, voer je pip install 'markitdown[pdf,docx,xlsx,pptx]' uit, verwerk je het eerste Word-contract dat je tegenkomt en controleer je de omvang van het resultaat. Binnen een halve minuut weet je of het met jouw bestanden werkt.

Veelgestelde vragen

Is MarkItDown gratis?

Ja. Het heeft een MIT-licentie zonder beperkingen op commercieel gebruik. Je betaalt alleen voor twee optionele methoden: cloudherkenning van Microsoft via de vlag -d en afbeeldingsbeschrijvingen door een vision-model met je eigen sleutel. Al het andere draait gratis op je eigen computer.

Worden gegevens naar een server gestuurd?

Bij gewone conversie van Office-bestanden en PDF's niet — alles wordt lokaal verwerkt. Er zijn drie uitzonderingen: audiotranscriptie verloopt via de dienst van Google, de vlag -d stuurt het document naar de Microsoft-cloud en afbeeldingsbeschrijvingen gaan naar een model dat jouw sleutel gebruikt. Geen van deze methoden is automatisch ingeschakeld.

Waarom kan ik het commando markitdown na de installatie niet vinden?

Meestal is het programma geïnstalleerd in een omgeving die niet in je zoekpad staat. Controleer het volledige pad naar het bestand binnen de omgeving. Een andere veelvoorkomende situatie is dat je het voor de ene versie van Python hebt geïnstalleerd maar het met een andere aanroept. Nog een valkuil: op Python-versies ouder dan 3.10 wordt zonder installatiefout een leeg pakket geïnstalleerd.

Wat moet ik doen als ik (cid:1090) en vergelijkbare tekenreeksen zie in plaats van letters?

Dit is een niet-gedecodeerde lettertypetabel in de PDF. Instellingen lossen het niet op; je moet het bestand door een ander hulpmiddel halen, zoals Docling of MinerU. Voor een eenmalig document is het sneller om de tekst handmatig uit een viewer te kopiëren.

Kan ik een hele map met bestanden in één keer verwerken?

Er is geen afzonderlijke mapmodus, maar je kunt het doen met een terminal-lus van één regel: for f in papka/*.docx; do markitdown "$f" -o "$f.md"; done. Een andere optie is alles in een ZIP-bestand te zetten en het archief op te geven: het programma verwerkt de inhoud, maar bestanden die niet kunnen worden geparseerd verdwijnen zonder waarschuwing.

Waarin verschilt de uitvoer van het handmatig kopiëren van de tekst?

De structuur blijft behouden. Kopiëren levert platte tekst op waarin een kop niet van een alinea te onderscheiden is en een tabel uit elkaar valt. MarkItDown behoudt koppen, lijsten en tabellen, zodat het model kan zien wat wat is. Voor één kort document is het verschil klein, maar bij twintig documenten is het doorslaggevend.

Kan MarkItDown met een wachtwoord beveiligde documenten openen?

Nee. Een met een wachtwoord beveiligd bestand gaat niet open en je kunt het wachtwoord niet aan het programma doorgeven. Je moet de beveiliging vooraf verwijderen in de toepassing die deze heeft ingesteld.

Maak kennis met Ailoot wanneer je er klaar voor bent.

Meer details

Vragen en antwoorden

Kan ik een puntkomma-CSV herstellen door elke puntkomma door een komma te vervangen?

Nee. Tekst tussen aanhalingstekens en decimale notaties kunnen die tekens bevatten. Exporteer opnieuw met het bedoelde scheidingsteken of gebruik een CSV-parser en -schrijver met expliciete scheiding, codering en aanhalingstekens; controleer kolommen, rijen en controletotalen tegen het origineel.

Betekent exitcode nul dat een PDF bruikbaar is geconverteerd?

Nee. Het scanvoorbeeld in het artikel gaf zonder fout lege uitvoer en een complexe PDF leverde onleesbare tekst op. Open het resultaat, controleer lengte en structuur en gebruik een lay-out- of herkenningstool wanneer de geëxtraheerde tekst leeg of onleesbaar is.

Alle artikelen