How to connect your ERP and banks for a real-time P&L
A practical architecture to unify ERP, bank and sales-channel data into a single P&L that updates itself.
The bottleneck for almost any finance team isn't Excel or the ERP — it's the glue between them. Here's how to build that glue properly.
The three sources that matter#
For a decent monthly P&L, three sources are enough:
- ERP or billing: accrued revenue and expenses.
- Banks (via PSD2): real cash movements.
- Sales channels: Shopify, Stripe, marketplaces — the detail the ERP aggregates.
The integration pattern#
The key piece is a common data model that every source maps to. Don't try to join ERP tables with bank statements directly; you'll lose every time.
interface Transaction {
date: Date;
account: string;
amount: number;
category: string;
source: 'erp' | 'bank' | 'stripe' | 'shopify';
externalId: string;
}
With that unified model, the P&L generates from a single query.
Painless PSD2#
Good news: your banks have a legal obligation (PSD2) to give you API access to your transactions. Bad news: every bank implements it differently. The cleanest way is to use an aggregator (GoCardless, Tink, Plaid in Europe) instead of integrating bank by bank.
Refresh frequency#
- ERP: once a day is enough.
- Banks: hourly if you can, every 4h at minimum.
- Stripe/Shopify: real-time webhooks.
What not to do#
Don't consolidate the data inside the ERP. The ERP is for accounting, not analytics. Consolidate in a separate layer (a light data warehouse or an app like ours) and let the ERP do its job.
Want to see it on your own data? Book a demo.