Skip to main content
Nodes used: Parse, Extract This workflow reads a bank statement and returns the header (account, period, balances) as scalar fields and the transactions as rows of an object field. Create it once, then run every statement through it.

The graph

Run and read

One statement is one run. Keep each file in its own call so each statement gets its own result; a call that carries several files makes one document packet and one run.

What comes back

One statement with six transactions, trimmed to two rows. The run took 21 seconds. Every field also carries verification_status, value_override and evidence; only the first shows them here.
Read the fields from extractions[0].fields. A scalar field is one object with value, confidence and evidence. An object field is an array of rows, and every cell in a row is that same object. Every value is a string on the wire: numbers as "2983.35", dates as "2026-03-31", booleans as "True" or "False". The SDKs keep them as strings too, so convert before you add them up. A field the model could not find comes back as {"value": null, "confidence": null, "evidence": []}.

Getting the data out

  • In the app, open the workflow and export the results as CSV, Excel or JSON. Each statement is a row and transactions expands into its own sheet or nested array. See Outputs.
  • Over the API, read each run as shown above, or list a workflow’s runs for a date range and flatten them yourself. Daily CSV export is a complete script for that.

Tips

  • Describe amount as “positive for deposits, negative for withdrawals”. The sign convention then holds across banks.
  • An XLSX or CSV statement gives better rows than a scanned PDF. The cells are already structured and no OCR runs.
  • Ask for the totals the statement prints (total_deposits, total_withdrawals) as extra fields and compare them with the sum of the rows. A mismatch is the cheapest signal that a row was missed.
  • Statements with dense multi-page tables are a good fit for the Agentic parse tier: set "mode": "agentic" on the Parse node. See Agentic parse to markdown.
  • Upload and run is limited to 60 requests per minute. Submit statements serially with a short pause, or spread them across workers.

Next steps

Extract node

Object fields, modes and smart lookup

Outputs

CSV, Excel and JSON exports from the app

Daily CSV export

Flatten a day of runs into one CSV over the API

Runs and results

The model behind the envelope