PDF & Document to Markdown – OCR + Tables
Pricing
from $12.00 / 1,000 ocr pages
PDF & Document to Markdown – OCR + Tables
Convert PDFs, DOCX and images to clean Markdown with OCR fallback for scanned pages and table extraction. Per-page output plus a combined document. By NYC Data Works.
Pricing
from $12.00 / 1,000 ocr pages
Rating
0.0
(0)
Developer
Levani Zurabiani
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Categories: AI, Developer tools
By NYC Data Works. Convert PDFs, Word (DOCX) files and images into clean, RAG-ready Markdown.
What it does
- Text-layer PDFs: extracts text page by page (pdfplumber).
- Scanned pages: automatic OCR fallback with Tesseract (open source, runs inside the container, no external API).
- Tables: detected tables are rendered as Markdown tables and removed from the running text to avoid duplication.
- DOCX: headings, list items and tables converted to Markdown.
- Images (PNG/JPG/TIFF, multi-page TIFF): OCR to text.
- Output: one dataset item per page (optional) + one combined
documentitem per file; the full combined Markdown is also saved in the key-value store asdoc-N.md.
Input
| Field | Description |
|---|---|
sources | URLs of files you have the right to process |
ocrMode | auto (OCR only pages with almost no text), always, never |
ocrMinChars | auto-OCR threshold, default 10 |
extractTables | default true |
maxPages | per-document cap (default 200, max 2,000) |
perPageOutput | push per-page items (default true) |
Output example
{"url":"https://.../file.pdf","type":"page","fileType":"pdf","page":1,"markdown":"# Title...\n\n| a | b |\n|---|---|","ocr":false,"tables":1,"chars":1834}
FAQ
Which languages does OCR support? English (eng) only in this build. More languages can be added on request.
How accurate is the table extraction? Good for ruled/grid tables in digital PDFs. Tables in scanned pages come out as plain OCR text, not Markdown tables. Borderless tables may be merged into text.
Is my file sent anywhere? No. All processing happens inside the Apify run; no third-party APIs.
Max file size? 100 MB per file (checked before download); use maxPages to limit cost on big PDFs.
Is DOC/PPTX/XLSX supported? Not yet; PDF, DOCX and images only.
How fast is OCR? Roughly 1–3 s per page at 1 GB memory.
Can I upload a local file? Upload it to an Apify key-value store (or any public URL) and paste the URL.
Limits
- Scanned-page OCR quality depends on scan resolution; handwriting is not supported.
- Complex multi-column layouts may read out of order.
- Encrypted/password-protected PDFs fail with an error item.
Safety limits
- Max 100 sources per run;
maxPagesup to 2,000 per document (also applied to multi-page TIFF frames). - 100 MB per file (checked before download). DOCX files are checked for zip bombs (unpacked size ≤ 200 MB, compression-ratio limit) before parsing.
- Rendered OCR pages are capped at 40 megapixels; Pillow's pixel limit is set to 50 MP.
- OCR language is fixed to
eng(the only installed language). Auto-OCR threshold default: 10 characters, so pages with a text layer are billed astext-page, notocr-page. - OCR time limit: 60 s per page (Tesseract is stopped and the page counts as failed). Default run timeout: 3,600 s.
- Page errors: if a page fails (OCR timeout, oversized TIFF frame, corrupt page), processing of that document stops at that page; the pages already processed (and paid for) are still saved in
doc-N.mdand the document item, with anerrornote. Such a partial document is not chargeddocument-processed.
Security
- Only public
http(s)URLs are fetched. Every URL and every redirect hop (max 5) is resolved and rejected if it points to a private, loopback, link-local (incl. the169.254.169.254cloud-metadata address), multicast or reserved address; other schemes (file:,ftp:…) are refused. The connection is pinned to the checked IP. - Size limits are checked from
Content-Lengthbefore downloading and enforced again while streaming, with an overall per-file deadline. - Query strings and credentials in URLs are stripped from logs, dataset items and
SUMMARY.
Spending limit
Events are charged as work proceeds; each page is charged before it is delivered. When your Max cost per run is reached the actor stops cleanly and keeps everything already delivered; nothing beyond the limit is charged. document-processed is charged only for a document with at least one delivered page: if the limit stops the run before a document's first page, that document gets an error item and is not charged.
Data retention & consent
- Retention: results are stored only in this run's own default dataset and key-value store, and are kept under Apify's standard storage retention for your plan (unnamed run storages are deleted automatically after the retention period). Nothing is copied elsewhere; no third-party API is called.
- Your responsibility: you must have the rights to the content you submit and, where it contains personal data, a lawful basis and any required consent (e.g. under GDPR/CCPA). Do not submit data you are not allowed to process.
Credits & licences
- Tesseract OCR – Apache-2.0 (via pytesseract – Apache-2.0)
- pdfplumber – MIT (uses pdfminer.six – MIT)
- pypdfium2 – Apache-2.0 / BSD-3-Clause (PDFium – Apache-2.0/BSD)
- Pillow – MIT-CMU (HPND)
- python-docx – MIT
- httpx – BSD-3-Clause; Apify SDK for Python – Apache-2.0
Pricing
Pay-per-event – you pay only for what you process:
| Event | Price |
|---|---|
Actor start (actor-start) | $0.004 per run |
Document processed (document-processed) | $0.004 per file with at least one delivered page |
OCR page (ocr-page) | $0.012 per OCR'd page |
Text page (text-page) | $0.0005 per non-OCR page (text-layer PDF page or DOCX) |
Example: one scanned 3-page PDF costs $0.004 + $0.004 + 3 × $0.012 = $0.044. A 10-page digital PDF (no OCR) costs $0.004 + $0.004 + 10 × $0.0005 = $0.013.