Digital PDF to Markdown — Ruled Tables & Page Citations
Pricing
$1.00 / 1,000 processing units
Digital PDF to Markdown — Ruled Tables & Page Citations
Extract text and page-local ruled tables from authorized digital PDFs without personal data. Optional page-cited chunks. No OCR or cross-page table merging.
Pricing
$1.00 / 1,000 processing units
Rating
0.0
(0)
Developer
Cristian Blanco
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Extract text and page-local ruled table segments from authorized digital PDFs. Optional character-based chunks include their source page numbers. No OCR.
Accepted documents
Public HTTP(S) PDFs with a text layer: product manuals, technical specifications, instructions, or synthetic examples, without personal or sensitive data. You must be authorized to process every file and explicitly confirm this scope. Do not submit invoices, statements, health/legal records, personal-finance documents, personal data, private/signed URLs, or documents requiring authentication. The Actor is not a personal-data detector; the confirmation does not inspect the file.
Output
One dataset item per converted or rejected PDF, in input order. If the spending or run-time limit stops the batch, remaining documents have no dataset item; see the run status and PILOT_PROGRESS in the run key-value store.
- status: ok, rejected, or error.
- document_id and url identify the input.
- markdown contains markers.
- tables contains page, bbox and rows for every ruled table segment.
- tables_found counts segments, not merged logical tables.
- chunks contains text and exact source pages.
- pages_without_text lists skipped pages. Blank pages and pages without extractable text are skipped; this is not a scan classifier.
- processing_units is the expected billable unit count; zero for rejections.
Tables on different pages are never automatically merged, even if their headings match. In Markdown, the first row of each segment is rendered as its header; table rows are also supplied as JSON without inferring a semantic header.
Limitations
- Ruled tables only. Borderless tables remain plain text; row/column structure is not promised.
- No reliable reconstruction of merged cells or arbitrary reading order.
- Two-column reading order is heuristic. No visual or semantic guarantee.
- Large blocks can be split by the chunk character limit.
- Synthetic test results are regression evidence, not real-world accuracy claims.
Price
Configure one event: processing-unit, $0.001 per unit at the base price.
A successful document uses 5 document units + 1 unit per processed text page. For example, 10 processed pages use 15 units = $0.015 at the base price. Check the actual Store price and any plan discounts before running.
Rejected documents, failed downloads, wholly textless PDFs and skipped textless pages have no processing-unit charge. The document's complete required unit count is checked against the remaining spending limit before saving its output.
Apify's billing and dataset writes are separate operations. Output is saved before billing so you can access it if the run stops. A platform/network interruption between these operations can leave accessible output incompletely billed. The Actor stops on an unexpected receipt and never retries that run's work or billing after resurrection. Existing results remain available.
All other events, including automatic start/dataset events, must be disabled or priced at zero. Platform subscription charges are separate from this event price.
Input
{"pdfUrls": ["https://example.com/authorized-technical-manual.pdf"],"confirmNoPersonalData": true,"maxPagesPerDocument": 150,"chunkSize": 1500}
Replace the example URL with an authorized public PDF.
Limits
- 1–10 URLs per run; HTTP 80 or HTTPS 443 only.
- 50 MiB per PDF, 150 pages by default, maximum 200.
- 60 seconds per document including download and parsing.
- 240 seconds for document processing per batch, excluding platform startup, storage and billing requests.
- Linux subprocess address-space limit: 768 MiB; output JSON maximum 6 MiB.
- chunkSize: 0 or 200–20,000 characters.
- Encrypted PDFs and OCR are unsupported.
- Private networks, credentials, unsupported URL schemes, HTTP compression and HTTPS-to-HTTP redirects are rejected.
Data handling
The PDF bytes are processed in a bounded subprocess and are not intentionally saved as a source file by this code. The input (including URLs), converted content, run records and outputs can be retained by Apify in the run's dataset and key-value store according to the account settings. Finishing a run is not immediate deletion. Named storage may be kept indefinitely. Manage access and retention in Apify Console.
No document text or full URLs are intentionally written to application logs. Platform-generated logs and metadata follow Apify's behavior. The operator must not describe this service as zero-retention or certified free of personal data.
Local use
Python 3.12 is the tested environment. No Apify account is needed:
python -m pip install -r requirements-dev.txtpython -m unittest discover -s tests -p test_regressions.py -vpython -m src.local path/to/authorized.pdf --chunks 1500
The local command does not bill anyone. See piloto/PILOTO.md for deployment and the remaining cloud check.