If you parse documents for search or RAG, you parse every page you index. The layout APIs from Azure, Google and AWS charge $5 to $15 per 1,000 pages for that, so a 10-million-page archive costs $50,000 to $150,000 to parse once.
Datalab’s lite mode costs $0.50 per 1,000 pages. That 10-million-page archive costs $5,000. Each page comes back with its text, tables, headings, lists and reading order, and a layout box for every block.
Compared with Azure’s layout API, lite is:
- 2x faster on long documents. A 50-page PDF takes 4.9 seconds, against 12.0 seconds for Azure.
- 10x cheaper, and 20x to 30x cheaper than Google Document AI and AWS Textract.
- Nearly as accurate: 78.2 overall, against 80.8 for Azure. Lite scores higher than Textract (71.9) and Google (65.1).
The free plan includes up to 40,000 lite pages a month on a work email. You don’t need a card.
What you get back
Lite labels each block on the page: headings, paragraphs, lists, tables, headers and footers. Each block has a layout box, and the blocks come back in reading order. Tables keep their rows and columns. One request can return markdown, JSON and chunks for retrieval.
This is lite’s output on a page from a Berkshire Hathaway annual report:
With the boxes, you can link an answer to the spot on the page it came from. Because the table keeps its structure, a RAG pipeline can retrieve a row together with its column headers.
The same request works on a scanned Korean letter:
Price
Lite is $0.50 per 1,000 pages, with no tiers and no minimums. The cloud layout APIs list at $5 to $15:
| Service | Per 1,000 pages | Per million pages |
|---|---|---|
| Datalab lite | $0.50 | $500 |
| Azure Content Understanding, layout | $5.00 | $5,000 |
| Google Document AI, Layout Parser | $10.00 | $10,000 |
| AWS Textract, AnalyzeDocument (Tables + Layout) | $15.00 | $15,000 |
At $500 per million pages, you can parse a whole archive. When you change your chunking or your schema, you can parse it again.
Sources: Datalab pricing, Azure retail prices (East US, Content Understanding async Standard content extraction), Google Document AI pricing and AWS Textract pricing (us-east-1, first million pages a month). List prices, before free tiers, commitments and taxes. The text-only OCR APIs from each cloud cost less, but return no tables or layout.
Accuracy
We ran lite and the three cloud APIs on OmniParseBench, our document parsing benchmark. To keep the comparison fair, we left out every math test for every system. That leaves 12,972 tests on 2,502 pages.
| Parser | Price / 1,000 pages | Overall | Text | Tables | Layout |
|---|---|---|---|---|---|
| Datalab lite | $0.50 | 78.2 | 69.5 | 74.2 | 90.7 |
| Azure Content Understanding, layout | $5.00 | 80.8 | 68.0 | 81.7 | 92.8 |
| AWS Textract, Tables + Layout | $15.00 | 71.9 | 57.6 | 75.8 | 82.2 |
| Google Document AI, Layout Parser v1.0 | $10.00 | 65.1 | 70.0 | 43.9 | 81.2 |
Lite scores less than 3 points below Azure overall, at a tenth of the price. On text, lite scores higher than Azure and Textract, and 0.5 points below Google. On tables, lite scores 74.2: 30 points above Google’s Layout Parser and 1.6 below Textract. Azure scores higher on tables and layout.
Multilingual documents
Most of the benchmark is English, so the average can hide a parser that fails on other scripts. OmniParseBench has 897 text tests in non-Latin scripts:
Textract passes 2.5% of these tests, and Azure passes 33.9%. Lite passes 88% or more of the tests in Armenian, Ethiopic, Hebrew, Kannada, Lao and Telugu:
If your documents come in many languages, you can send all of them to the same API.
Speed
We sent five PDFs, cut to each length, to lite and to Azure Layout. We ran four requests at a time and timed each request end to end:
| Document length | Lite | Azure layout |
|---|---|---|
| 1 page | 2.1 s | 3.0 s |
| 5 pages | 2.8 s | 4.3 s |
| 10 pages | 3.4 s | 4.8 s |
| 25 pages | 3.7 s | 7.5 s |
| 50 pages | 4.9 s | 12.0 s |
Lite is faster at every length. At 50 pages, it takes 4.9 seconds against Azure’s 12.0, so you can parse a long upload while the user waits.
What to build with it
Backfills are the first use. A million pages costs $500, so you can parse an archive and parse it again when your pipeline changes.
Search and RAG come next. Headings and tables give you better chunks, and the boxes let you cite the page.
Lite also fits inside a product. A 10-page document comes back in 3.4 seconds, so you can parse each upload before you route or extract from it.
Some documents need a stronger mode. Lite can lose the structure of tables with merged cells. It reads handwriting and degraded scans less accurately, and it doesn’t extract images. For these documents, use our fast, balanced or accurate modes.
Get started
Create an account, get an API key, and set mode to lite:
import os
import time
import requests
headers = {"X-Api-Key": os.environ["DATALAB_API_KEY"]}
with open("document.pdf", "rb") as document:
response = requests.post(
"https://www.datalab.to/api/v1/convert",
headers=headers,
files={"file": ("document.pdf", document, "application/pdf")},
data={"mode": "lite", "output_format": "markdown,json,chunks"},
timeout=60,
)
response.raise_for_status()
submission = response.json()
if not submission.get("success", False):
raise RuntimeError(submission.get("error", submission))
for _ in range(300):
response = requests.get(
submission["request_check_url"], headers=headers, timeout=60
)
response.raise_for_status()
result = response.json()
if result.get("status") in {"error", "failed"}:
raise RuntimeError(result.get("error", result))
if result.get("status") == "complete":
if not result.get("success", False):
raise RuntimeError(result.get("error", result))
if result.get("result_url"):
download = requests.get(result["result_url"], timeout=60)
download.raise_for_status()
result = download.json()
print(result["markdown"])
break
time.sleep(2)
else:
raise TimeoutError("Conversion did not complete during polling") The free plan includes $20 of usage a month on a work email, or $10 on a personal email, with no card. On lite alone, that’s 40,000 or 20,000 pages a month. Other modes use the same allowance, which resets each month. See pricing.
If you have a large backfill, tell us about it.
Method
We used OmniParseBench dataset snapshot 961c0f89a2da701f5ce53afbd5e80aa469b0369a and scorer 1.0.0rc1+49f0c983509e. The snapshot has 16,288 tests on 2,937 pages. We left out the 3,316 tests tagged math for every system, and kept the other tests on those pages. That leaves 12,972 tests on 2,502 pages: 5,228 text, 5,382 table and 2,362 layout tests. The overall score is the mean of the text, table and layout scores, which is the benchmark’s headline number.
Lite is the production API with mode=lite, run on October 25, 2026. Azure is Content Understanding prebuilt-layout. Its results were saved on September 30 and October 6, 2026, and we rescored them with the same scorer. Textract is AnalyzeDocument with TABLES and LAYOUT in us-east-1. We converted 17 image files that Textract doesn’t accept to PNG, without loss. The 15 pages that Textract rejected count as failures. Google is the generally available Layout Parser, pretrained-layout-parser-v1.0-2024-06-03, in us, with images wrapped as PDFs without loss.
The non-Latin group holds the present, order and repeat tests with an ISO 15924 script tag other than Latn. Each test counts once.
For speed, we used the first 1, 5, 10, 25 and 50 pages of five public arXiv PDFs. We ran four requests at a time from one client, and polled every 0.5 seconds. Azure ran on October 22, 2026, and lite on October 25, 2026. All 25 requests per system succeeded.
We build OmniParseBench. These scores apply to this benchmark and these versions.
Download the full results without math, with every tag and source suite.
Appendix: full results
All scores are the share of tests passed, without math. The category, script and language tables use text and table tests. Tags overlap, and many groups are small, so one test can move a score several points.
Document categories
| Category | Tests | Lite | Azure | Textract | |
|---|---|---|---|---|---|
| table | 6155 | 75.1 | 81.5 | 75.8 | 47.4 |
| multi_column | 2561 | 68.9 | 75.2 | 66.7 | 61.2 |
| form | 1012 | 62.5 | 82.0 | 71.3 | 74.0 |
| handwriting | 833 | 28.1 | 36.0 | 33.0 | 32.5 |
| rotated | 761 | 60.7 | 78.8 | 66.2 | 37.8 |
| list | 749 | 79.7 | 77.6 | 61.3 | 83.4 |
| tiny | 746 | 77.3 | 87.7 | 70.8 | 81.6 |
| degraded | 459 | 36.6 | 54.5 | 50.1 | 56.4 |
| heading | 369 | 72.4 | 62.6 | 47.7 | 52.3 |
| header_footer | 226 | 60.6 | 73.5 | 62.4 | 68.6 |
| footnote | 101 | 70.3 | 80.2 | 66.3 | 79.2 |
| figure | 68 | 79.4 | 58.8 | 75.0 | 60.3 |
| caption | 66 | 74.2 | 75.8 | 60.6 | 65.2 |
| code | 11 | 9.1 | 81.8 | 54.5 | 9.1 |
Scripts (ISO 15924)
| Script | Tests | Lite | Azure | Textract | |
|---|---|---|---|---|---|
| Arab | 13 | 69.2 | 61.5 | 0.0 | 76.9 |
| Armn | 60 | 100.0 | 0.0 | 0.0 | 48.3 |
| Beng | 40 | 82.5 | 0.0 | 0.0 | 97.5 |
| Cans | 8 | 0.0 | 0.0 | 0.0 | 0.0 |
| Cher | 1 | 100.0 | 0.0 | 0.0 | 100.0 |
| Copt | 19 | 52.6 | 0.0 | 0.0 | 0.0 |
| Cyrl | 74 | 74.3 | 66.2 | 13.5 | 59.5 |
| Deva | 23 | 78.3 | 87.0 | 0.0 | 87.0 |
| Ethi | 43 | 100.0 | 0.0 | 0.0 | 95.3 |
| Geor | 14 | 100.0 | 0.0 | 0.0 | 100.0 |
| Grek | 103 | 56.3 | 58.3 | 23.3 | 45.6 |
| Gujr | 15 | 66.7 | 0.0 | 0.0 | 80.0 |
| Guru | 31 | 71.0 | 0.0 | 0.0 | 74.2 |
| Hang | 24 | 87.5 | 95.8 | 0.0 | 87.5 |
| Hani | 136 | 65.4 | 74.3 | 0.0 | 65.4 |
| Hebr | 30 | 90.0 | 40.0 | 0.0 | 60.0 |
| Hira | 19 | 52.6 | 21.1 | 0.0 | 84.2 |
| Hmng | 4 | 0.0 | 0.0 | 0.0 | 0.0 |
| Kali | 11 | 45.5 | 0.0 | 0.0 | 0.0 |
| Kana | 6 | 66.7 | 0.0 | 0.0 | 100.0 |
| Khmr | 34 | 67.6 | 0.0 | 0.0 | 94.1 |
| Knda | 48 | 97.9 | 0.0 | 0.0 | 97.9 |
| Laoo | 52 | 88.5 | 0.0 | 0.0 | 69.2 |
| Latn | 9402 | 70.2 | 77.7 | 70.5 | 54.1 |
| Lisu | 1 | 100.0 | 0.0 | 0.0 | 0.0 |
| Mlym | 40 | 67.5 | 0.0 | 0.0 | 95.0 |
| Mtei | 9 | 33.3 | 0.0 | 0.0 | 0.0 |
| Mymr | 4 | 50.0 | 0.0 | 0.0 | 50.0 |
| Olck | 4 | 50.0 | 0.0 | 0.0 | 0.0 |
| Orya | 2 | 0.0 | 0.0 | 0.0 | 100.0 |
| Syrc | 5 | 20.0 | 0.0 | 0.0 | 60.0 |
| Taml | 25 | 84.0 | 84.0 | 0.0 | 80.0 |
| Telu | 33 | 90.9 | 0.0 | 0.0 | 90.9 |
| Thai | 39 | 97.4 | 100.0 | 0.0 | 87.2 |
Languages (ISO 639-3)
| Language | Tests | Lite | Azure | Textract | |
|---|---|---|---|---|---|
| aai | 2 | 100.0 | 100.0 | 100.0 | 100.0 |
| aak | 10 | 50.0 | 0.0 | 0.0 | 0.0 |
| aau | 1 | 100.0 | 100.0 | 100.0 | 100.0 |
| aaz | 17 | 52.9 | 5.9 | 5.9 | 5.9 |
| afr | 12 | 0.0 | 8.3 | 25.0 | 33.3 |
| amh | 19 | 100.0 | 0.0 | 0.0 | 94.7 |
| ara | 4 | 50.0 | 0.0 | 0.0 | 50.0 |
| arb | 11 | 63.6 | 72.7 | 0.0 | 72.7 |
| arc | 1 | 100.0 | 0.0 | 0.0 | 0.0 |
| asm | 7 | 57.1 | 0.0 | 0.0 | 85.7 |
| bel | 7 | 100.0 | 100.0 | 28.6 | 42.9 |
| ben | 33 | 87.9 | 0.0 | 0.0 | 100.0 |
| bho | 7 | 85.7 | 100.0 | 0.0 | 100.0 |
| bzi | 13 | 100.0 | 100.0 | 0.0 | 69.2 |
| ces | 3 | 100.0 | 100.0 | 100.0 | 100.0 |
| chr | 1 | 100.0 | 0.0 | 0.0 | 100.0 |
| cmn | 109 | 69.7 | 82.6 | 0.0 | 66.1 |
| cop | 19 | 52.6 | 0.0 | 0.0 | 0.0 |
| dan | 3 | 100.0 | 66.7 | 33.3 | 100.0 |
| deu | 25 | 88.0 | 84.0 | 68.0 | 68.0 |
| ell | 12 | 25.0 | 100.0 | 0.0 | 100.0 |
| eng | 8434 | 71.0 | 79.0 | 73.3 | 53.2 |
| fin | 4 | 50.0 | 75.0 | 75.0 | 25.0 |
| fra | 208 | 33.7 | 61.5 | 34.1 | 47.1 |
| fro | 3 | 0.0 | 0.0 | 0.0 | 0.0 |
| grc | 18 | 50.0 | 0.0 | 0.0 | 100.0 |
| gsw | 7 | 0.0 | 0.0 | 0.0 | 0.0 |
| guj | 15 | 66.7 | 0.0 | 0.0 | 80.0 |
| hau | 23 | 87.0 | 34.8 | 30.4 | 30.4 |
| hbo | 16 | 93.8 | 0.0 | 0.0 | 50.0 |
| heb | 5 | 100.0 | 80.0 | 0.0 | 80.0 |
| hin | 3 | 0.0 | 100.0 | 0.0 | 33.3 |
| hrv | 1 | 0.0 | 0.0 | 0.0 | 0.0 |
| hun | 5 | 100.0 | 100.0 | 40.0 | 100.0 |
| hye | 40 | 100.0 | 0.0 | 0.0 | 22.5 |
| hyw | 20 | 100.0 | 0.0 | 0.0 | 100.0 |
| ike | 8 | 0.0 | 0.0 | 0.0 | 0.0 |
| ind | 29 | 62.1 | 82.8 | 79.3 | 82.8 |
| isl | 18 | 100.0 | 100.0 | 72.2 | 100.0 |
| ita | 10 | 80.0 | 80.0 | 90.0 | 90.0 |
| jpn | 20 | 55.0 | 25.0 | 0.0 | 85.0 |
| kan | 48 | 97.9 | 0.0 | 0.0 | 97.9 |
| kat | 14 | 100.0 | 0.0 | 0.0 | 100.0 |
| khm | 34 | 67.6 | 0.0 | 0.0 | 94.1 |
| kor | 24 | 87.5 | 95.8 | 0.0 | 87.5 |
| kyu | 7 | 28.6 | 0.0 | 0.0 | 0.0 |
| lao | 52 | 88.5 | 0.0 | 0.0 | 69.2 |
| lat | 1 | 100.0 | 100.0 | 100.0 | 100.0 |
| lim | 2 | 100.0 | 100.0 | 100.0 | 100.0 |
| lis | 1 | 100.0 | 0.0 | 0.0 | 0.0 |
| lit | 7 | 100.0 | 100.0 | 0.0 | 100.0 |
| mal | 40 | 67.5 | 0.0 | 0.0 | 95.0 |
| mar | 12 | 100.0 | 83.3 | 0.0 | 100.0 |
| mlt | 5 | 80.0 | 20.0 | 0.0 | 80.0 |
| mni | 9 | 33.3 | 0.0 | 0.0 | 0.0 |
| msa | 4 | 100.0 | 0.0 | 0.0 | 100.0 |
| mya | 4 | 50.0 | 0.0 | 0.0 | 50.0 |
| nld | 5 | 60.0 | 60.0 | 60.0 | 60.0 |
| nob | 1 | 100.0 | 100.0 | 100.0 | 0.0 |
| npi | 1 | 0.0 | 0.0 | 0.0 | 0.0 |
| ory | 2 | 0.0 | 0.0 | 0.0 | 100.0 |
| pan | 31 | 71.0 | 0.0 | 0.0 | 74.2 |
| pnt | 6 | 66.7 | 100.0 | 0.0 | 100.0 |
| pol | 23 | 82.6 | 87.0 | 69.6 | 78.3 |
| por | 13 | 69.2 | 92.3 | 61.5 | 69.2 |
| ron | 26 | 65.4 | 26.9 | 7.7 | 15.4 |
| rus | 53 | 67.9 | 62.3 | 13.2 | 60.4 |
| sat | 4 | 50.0 | 0.0 | 0.0 | 0.0 |
| spa | 72 | 66.7 | 84.7 | 75.0 | 70.8 |
| swe | 1 | 100.0 | 100.0 | 100.0 | 100.0 |
| syc | 5 | 20.0 | 0.0 | 0.0 | 60.0 |
| tam | 25 | 84.0 | 84.0 | 0.0 | 80.0 |
| tel | 33 | 90.9 | 0.0 | 0.0 | 90.9 |
| tha | 26 | 96.2 | 100.0 | 0.0 | 96.2 |
| tir | 24 | 100.0 | 0.0 | 0.0 | 95.8 |
| tur | 5 | 60.0 | 100.0 | 80.0 | 60.0 |
| ukr | 14 | 85.7 | 64.3 | 7.1 | 64.3 |
| vie | 26 | 80.8 | 96.2 | 0.0 | 76.9 |
| ydd | 10 | 80.0 | 80.0 | 0.0 | 60.0 |
| yor | 14 | 50.0 | 0.0 | 0.0 | 0.0 |
Test types and source suites
| Test type | Tests | Lite | Azure | Textract | |
|---|---|---|---|---|---|
| layout_kind | 2362 | 90.7 | 92.8 | 82.2 | 81.2 |
| present | 4004 | 70.6 | 68.3 | 59.0 | 71.4 |
| order | 1189 | 66.2 | 67.1 | 52.7 | 65.3 |
| repeat | 35 | 60.0 | 62.9 | 65.7 | 74.3 |
| table_cell | 5382 | 74.2 | 81.7 | 75.8 | 43.9 |
| Source suite | Tests | Lite | Azure | Textract | |
|---|---|---|---|---|---|
| docparsing_images | 297 | 77.8 | 88.9 | 73.7 | 77.1 |
| forms_documentcloud | 47 | 83.0 | 87.2 | 85.1 | 68.1 |
| forms_federal | 127 | 69.3 | 92.1 | 90.6 | 81.9 |
| forms_filled | 107 | 86.0 | 88.8 | 81.3 | 80.4 |
| frbench_handwriting | 84 | 10.7 | 60.7 | 29.8 | 28.6 |
| handwriting_samples | 324 | 18.8 | 22.8 | 11.1 | 19.4 |
| large_format | 57 | 66.7 | 84.2 | 73.7 | 71.9 |
| multiling_finepdfs | 676 | 84.3 | 49.0 | 28.3 | 71.4 |
| multilingual | 92 | 43.5 | 67.4 | 35.9 | 66.3 |
| olmo_arxiv_math | 411 | 98.8 | 99.5 | 96.8 | 92.7 |
| olmo_long_tiny_text | 237 | 81.9 | 94.9 | 77.2 | 89.5 |
| olmo_multi_column | 352 | 83.0 | 87.2 | 80.4 | 75.6 |
| olmo_old_scans | 395 | 28.6 | 36.2 | 32.2 | 34.2 |
| olmo_old_scans_math | 11 | 100.0 | 90.9 | 90.9 | 90.9 |
| olmo_table_tests | 710 | 78.0 | 81.4 | 87.2 | 62.1 |
| parsebench_docs | 293 | 88.1 | 86.7 | 85.0 | 80.9 |
| realdoc_pages | 445 | 78.0 | 87.4 | 76.2 | 83.1 |
| realdoc_pdfs | 256 | 72.7 | 86.7 | 75.8 | 75.4 |
| rotation_skew | 375 | 80.5 | 91.5 | 86.9 | 78.9 |
| synth_copies | 1880 | 74.7 | 69.4 | 56.1 | 70.4 |
| tables_derived | 5424 | 77.4 | 83.5 | 77.4 | 48.2 |
| tiny_plans | 372 | 90.6 | 94.4 | 71.2 | 92.2 |