Skip to content
Docs Security Sign in
PdfParse

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 PDF

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.

Drop a PDF or scan

PDF, PNG or JPG up to 10 MB. Page one is parsed in full, right here.

Or try a sample file
Output

Optional. Comma separated field names, for example invoice_number, total, due_date.

Page one is parsed in your browser and never uploaded. No card needed to try page one.

What one call returns

Page one rendered with every block outlined, next to the JSON your code receives.

  1. Reading text layer
  2. Detecting layout
  3. Extracting tables
  4. Building JSON
Rendered page Page 1 of your document

Headings, paragraphs, tables and totals detected

heading
Invoice
paragraph
Harbor Street Joinery
14 Dock Lane
Portsmouth, NH 03801
key_value
Invoice no.INV-2026-0418IssuedOct 14, 2026DueNov 13, 2026
table
DescriptionQtyUnitAmount
Oak countertop, 2.4 m2640.001,280.00
Cabinet doors, shaker1285.001,020.00
On site fitting1450.00450.00
total
Subtotal2,750.00Tax 8.5%233.75Total dueUSD 2,983.75
paragraph
Payment by bank transfer within 30 days.
Quote the invoice number with your transfer.
Goods remain ours until paid in full.
footer
Harbor Street JoineryPage 1 of 2
Locked page

Pages 2 and later are parsed after you create an account.

Output
{
  "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.

Request
The same request from your code
Read the API reference
$ curl https://api.pdfparse.ai/v1/parse \
  -H "Authorization: Bearer $PDFPARSE_API_KEY" \
  -F file[email protected] \
  -F outputs=json,markdown,csv
200 OK, 1 page parsed

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.

JSON
{
  "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" }
  ]
}
JSON
{
  "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. 1

    Your contract repository or e-signature export sends each signed PDF to POST /v1/parse with the schema id.

  2. 2

    Long agreements return a job id. A parse.completed webhook, signed with the PdfParse-Signature header, delivers the result to your endpoint.

  3. 3

    Your system stores the fields, sets renewal reminders from the notice period, and links each value to its page.

  4. 4

    Values below your confidence threshold go to legal review with the source page already open.

  5. 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.