PDF Text & Table Extractor: OCR, DOCX, PPTX, XLSX to Data + RAG avatar

PDF Text & Table Extractor: OCR, DOCX, PPTX, XLSX to Data + RAG

Pricing

Pay per event

Go to Apify Store
PDF Text & Table Extractor: OCR, DOCX, PPTX, XLSX to Data + RAG

PDF Text & Table Extractor: OCR, DOCX, PPTX, XLSX to Data + RAG

Extract text from PDF, DOCX, PPTX, HTML, TXT, MD and EML by URL. One document in, hundreds of rows out: typed elements (titles, paragraphs, lists, tables), RAG-ready chunks and a per-document summary. Unofficial wrapper around unstructured (Apache-2.0).

Pricing

Pay per event

Rating

0.0

(0)

Developer

daehwan kim

daehwan kim

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

6 days ago

Last modified

Share

PDF Text & Table Extractor — OCR, DOCX, PPTX, XLSX to Structured Data + RAG Chunks

Turn any document URL into clean, structured data. Give this Actor one or more public document URLs — PDF, DOCX, PPTX, XLSX/XLS, CSV/TSV, HTML, TXT, Markdown, EML, or PNG/JPG/TIFF/BMP images — and it returns a flat dataset of typed elements (titles, paragraphs, list items, tables and one row per table row), RAG-ready text chunks and one summary row per document with a one-line verdict. Scanned PDFs are OCR'd automatically (Tesseract) when no text layer is found, and image URLs are read with OCR directly. No manual copy-paste, no file uploads: paste URLs, get rows.

Powered by unstructured (Apache-2.0), the open-source document-parsing engine with 15,000+ GitHub stars that backs many production RAG pipelines. This is an unofficial wrapper; see the disclaimer below.

What does PDF Text Extractor do?

For every document URL you provide, three kinds of rows are produced:

Row typeWhat it isTypical volume
document-summaryOne row per document: headline verdict, verdict code, page/sheet count, word count, element counts by type, table and table-row counts, languages, strategy used1 per document
chunkText chunks sized for embedding into a vector DB — RAG-ready. Four modes: title (section-aware), basic, page, document10–60 per document
elementOptional (off by default): one row per structural element — Title, NarrativeText, ListItem, Table (with HTML), plus one TableRow per data row of every table with header, cells and a record object100–1,000 per document

Measured volumes (elements on): a 15-page research paper → 423 rows; a 700-row spreadsheet → 749 rows (1 summary + 47 chunks + 1 table + 700 table rows); a 5-table DOCX → 120 rows.

Element types

Title, NarrativeText, ListItem, Table, TableRow, UncategorizedText, Header, Footer, Image, Address, EmailAddress, PageBreak and the other categories unstructured emits. Table rows keep their structure as textAsHtml; TableRow rows hang off their table via parentId and carry rowIndex, header, cells and record (header → cell). Spreadsheet rows also carry sheetName.

Verdict layer

Every document-summary row includes a headline a human can read at a glance and a verdict code you can filter on:

verdictMeaning
structured-textText with 3+ sections (headings) — good RAG material
textPlain running text
table-heavyMostly tabular data (spreadsheets, financial tables) — use the TableRow elements
scanned-ocrNo text layer; content came from OCR — check accuracy
sparseFewer than 150 words extracted
emptyNothing extractable

Example: XLSX, 1 sheet — 1 table, 700 data rows, 12,490 words; 47 RAG chunks (eng).

Why use it?

  • RAG pipelines — skip the preprocessing step: URLs in, embedding-ready chunks out, on a schedule, via API.
  • Spreadsheets & financial tables — XLSX/CSV sheets and PDF/DOCX tables become one record per row, ready for a database.
  • Research & analysis — batch-convert reports, papers and filings into rows you can filter in Excel or a database.
  • Content workflows — pull structured text out of decks (PPTX), articles (HTML) and docs (DOCX) with one tool instead of five.
  • Apify platform — run on a schedule, call via API, pipe results into any integration, download as JSON/CSV/Excel.

How to use it

  1. Open the Input tab.
  2. Paste one or more document URLs (up to 50 per run). Links without a file extension (download links) are fine — the file type is detected from its contents.
  3. Optionally pick a parsing strategy and chunking mode, toggle element rows, and set the chunk size.
  4. Click Start. Download the dataset as JSON, CSV, Excel or HTML, or read it via the API.

Input example

{
"documentUrls": [
"https://arxiv.org/pdf/1706.03762",
"https://example.com/report.docx",
"https://example.com/sales.xlsx"
],
"strategy": "auto",
"chunkBy": "title",
"includeChunks": true,
"includeElements": true,
"chunkMaxChars": 1800,
"maxResults": 500
}

