Vendor memo JSON
- Input
- One-page PDF with title, one paragraph, and a Markdown-origin invoice table.
- Output
- JSON returned language, title, paragraphs, a tables array containing the pipe table, and page_number 1.
PDF to JSON uses AI Deep Read to describe the page as structured JSON with language, title, paragraphs, tables, and page number.
From real runs
| Element | Result | What happens |
|---|---|---|
| Language | Kept | The one-page vendor memo returned language en in the JSON output. |
| Title | Kept | Vendor credit memo was captured as the title field rather than mixed into the first paragraph. |
| Paragraphs | Kept | The explanatory sentence about IDs, dates, currency, and accounting negatives appeared in the paragraphs array. |
| Table | Changed | The invoice table was preserved as one Markdown pipe-table string inside the tables array, not as JSON row objects. |
| Accounting negative | Kept | The amount (19.95) remained in parentheses in JSON table Markdown instead of being normalized to -19.95. |
| Accents | Kept | Café Norte was represented with JSON escaping for the accented character and decodes back to the original name. |
| Page number | Kept | The JSON included page_number: 1 for the tested single-page PDF. |
The one-page vendor memo returned language en in the JSON output.
Vendor credit memo was captured as the title field rather than mixed into the first paragraph.
The explanatory sentence about IDs, dates, currency, and accounting negatives appeared in the paragraphs array.
The invoice table was preserved as one Markdown pipe-table string inside the tables array, not as JSON row objects.
The amount (19.95) remained in parentheses in JSON table Markdown instead of being normalized to -19.95.
Café Norte was represented with JSON escaping for the accented character and decodes back to the original name.
The JSON included page_number: 1 for the tested single-page PDF.
We converted our PDF sample (91 KB) with AI Deep Read under AI Deep Read on 2026-09-11. It took 5.9 s and produced a 757 B JSON file, 99% smaller than the input. The engine raised 1 warning, listed below.
Input · sample.pdf · 91 KB
PDF 1.4, 1 page, no text layer, 1 image object
Output · sample.json · 757 B
Object with 6 top-level keys: language, title, prepared_for, date, sections, signature
First lines of the output
{
"language": "en",
"title": "Feedback Atlas — Q3 activity trail",
"prepared_for": "Board of Directors",
"date": "12 Sep 2026",
"sections": [
{
"heading": "Headline numbers",
"table_markdown": "| Metric | Q2 | Q3 |\n|---|---:|---:|\n| ARR | $4.1M | $4.9M |\n| Net revenue retention | 108% | 113% |\n| Support CSAT | 93% | 94% |\n| Refunds | (12,400) | (9,850) |"
},
{
"heading": "What went well",
"items": [
"Enterprise pipeline doubled after the SOC 2 report shipped.",
"Support CSAT held at 94% while ticket volume rose 31%.",
"Two renewals slipped into October. Owner: VP Sales."
]
}
…A scanned PDF will not have selectable table text and usually has one image-heavy object per page. AI Deep Read spends vision credits by page, reads the page image, and then asks our table engine to materialize detected pipe tables. Review totals, merged labels, and accounting negatives against the original.
pdftotext plus jq wrapping
pdftotext -layout memo.pdf memo.txt
jq -Rs '{text: .}' memo.txt > memo.jsonThis creates JSON-wrapped text only; it does not identify tables, scans, or page-level fields like Deep Read.
The HTTP API and the MCP server run the exact engine this page uses (AI Deep Read); the response carries the same warnings the web converter shows. Check support first with GET /api/v1/pairs?from=pdf&to=json.
curl -X POST https://filetypeconverters.com/api/v1/convert \
-H "Authorization: Bearer $FTC_API_KEY" \
-F "file=@input.pdf" -F "from=pdf" -F "to=json" \
-F "deepRead=true" \
--output output.json/convert/pdf-to-xlsx when spreadsheet users need numeric cells instead of Markdown table strings./convert/pdf-to-csv only when you have verified that the CSV materializer preserves the columns you need.Not in the tested output. Deep Read placed the table as Markdown text inside the tables array, so downstream code must parse the pipe table if rows are needed.
The JSON route preserves the model's table Markdown more directly than XLSX materialization. That keeps the accounting notation visible but not normalized.
The one-page test returned page_number 1. Multi-page behavior should be checked before relying on page keys for reconciliation.