AndriyVK Tools

15.11.2026

Ukrainian scans, invoices, Word and Excel to Markdown - 5 Apify Actors on 7 files, only one got every table right

Five document-to-Markdown Actors from the Apify Store on the same seven Ukrainian files - text PDF, clean and noisy scans, DOCX, XLSX and scanned invoices without table lines. Empty scans, changed prices, lost tables - and the one Actor that got every file right at the lowest price per scanned page.

Search the Apify Store for "PDF to Markdown" and you get dozens of Actors with almost the same promise: text, tables, OCR, ready for RAG. None of them tells you what happens with a Ukrainian scan, an Excel file or a scanned invoice whose table has no lines. So I ran five of them on the same seven files and compared every output with the text the files were made from. All results below are from real runs on 15 November 2026.

Disclosure: one of the five is mine, Document to Markdown for AI. Every number below comes from a real run, the test files are public and the raw outputs are kept, so you can repeat and check all of it.

Short answer

Files right (of 7) Invoice without lines: rows exact Reads Word and Excel Price per scanned page
ai_admin/document-to-markdown 7 5 of 5 yes $0.004
nidamindllc/doc-ocr 2 4 of 5 no (error) $0.004
lergassy/pdf-text-extractor 1 0 yes $0.0111
fabrikit/document-to-markdown 2 0 yes $0.0105
gochujang/pdf-text-extractor 1 0 (empty) no (PDF only) $0.006

"Right" means the text, the heading and the table with the correct rows and with every number exactly as in the document.

The seven files

All Ukrainian, all generated from known text, so every character can be checked:

File What it is
text-uk.pdf PDF with a text layer: heading, two sentences, a 3 x 3 table with prices like 96,50
scan-uk.pdf the same page as a clean scan
scan-noisy-uk.pdf the same scan with noise and a slight tilt
doc-uk.docx Word document with the text, a list and the table
sheet-uk.xlsx Excel workbook: the table with a Total row 1,234.50, and a sheet with the sentences
scan-borderless-uk.pdf a scanned invoice: 5 x 6 table without any lines, amounts like 40 530,00 and 2 500
scan-noisy-borderless-uk.pdf the same invoice, noisy and tilted

The last two are the hard case and the most common one: most invoices, waybills and bank statements are printed without table lines. The files are public: https://api.apify.com/v2/key-value-stores/FloomuI2DrQCJazY8/records/<file name>.

The Actors are the most used ones for this search plus one that lists Office formats. Settings: Ukrainian OCR wherever the Actor has a language option (ukr); nidamindllc has no language option.

Results, file by file

File mine nidamindllc lergassy fabrikit gochujang
Text PDF right one OCR typo, table right (HTML) table flattened into the text table as plain lines right
Clean scan right right (HTML table) table as broken lines table lost empty
Noisy scan right right (HTML table) table as broken lines rows without header empty
DOCX right error right right not supported
XLSX right, 1,234.50 kept error 1,234.50 became 1234.5 right not supported
Invoice, no lines 5/5 rows, 30/30 cells 4/5 rows, 29/30 cells no table, 40 530,00 lost its space no table, all in one line, 96,50 read as 96,0 empty
Invoice, no lines, noisy 5/5 rows, 30/30 cells 4/5 rows, 29/30 cells no table, 96,50 read as 96,60 no table, all in one line empty

This is what my Actor returned for the noisy invoice without lines - every cell, every number and the № sign as in the document:

Рахунок-фактура № 47

Постачальник: ТОВ «Будмайстер», м. Львів. Покупець: ФОП Коваленко О. В. Оплата протягом п'яти банківських днів з дати рахунку.

| № | Товар | Од. | Кількість | Ціна | Сума |
| --- | --- | --- | --- | --- | --- |
| 1 | Цемент М500 | мішок | 420 | 96,50 | 40 530,00 |
| 2 | Арматура 12 мм | шт. | 180 | 412,00 | 74 160,00 |
| 3 | Пісок річковий | т | 12 | 650,00 | 7 800,00 |
| 4 | Цегла рядова | шт. | 2 500 | 9,80 | 24 500,00 |

Разом: 146 990,00 грн

The same table also comes as rows of cells in the tables field, ready for a spreadsheet or a database, and the record says how many pages went through OCR, so a pipeline knows which text came from a scan.

For comparison, the same line of the invoice from two other Actors:

lergassy:  1 | Цемент М500 мішок 420 96,60 40530,00
fabrikit:  ... Мо Товар Од. Кількість Ціна Сума 1 Цемент М500 мішок 420 96,50 40 530,00 2 Арматура12мм шт. ...

What stood out

What it cost

All five Actors charge per event. For a scanned page:

Actor One scanned page Text page or Office file
mine $0.004 $0.001
nidamindllc $0.004 $0.004 (OCRs everything)
gochujang $0.006 $0.006 per one-page PDF
fabrikit $0.0105 $0.0005
lergassy $0.0111 $0.0031

My run of all seven files cost $0.019 and took 11 seconds.

About the test

While preparing this article, the test results showed me where my Actor could become the best in its category - noisy scans and invoices without table lines - so I improved it right away, before publishing. The latest runs described above confirm it.

Try it

From Python:

from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("ai_admin/document-to-markdown").call(run_input={
    "sources": [{"url": "https://api.apify.com/v2/key-value-stores/FloomuI2DrQCJazY8/records/scan-noisy-borderless-uk.pdf"}],
    "ocrLanguages": ["ukr"],
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["markdown"])
    print(item["tables"])

Or give it to Claude, Cursor or another AI agent as an MCP tool - see MCP server for document and media tools.