API callers may send the URL list as fileUrls instead of documentUrls; both are accepted.

Input options

FieldValuesNotes
strategyauto (default), fast, ocr_onlyauto reads the text layer and falls back to OCR for scans; fast never OCRs; ocr_only forces OCR. hi_res layout detection is not bundled (it would download models at run time) and is treated as auto with a notice row.
chunkBytitle (default), basic, page, documenttitle never crosses a heading; page gives one or more chunks per page (per sheet for spreadsheets); document splits only by size.
includeElementsbooleanElement rows (on by default, high volume). Set false for chunks + summaries only.
expandTableRowsboolean (default true)With elements on, adds one TableRow per data row of every table.
enableOcr, ocrLanguagesboolean, ["eng","kor"]OCR settings.

Output example

{
"rowType": "element",
"sourceUrl": "https://example.com/sales.xlsx",
"fileType": "xlsx",
"elementIndex": 2,
"elementType": "TableRow",
"text": "2121 | 456 | Jane | 2011 | 842",
"pageNumber": 1,
"sheetName": "Sheet1",
"rowIndex": 1,
"header": ["Postcode", "Sales_Rep_ID", "Sales_Rep_Name", "Year", "Value"],
"cells": ["2121", "456", "Jane", "2011", "842"],
"record": { "Postcode": "2121", "Sales_Rep_ID": "456", "Sales_Rep_Name": "Jane", "Year": "2011", "Value": "842" },
"parentId": "dde9d41a…"
}

Pricing

Four charge events:

EventWhen it is charged
Run startOnce per run, when the run starts
Document summaryPer delivered document-summary row (one per parsed document)
RAG chunkPer delivered chunk row
Structured elementPer delivered element row, including TableRow rows (on by default; off when includeElements is false)

Typical run cost (measured on a 15-page research paper):

ScenarioRowsWhat you pay
1 paper, default settings (summary + chunks)~30≈ $0.32 (1 start + 1 summary + 29 chunks)
1 paper with includeElements on~423≈ $0.52 (adds 393 element rows)
1 spreadsheet, 700 rows, includeElements on~749≈ $0.85 (1 start + 1 summary + 47 chunks + 701 element rows)

Control your spend with:

  • maxResults — a hard cost ceiling per run (default 500 rows),
  • includeElements / includeChunks / expandTableRows — pick the row types you need,
  • the run's maximum charge limit in Run options.

Fetch status and quality information (HTTP status, page counts, word counts, verdict, truncation flags) are provided as data fields so you can judge every row yourself.

Free plan: runs parse up to 3 documents and return up to 25 rows per run — prioritised so you get the document summaries and RAG chunks first, then sample elements.

OCR (scanned PDFs & images)

  • Scanned/image-only PDFs: when a PDF has no text layer, the Actor automatically re-reads it with OCR (Tesseract, built into the image — nothing downloads at runtime). The document's summary row carries "ocrApplied": true and "verdict": "scanned-ocr" so you can tell OCR'd text apart.
  • Image URLs (PNG, JPG, TIFF, BMP) are always read with OCR — paste a receipt or screenshot URL and get its text as rows.
  • Languages: English (eng, default) and Korean (kor) — set "ocrLanguages": ["eng", "kor"]. Other codes are ignored.
  • Turn OCR off entirely with "enableOcr": false or "strategy": "fast".
  • OCR rows are ordinary result rows — they are charged under the same events as any other row (no OCR surcharge).

Limitations

  • OCR accuracy depends on scan quality; OCR output has no styling-based structure, so most OCR'd text arrives as paragraph elements.
  • hi_res layout detection (model-based table and figure detection inside scanned PDFs) is not bundled; tables inside scanned PDFs arrive as OCR text.
  • Legacy binary formats (.doc, .ppt) are not supported — convert them to DOCX/PPTX first. Legacy .xls is supported.
  • Very large tables are expanded to at most 2,000 TableRow elements each; the full table is still present as HTML on its Table element (truncated at 5,000 characters) and in the chunks.
  • Files are fetched by URL (up to 50 MB each); there is no direct file upload.
  • Only publicly accessible URLs — documents behind logins cannot be fetched.

FAQ & disclaimers

Is this the official unstructured Actor? No. This is an unofficial wrapper around the open-source unstructured library (Apache-2.0). This Actor is not affiliated with, endorsed by, or sponsored by Unstructured Technologies, Inc. All trademarks belong to their respective owners.

Legal — you are responsible for having the right to access and process the documents you submit, for complying with each source's Terms of Service and applicable copyright law, and you act as the data controller for any personal data contained in the documents you process.

Found a bug or need a feature? Open an issue on the Issues tab — it is checked regularly.