Skip to content
Docs Security Sign in
PdfParse

Extract data from PDF form fields and checkboxes

Applications, onboarding packs, claim forms and intake questionnaires arrive as fillable PDFs, flattened PDFs and scans of paper filled in by hand. PdfParse reads all three and returns each field and checkbox as a typed value, with the page, position and confidence.

Parse PDF
A creased, stamped paper form under the open lid of a flatbed scanner

Parse a form before you sign up

Drop a filled form or pick the scanned sample form. Page 1 is parsed in full, and the rendered page outlines every field and checkbox it found.

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

Three kinds of forms, one output

A fillable PDF stores its values in form widgets. A flattened PDF prints the values into the page and drops the widgets. A scan has no text layer at all. Text libraries handle the first case and miss the other two. PdfParse detects labels, boxes and checkmarks from the page layout, runs OCR where needed, and maps what it finds to the field names you choose.

This schema describes a small business account application. Booleans come back as true or false, and grouped checkboxes can be read into an array.

The result your intake system reads

Every value carries a confidence score and the page it came from. The raw blocks of type form_field and checkbox are also returned in the pages array with their bounding boxes, so you can draw them back onto the page in your review screen.

JSON
{
  "name": "account_application",
  "fields": [
    { "name": "applicant_name", "type": "string", "description": "Full name of the person signing the application" },
    { "name": "business_name", "type": "string", "description": "Registered business name" },
    { "name": "date_of_birth", "type": "date", "description": "Applicant date of birth" },
    { "name": "email", "type": "string", "description": "Contact email written on the form" },
    { "name": "annual_revenue", "type": "money", "description": "Expected annual revenue" },
    { "name": "business_type", "type": "array", "description": "Every checked box in the Business type group" },
    { "name": "accepts_terms", "type": "boolean", "description": "Whether the I accept the terms box is checked" },
    { "name": "signed", "type": "boolean", "description": "Whether the signature line contains a signature" }
  ]
}
JSON
{
  "id": "prs_51e7aa",
  "status": "completed",
  "fields": {
    "applicant_name": { "value": "Dana Whitfield", "confidence": 0.95, "page": 1 },
    "business_name": { "value": "Whitfield Garden Design", "confidence": 0.94, "page": 1 },
    "date_of_birth": { "value": "1988-04-12", "confidence": 0.92, "page": 1 },
    "email": { "value": "[email protected]", "confidence": 0.9, "page": 1 },
    "annual_revenue": { "value": 180000.00, "confidence": 0.93, "page": 1 },
    "business_type": { "value": ["Sole proprietor"], "confidence": 0.97, "page": 1 },
    "accepts_terms": { "value": true, "confidence": 0.98, "page": 2 },
    "signed": { "value": true, "confidence": 0.91, "page": 2 }
  },
  "usage": { "pages": 2 }
}

How form intake works with PdfParse

  1. 1

    Your portal or mailbox sends the completed form to POST /v1/parse with the schema id and ocr set to "auto".

  2. 2

    Short forms return in the same response. Long application packs return a job id, and a parse.completed webhook carries the result back.

  3. 3

    Your system checks required fields, validates dates and amounts, and creates the record.

  4. 4

    Forms with a missing signature, an unchecked consent box or a low confidence value go to a review queue that opens on the right page.

  5. 5

    Archives of old paper forms go through batch jobs of up to 500 files per job, so a backlog of thousands of scans becomes a CSV in an afternoon.

Operations teams can run the same flow in the web app. They upload forms, pick the schema and export one CSV row per form for the CRM or the case system.

Forms that trip up other tools

  • Handwritten entries in boxes are read with OCR, and characters written in separate cells are joined into one value.
  • Checkmarks, crosses, filled circles and partly filled boxes are detected as checked or not checked, each with its own confidence.
  • Radio groups where only one answer is allowed return a single value, and groups that allow several return an array.
  • Multi page forms with the same label on several pages, such as a date on every page, are told apart by the description in your schema.
  • Forms with a table section, such as a list of dependants or previous addresses, return that section as an array of rows.
  • Flattened PDFs exported from other systems are treated like scans of printed forms when the widgets are gone.

Plans for form extraction

Custom schemas start on Growth. Dedicated form field and checkbox detection is part of Scale and Enterprise, which most form intake projects use.

Plan Yearly billing Monthly billing Pages per month Forms
Starter $24 per month $49 per month 2,000 JSON, Markdown and CSV, OCR for scans
Growth $74 per month $149 per month 7,000 Up to 10 custom schemas, webhooks, batch jobs
Scale $249 per month $499 per month 24,000 Form field and checkbox detection, unlimited schemas, audit log
Enterprise $749 per month $1,499 per month 72,000 SSO, roles, priority support, DPA, EU or US processing region

Every plan is a subscription and upgrading charges the difference right away. Compare every limit on PDF extraction API pricing and read the parameters in the document parsing API reference.

  • 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

Can PdfParse read fillable and flattened PDF forms

Yes. Fillable forms, flattened PDFs and scans of paper forms all return the same JSON, because fields are detected from the page layout and not only from form widgets.

How are checkboxes returned

A single checkbox returns true or false. A group of checkboxes can return an array of the checked labels. Each value includes a confidence score and its page.

Does it read handwriting in form boxes

Handwritten entries are read with OCR. Clear block capitals read best, and every value carries a confidence score so unclear entries can go to a person.

Which plan do I need for form extraction

Custom schemas start on Growth. Form field and checkbox detection is part of Scale and Enterprise.

Can I keep forms with personal data off your servers

Scale and Enterprise include zero retention mode, which deletes the file and its outputs once the result is returned. Files are never used to train models.

Turn your form backlog into records

Create an account, define your form schema and send the first batch from the Python or Node SDK.