Data Reconciliation at Scale: Lessons from $150M+ in Transactions
Reconciliation is the most underrated problem in finance. Everyone focuses on dashboards and forecasting, but if your underlying data doesn't match across systems, every downstream report is built on sand.
I've built reconciliation pipelines for trading operations handling $150M+ in annual transactions across settlements, custody, and cash. Here's what works — and what I wish I'd known earlier.
Why Reconciliation Breaks at Scale
At 100 transactions per month, manual reconciliation works fine. At 100,000, it doesn't. The problems compound:
- Timing differences: Trade date vs. settlement date vs. booking date — same transaction, three different dates across three systems.
- Reference mismatches: System A uses "EUR/USD 2026-03-15 SPOT." System B uses "FX00012345." Both refer to the same trade.
- Currency conversion: Three systems, three different FX rates from three different timestamps.
- Partial fills: One order in System A matches five executions in System B.
The Three-Layer Reconciliation Architecture
Layer 1: Exact Matching
First pass: match on primary keys (trade ID, reference number, amount + date). In my experience, this catches 70-80% of transactions automatically.
Key design decisions:
- Use composite matching (amount + date + reference), not single-field matching
- Allow configurable date tolerance (T+1, T+2) for timing differences
- Normalize reference formats before comparing
Layer 2: Fuzzy Matching
Second pass: for unmatched items, apply intelligent matching rules:
- Amount within tolerance (e.g., ±$0.01 for rounding)
- Date within window (e.g., ±2 business days)
- Partial match on reference (e.g., last 6 characters)
- Known mapping tables (System A's "EUR" = System B's "978")
This typically catches another 15-20% of transactions.
Layer 3: Exception Management
What's left after layers 1 and 2: genuine discrepancies. These need human review, but the system should:
- Categorize exceptions (timing, amount, missing, duplicate)
- Suggest likely matches with confidence scores
- Escalate after SLA (e.g., 48 hours unmatched = alert to manager)
- Track resolution time and root cause
Matching Logic: A Real Example
| Field | System A (Trading) | System B (Custody) | Match? |
|---|---|---|---|
| Trade ID | TRD-2026-0315-001 | — | N/A |
| Reference | EURUSD-SPOT-0315 | FX-987654 | Fuzzy |
| Amount | $1,250,000.00 | $1,249,999.99 | Yes (rounding) |
| Date | 2026-03-15 (trade) | 2026-03-17 (settle) | Yes (T+2) |
| Status | Matched | Matched | ✅ |
Resolution: Systems agree. The $0.01 difference is rounding. The 2-day difference is T+2 settlement. Auto-clear.
Metrics That Matter
Track these KPIs for your reconciliation process:
| Metric | Good | Acceptable | Needs Work |
|---|---|---|---|
| Auto-match rate | >85% | 70-85% | <70% |
| Exception rate | <5% | 5-15% | >15% |
| Resolution time (avg) | <24h | 24-72h | >72h |
| Unmatched >5 days | 0 | <1% | >1% |
| Reconciliation frequency | Daily/Real-time | Weekly | Monthly |
Technology Stack
For finance reconciliation at scale, I recommend:
| Component | Tool | Why |
|---|---|---|
| Matching engine | Python (pandas + custom) | Flexible matching logic |
| Orchestration | n8n | Scheduling, alerting, routing |
| Storage | PostgreSQL or Azure SQL | Structured exception tracking |
| Reporting | Power BI | Real-time recon dashboard |
| Alerting | Slack/Teams webhook | Instant exception notification |
Cost of Poor Reconciliation
Let me quantify this. A team manually reconciling 50,000 transactions/month:
| Cost | Calculation | Annual |
|---|---|---|
| Analyst time | 3 people × 80h/month × $75/h | $216,000 |
| Late error detection | ~$50K in annual write-offs | $50,000 |
| Audit findings | 2-3 findings/year × $15K remediation | $37,500 |
| Opportunity cost | Analysts on recon instead of analysis | Unquantified |
| Total | $303,500/year |
Automated reconciliation typically reduces this by 60-80%.
What I'd Do Differently
-
Start with data contracts. Define exactly what each system sends before building matching logic. I wasted weeks reworking match rules because source systems changed formats without notice.
-
Build the exception dashboard first. The matching logic is important, but visibility into exceptions is what drives business value. Start with "what's broken" before perfecting "what works."
-
Automate incrementally. Don't try to automate 100% on day one. Get exact matching working first (week 1-2), then fuzzy matching (week 3-4), then exception management (week 5-6).
Facing a similar challenge?
📅 Book a Free Call