Contract data extraction by clause and party
Contracts hide the facts your team needs in long paragraphs and appendices. PdfParse reads signed PDFs and scanned agreements and returns the parties, effective date, term, renewal notice, payment terms and the clauses you name, each with the page it came from.
Parse a contract page before you sign up
Drop a contract or any long PDF and see page 1 as structured JSON, clean Markdown with headings and numbered clauses kept, and the tables as CSV.
What one call returns
Page one rendered with every block outlined, next to the JSON your code receives.
- Reading text layer
- Detecting layout
- Extracting tables
- Building JSON
Headings, paragraphs, tables and totals detected
Portsmouth, NH 03801
| Description | Qty | Unit | Amount |
|---|---|---|---|
| Oak countertop, 2.4 m | 2 | 640.00 | 1,280.00 |
| Cabinet doors, shaker | 12 | 85.00 | 1,020.00 |
| On site fitting | 1 | 450.00 | 450.00 |
Quote the invoice number with your transfer.
Goods remain ours until paid in full.
Pages 2 and later are parsed after you create an account.
{ "document": { "pages": 2, "parsed_pages": 1, "language": "en" }, "pages": [ { "number": 1, "blocks": [ { "type": "heading", "text": "Invoice", "bbox": [48, 52, 132, 84] }, { "type": "paragraph", "text": "Harbor Street Joinery, 14 Dock Lane, Portsmouth" }, { "type": "key_value", "pairs": { "Invoice no.": "INV-2026-0418", "Issued": "Oct 14, 2026", "Due": "Nov 13, 2026" } }, { "type": "table", "columns": ["Description", "Qty", "Unit", "Amount"], "rows": [ ["Oak countertop, 2.4 m", 2, 640.00, 1280.00], ["Cabinet doors, shaker", 12, 85.00, 1020.00], ["On site fitting", 1, 450.00, 450.00] ] }, { "type": "total", "label": "Total due", "value": 2983.75, "currency": "USD", "confidence": 0.98 } ] } ], "fields": { "invoice_number": { "value": "INV-2026-0418", "confidence": 0.99, "page": 1 }, "total": { "value": 2983.75, "confidence": 0.98, "page": 1 }, "due_date": { "value": "2026-11-13", "confidence": 0.97, "page": 1 } } }
Downloads from the demo include a watermark field and cover page one only.
Page one is parsed in your browser, so your file never reaches our servers.
One demo per day from this network. Create an account to parse more pages.
$ curl https://api.pdfparse.ai/v1/parse \ -H "Authorization: Bearer $PDFPARSE_API_KEY" \ -F file[email protected] \ -F outputs=json,markdown,csv
Describe the terms you track
Legal, procurement and sales operations teams track the same handful of terms across hundreds of agreements. You list them once in a schema with POST /v1/schemas. The description of each field tells PdfParse what to look for, so it works on your own paper, on supplier paper and on old scanned agreements alike.
What your contract database receives
Every field returns its value, confidence score and source page, so a reviewer can jump to the clause in one click instead of reading the whole agreement.
{
"name": "commercial_contract",
"fields": [
{ "name": "parties", "type": "array", "description": "Each contracting party with name and role, such as customer or supplier" },
{ "name": "effective_date", "type": "date", "description": "Date the agreement takes effect" },
{ "name": "initial_term_months", "type": "number", "description": "Length of the initial term in months" },
{ "name": "auto_renews", "type": "boolean", "description": "Whether the agreement renews automatically" },
{ "name": "renewal_notice_days", "type": "number", "description": "Days of notice needed to stop renewal" },
{ "name": "annual_fee", "type": "money", "description": "Yearly fee or contract value" },
{ "name": "payment_terms", "type": "string", "description": "Payment terms, such as net 30" },
{ "name": "governing_law", "type": "string", "description": "Governing law clause" },
{ "name": "limitation_of_liability", "type": "string", "description": "Text of the limitation of liability clause" }
]
}
{
"id": "prs_c2a907",
"status": "completed",
"fields": {
"parties": {
"value": [
{ "name": "Bluegate Logistics", "role": "customer" },
{ "name": "Meridian Software", "role": "supplier" }
],
"confidence": 0.96,
"page": 1
},
"effective_date": { "value": "2026-01-01", "confidence": 0.97, "page": 1 },
"initial_term_months": { "value": 24, "confidence": 0.94, "page": 3 },
"auto_renews": { "value": true, "confidence": 0.93, "page": 3 },
"renewal_notice_days": { "value": 60, "confidence": 0.92, "page": 3 },
"annual_fee": { "value": 48000.00, "confidence": 0.95, "page": 9 },
"payment_terms": { "value": "Net 30", "confidence": 0.94, "page": 9 },
"governing_law": { "value": "State of New York", "confidence": 0.96, "page": 14 },
"limitation_of_liability": { "value": "Each party's total liability is limited to the fees paid in the twelve months before the claim.", "confidence": 0.9, "page": 11 }
},
"usage": { "pages": 16 }
}
From signed PDF to contract record
-
1
Your contract repository or e-signature export sends each signed PDF to POST /v1/parse with the schema id.
-
2
Long agreements return a job id. A parse.completed webhook, signed with the PdfParse-Signature header, delivers the result to your endpoint.
-
3
Your system stores the fields, sets renewal reminders from the notice period, and links each value to its page.
-
4
Values below your confidence threshold go to legal review with the source page already open.
-
5
Existing archives go through batch jobs of up to 500 files per job, so you can backfill a whole repository in a few runs.
For question answering over contracts, ask for RAG chunks in the same call. Chunks split by section keep each clause together with its section path, such as Term and Termination, and its page range.
Contract details that need careful parsing
- Amendments and order forms that change a term are parsed as separate documents, so your system can apply the latest value.
- Numbered clauses and sub clauses keep their numbering in Markdown and in the section path of each chunk.
- Fee schedules and service level tables in appendices come back as tables with rows and columns, and as CSV.
- Scanned agreements with stamps and signatures go through OCR, and the signature blocks are returned as blocks with their position.
- Defined terms used across the document are read in context, because the field description guides extraction instead of a fixed position.
- Very long agreements are accepted up to 100 pages per file on Starter and up to 2,000 pages per file on Enterprise.
Plans for contract work
A page is one page of the PDF, so a 16 page agreement uses 16 pages. Custom schemas and RAG chunking start on Growth.
| Plan | Yearly billing | Monthly billing | Pages per month | Max pages per file |
|---|---|---|---|---|
| Starter | $24 per month | $49 per month | 2,000 | 100 |
| Growth | $74 per month | $149 per month | 7,000 | 300 |
| Scale | $249 per month | $499 per month | 24,000 | 1,000 |
| Enterprise | $749 per month | $1,499 per month | 72,000 | 2,000 |
Scale adds zero retention mode and an audit log. Enterprise adds SSO, roles, a DPA and a choice of EU or US processing region. See PDF extraction API pricing for every limit and the document parsing API reference for request options.
- Starter 2,000 pages, 1 API key, 1 seat $49 per month $24 per month, $288 billed yearly
- Growth 7,000 pages, 5 API keys, 3 seats $149 per month $74 per month, $888 billed yearly
- Scale 24,000 pages, 20 API keys, 10 seats $499 per month $249 per month, $2,988 billed yearly
- Enterprise 72,000 pages, unlimited API keys with per key limits, 25 seats $1,499 per month $749 per month, $8,988 billed yearly
FAQ
Does contract data extraction work on scanned agreements
Yes. Pages without a text layer go through OCR automatically, and the fields come back in the same format as for digital PDFs.
Can I extract the full text of a clause
Yes. Use a string field with a description of the clause. The value contains the clause text and the page it appears on.
How do I handle amendments
Parse each amendment as its own document with the same schema, then let your system apply the latest effective value for each term.
Can I use parsed contracts for question answering
Yes. Request chunks with the section strategy and you get clause sized chunks with page numbers and section paths ready for a vector store.
Is contract data used to train models
No. Files are never used to train models, and Scale and Enterprise can switch on zero retention mode.
Put your contract terms in a database
Create an account, define your contract schema and backfill your repository with batch jobs.