Skip to content
All insights AI for credit & lending operations

Automating financial spreading for SME lending

Spreading SME financials by hand is slow and inconsistent. Here is the extraction and normalisation pipeline we build to standardise the numbers.

5 min read #spreading#credit-analysis#extraction
Financial services professionals working through an AI initiative

Automating financial spreading means turning a borrower’s statements into a standardised set of line items and ratios your credit models and analysts can use without re-keying anything. It is an extraction problem wrapped in a normalisation problem: pull the numbers off whatever format arrived, map them onto one internal chart of accounts, and prove the result reconciles before anyone relies on it.

Most of the pain in SME lending is not the analysis. It is the input. A mid-market borrower sends a scanned PDF where the numbers are correct but the labels are idiosyncratic. A sole trader sends a tax return with the trading figures buried three schedules deep. A holding company sends consolidated accounts when you needed the operating entity. Someone spends an afternoon copying figures into a template, another hour deciding whether “other operating charges” belongs above or below EBITDA, and by the time the spread is ready the numbers have been touched enough times that nobody can say where any single figure came from. That last part is the real problem. When a regulator or a credit committee asks why the leverage ratio reads 4.1x, the honest answer is often that an analyst typed it.

Extraction is the easy half, and it still needs discipline

Pulling numbers off a document is close to solved for clean inputs and far from solved for the ones you actually receive. Layout varies, columns merge, footnotes carry the real number, and a minus sign hides inside a parenthesis. So the extraction layer has to do more than read text.

  • Detect the document type first. A statutory filing, a management account, and a tax return want different parsers and different confidence expectations. Sending all three through one prompt gives you a plausible answer and no way to know when it is wrong.
  • Capture position and provenance for every extracted figure. Store the page, the cell, and the raw string alongside the parsed value. This lineage is what lets an analyst click a spread figure and land on the exact place it was read from.
  • Extract the periods as first-class objects. SME statements mix twelve-month years, stub periods, and restated comparatives. If you flatten “2024” and “2024 restated” into one column you have created a leakage problem that surfaces later as a phantom year-on-year swing.
  • Keep a confidence score per line item, not per document. A page can be 99% legible and still hand you one badly OCR’d revenue figure. Aggregate confidence hides exactly the number you most need to catch.

Traceability is the whole point of this layer. Every downstream step assumes it can find out where a number came from, and that only holds if extraction recorded it at the moment it read the figure.

Normalisation is where the model earns its keep

Two borrowers can be identically healthy and report their accounts so differently that a naive spread makes one look twice as levered as the other. Normalisation is the reconciliation of vocabulary: mapping hundreds of local labels onto the fixed set of line items your credit policy defines.

This is an entity-resolution task more than a language task. “Creditors falling due within one year”, “trade and other payables”, and “current liabilities: suppliers” are three names for one bucket, and the mapping depends on the reporting standard and sometimes the accountant’s habits. We build it as a classifier over line items with the mapping rules held in a reviewable table rather than baked into a prompt, so a credit officer can see and change how “directors’ loans” gets treated without a redeploy. Judgement items get flagged for a human instead of guessed: subordinated shareholder debt, operating versus finance leases, a one-off disposal that inflates the year. Reclassify any of those quietly and you have a wrong covenant calculation nobody chose to make.

Point-in-time correctness matters here more than people expect. If you retrain the mapping on today’s chart of accounts and then re-spread a two-year-old filing, you can apply a classification rule that did not exist when the statement was written. Version the mapping table and stamp each spread with the version that produced it. Otherwise your back-book and your new originations are speaking slightly different languages, and your portfolio analytics inherit the gap.

Reconciliation is the gate every spread passes through

A spread that does not reconcile has a bug in it, and shipping it to an analyst only moves the bug downstream. Before any figure reaches a person, we run the accounting identities the statement itself must obey:

  • Balance sheet balances: assets equal liabilities plus equity, within a tolerance you set explicitly rather than assume.
  • Flow ties to stock: the cash flow statement’s movement reconciles to the change in the balance sheet, and net income ties from the P&L into retained earnings.
  • Period continuity: prior-year closing balances equal current-year opening balances across the statements you hold.
  • Cross-source agreement: where the same figure appears in the accounts and a tax return or a filing, the values match or the disagreement is surfaced, never averaged away.

These checks are cheap, and they catch the failure mode that confidence scores miss. A model can be sure and wrong. It cannot make assets balance against a liabilities figure it hallucinated. When a spread fails a check, it goes to a person with the specific identity that broke and the two figures that disagree, which turns a twenty-minute hunt into a thirty-second decision.

Around all of this sits the infrastructure that makes it usable in production. You want an eval set of spreads a credit officer has signed off, run on every model or mapping change, so you know before deploying whether accuracy moved. You want a false-positive budget per line item deciding which spreads flow straight through and which get held for review, tuned to what your team can absorb at quarter-end when volume triples. And you want drift monitoring on the extraction confidence and the share of items landing in the review queue, because a supplier changing their statement template will quietly degrade you weeks before anyone notices the spreads getting worse. None of it is glamorous. All of it is the difference between a demo and a system a credit committee will stand behind.

FAQ

Can a model spread financials straight through without a human?

Not for the whole population. Route the clean, high-confidence cases straight through and hold the rest for review, with the split governed by a false-positive budget you set per line item. Interest expense and off-balance-sheet items almost always keep a human in the loop.

How do you handle borrowers who report on different accounting bases?

Normalise to one internal chart of accounts and record the source basis as a field. A borrower reporting under local GAAP with tax-book adjustments needs different reclassification rules than an IFRS filer, and mixing them silently is how ratios drift.

What stops the spread from being wrong when the extraction is confident but incorrect?

Reconciliation checks that the model cannot talk its way past: assets equal liabilities plus equity, the cash flow ties to the balance sheet movement, prior-year closing equals current-year opening. A confident wrong number usually breaks one of these identities.

Working on something similar?

Tell us about your data and the workflow around it, and we will give you a straight read.

Book a 30-min intro call