Most document AI returns values.
This returns values and proof.
Hover any extracted field. The highlight lands on the exact pixels it came from.
Every extracted value carries a bounding box, a confidence score, and a page index. When a value looks wrong you don't go hunting through the document — you hover the field and see precisely where the model looked. A highlight in the wrong place is a visible audit trail.
Open a live demo → · Run it yourself · Give it to an agent
Each demo is a Python script that calls the API and generates a self-contained HTML file. The generated output is committed — open any of them in a browser with no signup, no key, and no install.
|
Table row extraction across a dense printed grid. The form uses a dropout-red ink grid that scanners typically destroy — procedure codes, diagnosis codes, billing amounts, and provider fields come back correct, each highlighted in the exact table cell it came from. |
Signature block detection on a mixed handwritten/printed document. The schema separates the printed name from the adjacent cursive signature — two visually adjacent fields that trip up most models. Includes a before/after tuning comparison showing how schema description specificity fixes extraction errors. |
|
Value isolation in a dense 3-column financial table. Monthly Income, Total Assets, and Total Expenses sit side by side with nearly identical labels. The tuning story shows a vague schema description pulling the wrong column, and a precise one fixing it — with the highlight visually confirming the correction. |
Full narrative extraction from a free-text legal field. |
|
The document decomposed into semantic blocks — paragraphs, section headers, tables — each with spatial coordinates. This is the RAG citation case: every block in the sidebar links back to its exact location, so a retrieval pipeline can cite its source precisely. Reach for Parse when you need structure-aware chunking rather than field-level extraction. |
|
| Vertical | Demo |
|---|---|
| Healthcare billing | CMS-1500 |
| Government / vital records | Indiana Birth Record |
| Mortgage / housing assistance | Making Home Affordable RMA |
| Legal / civil court | CA SC-100 Small Claims |
| Real estate / lending | Appraisal Report (Form 72) |
Just want to look? Every output/index.html is committed — open one in a browser and you're done. To regenerate against your own documents:
# 1. Python 3.10+
pip install -r requirements.txt
# 2. Replay the committed cache (no API key or credits required)
cd demos/grounded_extraction
python3 generate_demo.py
open output/index.html
# 3. To replace the cache with a live response, provide your Data Extraction
# key (separate from the Processor API key) and opt in explicitly
NUTRIENT_API_KEY=your_key python3 generate_demo.py --refreshEvery demo folder is the same four files:
demo_name/
├── docs.json # extraction schema (or parse config)
├── generate_demo.py # replays cache; --refresh calls API
├── template.html # visual layout
└── README.md # demo notes and tuning story
Getting a key. Data Extraction uses a separate product key from the Processor API key. You only need one for a live --refresh run. Sign up, open the dashboard, or try the playground on the Data Extraction API page.
Prefer to try before writing code? Test documents visually in Nutrient Studio.
Parse credits are charged by mode and page. Extract requests add 6 credits per page on top of the Parse rate, so an agentic extraction costs 24 credits per page.
| Mode | Parse credits per page |
|---|---|
text |
1 |
structure |
1.5 |
understand |
9 |
agentic |
18 |
All five demos use agentic mode.
| Demo | Pages | Normal run | If run live |
|---|---|---|---|
| CMS-1500 | 1 | 0 | 24 |
| Indiana Birth Record | 1 | 0 | 24 |
| Request for Modification | 4 | 0 | 96 |
| CA SC-100 | 4 | 0 | 96 |
| Extraction subtotal | 10 | 0 | 240 |
| Appraisal Report (Parse) | 4 | 0 | 72 |
| Total | 14 | 0 | 312 |
Every normal generator run replays its committed cache and costs 0 credits. Network access is opt-in through --refresh: refreshing the four extraction demos costs 240 credits, and refreshing all five costs 312 credits.
The free tier includes 5,000 credits per month, enough for about 16 live all-five refreshes.
Extraction lifts document values into every derivative, so review more than the PDFs. Before committing a document swap, check:
demos/*/data/*.pdf— public-source or synthetic onlydemos/*/output/metadata.json— document values and non-billing response metadatademos/parse_citations/data/*_parse_results.json— document textdemos/*/cache/*.json— the fulloutputpayloaddemos/*/output/index.html— rendered field values
Two things to know about what is already committed here:
An SSN-formatted value. 000-45-6789 appears in rma_extraction's metadata.json, cache/*.json, and output/index.html. The 000- prefix is never issued by the SSA — this is a synthetic value from the sample form used for demonstration purposes. The RMA schema requests borrower_ssn, so if replacing the source PDF with a real document, confirm the form contains no actual SSN before committing.
The metadata files don't all have the same shape. birth_record_extraction, grounded_extraction, and rma_extraction contain the safe persisted response fields; sc100_extraction contains derived display-card data only. The cache projection excludes the API's top-level usage field and its account billing data.
Full pre-publication procedure: docs/launch-checklist.md.
Agents can call the Data Extraction API directly through the document-extraction-api skill in PSPDFKit-labs/nutrient-skills, verified at revision 3da3211 (PR #27, merged 2026-07-23):
npx skills add pspdfkit-labs/nutrient-skills --skill document-extraction-apiThe skill bundles a schema-driven extract script with per-field citations and a cost preflight, plus reference docs on schema design and reading citation output. Reach for the skill when an agent should run extractions itself; reach for these demos when a human wants to see grounded extraction with its highlights.
The pin is deliberate: install resolves against upstream main, so record the revision you verified and re-review before moving it.
- Data Extraction API docs
- Parse API docs
- API reference
- Nutrient Studio — test documents visually before writing code
All documents, names, identifiers, and records in this repository are public-source or synthetic. Extraction results are illustrative only.
This repository is sample code, not a production-ready workflow. Before processing real documents:
- Validate extracted outputs before using them in automation
- Ensure handling of regulated or personal data complies with applicable laws (HIPAA, GDPR, CCPA, and others)
- Review all derivatives —
metadata.json, cache files, and rendered HTML — for sensitive values before committing
To suggest a new document type, open an issue with the document name and the fields to extract. To add one yourself, copy an existing demo folder, swap the PDF and docs.json, and run the generator — then run the PII review above before committing.
Shared helpers live in common/ (cache, escaping, rendering), and all five demo generators use them.
MIT — see LICENSE.





