This guide covers practical tips for getting the best results from Parse: tuning for retrieval quality, accuracy, speed, and cost.
By default, Parse returns one chunk per page. For retrieval, you usually want chunks that are complete semantic units — so each one can be embedded and retrieved on its own without splitting a table or cutting off a paragraph mid-thought.
Setting chunkingStrategy.type to section splits the document at logical boundaries (headings, tables, figures) instead of arbitrary page breaks. Use minCharacters and maxCharacters to keep chunks within your embedding model’s ideal range.
Section chunking requires target: "markdown". See Chunking strategy for the full options.
Markdown tables can’t represent merged cells, nested headers, or multi-row cells — so complex tables often come out misaligned. Set blockOptions.tables.targetFormat to html to preserve the original table structure.
If your tables look broken, switching to html usually fixes it. For tables that span multiple pages, also enable tableHeaderContinuationEnabled so headers repeat on each page. See Tables.
Agentic processing uses a vision language model to review and correct parsing output. It meaningfully improves accuracy on hard documents, but it adds latency and consumes more credits — so it’s a deliberate accuracy-vs-speed-and-cost tradeoff, not an always-on setting. It’s off by default; enable it only where it helps:
text.agentic — corrects low-confidence OCR. Enable for handwriting, faded or skewed scans, unusual fonts, or when you see garbled characters in the output.tables.agentic — reviews and fixes table structure. Enable for tables with misaligned columns, merged cells, or values landing in the wrong column.Clean, simple PDFs may parse accurately without it — test your document types with it off first, then enable it selectively.
Parse defaults favor accuracy. Adjust these settings to trade some accuracy for speed and cost, or the reverse.
For fastest, lowest-cost processing:
For highest accuracy:
Ready-to-run config blocks for common scenarios (comments added to explain each setting). For field-level options and defaults, see Configuration.
The quick start and the examples above use the synchronous /parse endpoint — the fastest way to try Parse and iterate on config. When you’re ready to run Parse in production, switch to the asynchronous /parse_runs endpoint.
Why the sync /parse endpoint isn’t built for production:
What async (/parse_runs) gives you:
GET /parse_runs/{id}) or webhooks, so you’re not holding connections open.See Async Processing for the full comparison, polling options, and webhook setup.