Parsing Italian bank statements: what makes them different
The hyperscaler models are trained on US formats. Here is what an Italian estratto conto actually needs.
If you have tried a general-purpose document AI service on an Italian estratto conto, you will have noticed it does poorly. That is not a coincidence — it is what the models were trained on.
The hyperscaler gap
The major cloud providers ship pre-built bank statement models, and at least one documents its coverage as US bank formats only. Italian layouts — dare/avere columns, valuta and data contabile as separate dates, saldo iniziale and saldo finale in a summary block — are not what those models expect.
The Italian incumbents largely sidestep the problem: they solve account data through PSD2 aggregation instead of parsing PDFs. That works for live accounts and not at all for the five years of archived statements an accountant actually has to process.
Four things Italian statements need
- Decimal convention. 1.234,56 means one thousand two hundred thirty-four and fifty-six cents. Applying the Anglo-American reading gives 1.23456, and a parser that guesses per-document rather than per-locale will get some documents right and some catastrophically wrong.
- Two dates per row. Data contabile (booking date) and data valuta (value date) are different and both matter for interest calculation. Collapsing them into one loses information an accountant needs.
- Multi-line SEPA descriptions. A bonifico carries ordering party, beneficiary and remittance information across several lines, all belonging to one transaction. Treating each line as a row invents transactions.
- The saldo block. Italian statements usually print saldo iniziale and saldo finale in a summary section separate from the transaction table — which is exactly what a reconciliation check needs, once the parser knows to look there.
Why reconciliation matters more here
Because Italian layouts vary more between banks than US ones do, the risk of a silently dropped row is higher. A converter that outputs a plausible spreadsheet without telling you whether it balances is not usable for accounting work.
With the saldo iniziale, the saldo finale and the extracted movements, the check is arithmetic: the sum of dare and avere applied to the opening balance either lands on the printed closing balance, or it does not. When it does not, you have a number to investigate rather than a suspicion.
Practical notes
- Download the PDF from home banking rather than scanning a printout. A machine-readable PDF skips OCR entirely and is dramatically more accurate.
- Keep statements per account and per period. Merging several accounts into one file makes the reconciliation check meaningless, because there is no single opening and closing balance.
- If one bank is consistently awkward, build an extraction profile for it once. Every later statement from that bank then parses correctly without further work.
- Check the reconciliation verdict before exporting. It takes a second and it is the only step that tells you whether the export is complete.
Frequently asked questions
Does it work with Intesa, UniCredit, BPER, Poste and the others?
Layout detection is generic rather than a fixed list of supported banks, so most Italian layouts work directly. Where one does not, an extraction profile handles it permanently.
Are FatturaPA invoices supported?
Yes, including signed .p7m files, which most generic tools cannot open.
Does it handle comma decimal separators correctly?
Yes. Both European and Anglo-American conventions are detected and normalised, which is one of the most common sources of silent errors in generic converters.
Are my documents processed in Italy or the EU?
Processing and storage are in the EU, on our own servers, using local libraries. Nothing goes to a third-party AI service. A dedicated instance in a specific region is available for regulated clients.
Try it on your own statements
Free tools with no account, or a workspace with an API and free documents to evaluate it.