PDFCraft
Extraction guide

Extract a balance sheet PDF to JSON

Everything below is the response the live API returned for a balance sheet, generated when this page was built. Not a description of what it would return — the output itself, including what it scored low on.

Who this is for

Credit analysis, underwriting and financial-data providers reading statutory accounts that only exist as PDFs.

The job, in the words people search for: “get balance sheet figures out of a filed PDF”.

What makes this shape awkward

Two comparative year columns, subtotal rows interleaved with detail rows, and indentation carrying the hierarchy. The indentation is whitespace, not structure — so "Total current assets" is a row like any other, and nothing in the file says it is a sum of the rows above it.

The measured result

Pages read1
Time6 ms (6 ms/page)
Labelled fields found unprompted4
Tables1 (11 rows)
Inputbalance-sheet.pdf (28 KB — synthetic, generated from a spec in the repo; real documents of this type cannot be published)

Fields, with a schema

Ask for the fields you want by the label printed on the page. Each answer carries the text exactly as printed (raw), the value coerced to the type you asked for, a confidence, and a bounding box you can draw on the page to check it.

curl -X POST https://api.pdfcraft.dev/v1/extract \
  -H "Authorization: Bearer $PDFCRAFT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "file": "<base64 of your balance sheet>",
    "schema": {
      "entity": "string",
      "registered_number": "string",
      "period_end": "date"
    }
  }'

What came back

Fieldrawvalueconfidence
entityHalvorsen Industrial Ltd"Halvorsen Industrial Ltd"60%
registered_number08817422"08817422"60%
period_end2026-03-31"2026-03-31"70%

Every label it found without being asked

Send no schema and you get all of these, keyed by the label as printed. Useful for discovering what a new supplier’s layout actually contains before you write a schema against it.

Entity, Registered Number, Period End, Currency

Tables

Table 1 · 11 rows × 3 columns · page 1

Table confidence 75%. No header was promoted (confidence 10%). Nothing in the geometry distinguishes row 0 from the rows under it, and inventing a header would silently eat a row of your data.

Intangible assets1,2041,388
Property, plant and equipment8,4417,902
Investments620620

First 3 of 11 rows.

What this does not do

Try it on your own balance sheet

The playground takes a file and shows the same JSON, with every bounding box drawn over the page. No key and no signup for the first few; a free key gives you 100 pages a month.

Related