Back to Blog

Bank statement analysis: turning 12 months of transactions into structured cash flow

7 min read Kirra Whitfield
Abstract horizontal lines representing financial data rows, editorial concept

Bank statement review is the document type that generates the most comments from loan officers about how much time it consumes. W-2s are one or two pages. Paystubs are a page each. A 1003 is four pages. But bank statements for a borrower with two accounts and a 12-month review period are 36 to 90 pages of transaction-level data, and the information the underwriter needs is buried somewhere in that volume.

The questions an underwriter is trying to answer from bank statements are not complex in isolation: what is the average monthly balance, what are the regular income deposits, are there any non-payroll deposits large enough to require sourcing, are there NSF fees indicating cash flow stress, is the down payment amount present and liquid for the required period? But answering those questions manually across two months of statements for a single account, let alone 12 months across multiple accounts, is a significant labor investment that does not require specialized underwriting judgment. It requires patient attention to detail applied to a large volume of unstructured data.

That is the problem Maestro's bank statement analysis module addresses. Here is what the extraction actually produces and where the limits are.

What the structured cash-flow output contains

When Maestro processes a borrower's bank statements, the output is a structured cash-flow summary with several components. The first is a monthly deposit ledger: every deposit, categorized by whether it appears to be a regular payroll deposit (same source, consistent timing, consistent amount within a tolerance range), an irregular income deposit (consistent source but irregular timing or variable amounts, typical for gig income or freelance), a large non-recurring deposit (above a configurable threshold that defaults to the lesser of 25 percent of monthly income or a lender-set dollar amount), or an uncategorized deposit (everything else).

The second component is the average balance calculation. Maestro computes the average monthly ending balance across all submitted statement months, the low-balance month, and the standard deviation of monthly ending balances. For lenders evaluating asset reserves, the ending balance trend matters: a borrower whose balance has declined steadily over 12 months presents differently than one with a stable average balance, even if the 12-month averages are similar.

Third is the large-deposit flag list. Any deposit meeting the threshold condition gets flagged with the deposit date, amount, and the transaction description as it appears on the statement. This is the list that the loan officer uses to initiate source-of-funds documentation requests, so the output needs to be actionable: the flagged items should be the ones that require explanation, not a list of every deposit over an arbitrary dollar amount.

Fourth is the NSF and overdraft summary. The count of NSF or overdraft events per month, the total fees, and the statement months in which they occurred. This does not by itself indicate a disqualifying cash flow issue under most agency guidelines, but it is a data point underwriters factor into their overall file assessment and it reduces the time spent manually counting NSF occurrences across a large statement set.

How payroll deposit identification actually works

Identifying which deposits are regular payroll requires more than matching on dollar amounts. Payroll can be biweekly, semi-monthly, or monthly. The deposit amounts vary slightly because of overtime, bonuses, or changes in tax withholding. The source description on the bank statement varies across banks: ACH credit descriptions look different at different receiving institutions even for the same originating employer.

We use a combination of signals: deposit timing pattern (consistent interval between deposits), amount stability within a tolerance window, and description pattern consistency. For a salaried borrower on a biweekly payroll with direct deposit, these signals are strong. For a gig worker who receives multiple small deposits from different platforms on variable schedules, they are weak, and we classify accordingly.

The classification matters for the cash-flow summary because the underwriter's treatment of regular payroll deposits versus irregular income deposits is different. Regular payroll deposits can be cross-validated against the W-2 and paystubs to confirm that the monthly income on the 1003 reflects what actually landed in the account. Irregular income deposits require a different documentation path, typically a 12-month average calculation rather than a year-to-date rate.

For files where the payroll identification confidence is low because the deposit pattern does not fit any of the standard payroll patterns, we flag the income deposits section for human review rather than committing to a classification that may be wrong. An incorrect income deposit classification that feeds into a DTI calculation is worse than flagging the section and letting the processor identify the pattern manually.

