Cash flow forecasting and credit assessment for Australian mortgage brokers.
Built for Crown Money Management, an Australian mortgage broker with 23 staff across 5 offices. Brokers upload bank statement PDFs, the system extracts and categorizes 200+ merchant types, runs trend-adjusted forecasting across 4 horizons, assesses compatibility with 8 major AU lenders, flags gambling and BNPL for submission review, and stress-tests against APRA scenarios. Full stack deployed on Vercel + Railway + Neon. First paying client from the MGT website.
0+
AU merchant categories
Auto-classified from Big 4 bank statements
0
Lender compatibility
CBA, Westpac, NAB, ANZ, Macquarie, Bankwest, ING, Suncorp
0
APRA stress scenarios
Rate +3%, income -20%, combined, inflation, IO-to-P&I
0
Commits shipped
Vercel + Railway + Neon PostgreSQL
Live Preview
Click 'Try with demo data' to see the full flow
Live preview is best on desktop.
Open Crown Money ForecasterThe Problem
Australian mortgage brokers review months of bank statements for every client application. The process involves downloading PDFs from multiple banks, manually scanning for recurring expenses, identifying income patterns, and building cash flow projections by hand, all before a serviceability assessment can be prepared for the lender.
Each of the AU Big 4 banks formats their statements differently. CBA, ANZ, Westpac, and NAB all use distinct layouts, date formats, and transaction description conventions. A tool that handles one format is not useful in practice. The extraction engine needs to handle all four accurately.
Beyond extraction, brokers need regulatory confidence. APRA serviceability requirements demand stress-tested projections at rate buffers. A forecast that cannot model those scenarios is not usable in an Australian lending context.
The Solution
Layout-aware PDF parsing handles the distinct statement formats used by CBA, ANZ, Westpac, and NAB. The extractor identifies transaction rows, parses dates and amounts, and normalizes the output into a consistent schema regardless of source bank.
A merchant recognition engine classifies over 100 merchant and expense categories automatically. Grocery stores, fuel, utilities, dining, subscriptions, salary credits, and transfer types are all identified and tagged without manual review.
Categorized transactions feed a projection model that calculates recurring income, fixed obligations, variable spending, and net cash position across future periods. Projections are visualized in the dashboard and exportable for lender submission.
The system runs APRA-aligned serviceability scenarios by applying regulatory rate buffers to the projected cash flow. Brokers can model standard and stressed scenarios side by side to confirm client eligibility before submitting to a lender.
A client-facing dashboard surfaces the key indicators brokers need at a glance: monthly surplus, largest expense categories, income stability rating, debt service ratio, and stress test result. All derived automatically from the uploaded statements.
The extraction and categorization pipeline runs as a Python async API. Endpoints handle PDF upload, extraction job dispatch, categorization, projection calculation, and dashboard data aggregation. All data persists to PostgreSQL for audit and re-analysis.
Extraction Pipeline
The pipeline is the core technical challenge of the project. Australian bank statements are not standardized. Every bank uses a different date format, column order, and transaction description convention. The extractor handles all four major banks without a separate code path for each, using layout detection to identify the format and normalize the output.
Broker uploads one or more bank statement PDFs. The system accepts files from CBA, ANZ, Westpac, and NAB. Multiple months can be uploaded in a single batch for consolidated analysis.
pdfplumber extracts the raw text and spatial layout from each page. A detection pass identifies the bank format based on header patterns and column structure, routing the file to the correct normalization path.
Detected rows are parsed into structured records: date, description, debit, credit, and running balance. Parsing handles edge cases like multi-line descriptions, fee rows, and transfer references that span fields.
Each transaction description is matched against a 100+ merchant and category library. Matches are scored by confidence. Unmatched transactions surface in a review queue where the broker can assign categories manually, improving future matches.
Categorized transactions flow into the projection model. Recurring items are identified by frequency and amount consistency. The dashboard updates immediately with the new data and all APRA scenarios re-run automatically.
Regulatory Compliance
The system applies APRA's serviceability assessment rate buffer to projected repayments, modeling the client's position under the regulatory minimum test. Brokers see the stress result before submission.
Net income against total debt obligations is calculated across all identified recurring commitments, giving the broker a clear DSR figure for each scenario without manual computation.
Multiple rate scenarios can be modeled simultaneously. The broker can compare base, stressed, and custom rate projections side by side to identify the optimal lender recommendation for each client.
Recurring income deposits are analyzed for consistency of timing and amount. The system produces a stability rating that reflects how reliably income arrives, which is a key factor in Australian serviceability assessments.
Variable expense categories are tracked month over month. Rising trends in discretionary spending are flagged automatically so the broker can address them in the client conversation before the application is submitted.
Every extraction, categorization decision, and projection run is stored with a timestamp. The full audit trail is available for compliance review and supports re-analysis if a client updates their statements.
Tech Stack
How This Started
Crown Money Management reached out through the MGT website contact funnel. They were looking for a developer who could build a real tool for their brokerage, not a WordPress plugin and not a generic fintech SaaS that almost fit their workflow.
The project is in active development. The extraction engine handles all four AU Big 4 bank formats. The categorization library is built and improving with each new statement batch. The projection model is live. APRA stress testing is in final review.
This is what getting leads from a portfolio that demonstrates real capability looks like in practice. The client did not need to be convinced. The work spoke for itself.
Whether it is a data extraction tool, a client-facing dashboard, or a custom workflow system, book a call and I will tell you exactly how fast it can ship.