Large-deposit threshold calibration

One of the more frequently discussed configuration choices in bank statement analysis is the large-deposit threshold: at what dollar amount does a deposit require explanation and documentation under agency guidelines?

Fannie Mae's selling guide addresses this in the context of asset documentation: a large deposit that is not considered normal compensation requires additional documentation, with the definition of "large" tied to the borrower's income level rather than a fixed dollar amount. Freddie Mac's guidelines have similar income-relative thresholds. Most lenders implement their own operational definition that reflects their underwriting guidelines, which may be more conservative than the minimum GSE requirement.

Maestro's large-deposit threshold is configurable to match the lender's operational definition. The default reflects the common industry approach (roughly 25 percent of gross monthly income per deposit), but lenders with tighter documentation standards can set a lower threshold. The key output is not a compliance determination. It is a flag list that the loan officer uses to initiate documentation requests before the file goes to underwriting. Whether a specific large deposit requires explanation under the applicable GSE guidelines is a judgment the loan officer and underwriter make based on the lender's policies.

Where extraction confidence drops

Bank statement analysis has a specific confidence profile that differs from W-2 or 1003 extraction. The primary challenge is not OCR quality on the transaction descriptions (most bank statements are digitally generated PDFs with clean text layers) but the structural variability across financial institutions.

Every bank formats its statements differently. The header layout, the column arrangement (date, description, debit, credit, balance vs. date, debit/credit combined column, running balance), the level of detail in transaction descriptions, and the way multi-page statements paginate the balance-forward line all vary across institutions. An extraction model that has seen many Chase, Bank of America, and Wells Fargo statements will have reliable structural models for those formats. A statement from a smaller regional bank or credit union that formats differently may not match any learned structural template reliably.

When Maestro encounters a statement format that does not match its learned templates within a confidence threshold, it flags the statement for human review rather than attempting to force-fit an extraction onto an unfamiliar structure. This produces more review flags on less common statement formats, which is an honest tradeoff: it is better to flag an unfamiliar format for human verification than to extract a balance or deposit figure incorrectly and let it propagate through the cash-flow summary.

For lenders who originate significant volume with borrowers banking at less common institutions, this means the bank statement module will have a higher human-review rate on those files. That review rate should decrease as the extraction model sees more examples of those formats over time, but in the early deployment period it is a real limitation to acknowledge rather than obscure.

The multi-account aggregation challenge

Borrowers often submit statements from multiple accounts: a primary checking account, a savings account, a secondary checking account. Aggregating across accounts for a combined cash-flow and balance picture requires correctly identifying which accounts are distinct entities versus which statements represent the same account in different months.

Account matching across statement files uses the account number (which is usually masked to the last four digits), the financial institution, and the account type. For most borrowers with two or three distinct accounts, this is straightforward. For borrowers who have changed banks mid-year (submitting six months at one institution and six months at another for the "same" account in a practical sense), the aggregation logic cannot automatically bridge what are structurally two different accounts, even if the borrower thinks of them as representing a continuous account history.

Maestro flags account boundaries explicitly in the output so the processor can verify that the accounts in the summary match what the borrower intended to submit and that month coverage is complete across all accounts. This is one of the places where the structured output surfaces something that manual review often misses: a borrower who submitted 12 months for Account A and 6 months for Account B, when the lender requires 12 months for all accounts, will have the coverage gap visible in the summary rather than buried in a large document stack.

The goal across all of this is not to produce a black-box cash-flow score. It is to produce a structured representation of what the statements say, organized by the questions the underwriter actually needs to answer, with the ambiguous or flagged items surfaced rather than silently resolved. That output gives the loan officer a starting point that takes most of the page-by-page reading work off their plate while leaving the judgment calls with the people who are responsible for making them.

Cut the hours your team spends reading bank statements

Request early access and we will run Maestro's bank statement module on a sample file set so you can see the structured output before you commit.

Request early access