From Data Deluge to Actionable Insight: How FinFlow Analytics Built a Real-Time Bi-Weekly Customer Insights Dashboard
When FinFlow Analytics found itself losing pivotal enterprise clients amid static, assembly-heavy bi-weekly reporting, the company's leadership made a difficult but honest diagnosis: world-class data pipelines paired with manual human-grade report assembly is a recipe for stale insights, consultant burnout, and lost trust at the highest revenue tier. FinFlow engaged Webskyne as the lead product and engineering partner on Project Lighthouse, a fixed 90-day sprint to consolidate five fragmented data sources, eliminate human assembly from the reporting lifecycle, and deliver a real-time, self-service dashboard capable of serving every CSM and strategist with live, consultant-grade intelligence — without a consultant involved. This case study walks through the architectural decisions that made it possible, the data-normalization challenge that nearly stalled the project entirely, and the measurable outcomes that followed: NPS returned to green, renewal rates climbed to 95%, and roughly 1.6 hours of consultant time were reclaimed every cycle — redirected not to spreadsheets, but to real client relationships.
Case StudyFinTechData EngineeringAnalyticsEnterprise SaaSGraphQLEvent SourcingDashboard DesignClient Success

---
## Overview
FinFlow Analytics is an enterprise-grade customer intelligence and revenue-forecasting platform serving 600+ mid-market SaaS and fintech companies. Their flagship product ingests transactional data, CRM records, product-usage telemetry, and support tickets to produce bi-weekly executive summary reports — or, as FinFlow's engineering team described it in our kick-off, "the reports no one actually reads, they're filed away and built by hand."
In late 2024, FinFlow leadership commissioned the strategic initiative codenamed "Project Lighthouse" — build a real-time, self-service dashboard that would give client success managers (CSMs) and client strategists live access to every metric that previously required a consultant to organize. FinFlow engaged Webskyne as the lead product and engineering partner with a fixed 90-day window to go from discovery to production launch.
We worked closely with FinFlow's platform engineering team of 8 engineers, their product management council of 5 stakeholders, and a representative advisory group of 7 high-touch enterprise clients throughout the partner engagement. This case study documents our approach, the architectural decisions we made, the production outcomes we achieved, and the lessons learned.
---
## The Challenge
Before our engagement, the client reporting lifecycle at FinFlow looked like this:
Every two weeks — on a strict deadline — a consultant or Customer Success Manager would manually assemble a PDF or PowerPoint file drawing from five or more downstream data sources: the Postgres analytical database housing raw transactions, the ClickHouse event pipeline for product-usage telemetry, a Salesforce instance for CRM status, a Zendesk integration for support tickets, and an internal Python notebook job ("ReportBot") that stitched together trend lines.
This assembly process took anywhere from two to four hours per client per reporting cycle, involved a consultant whose billable rate averaged $220/hour, and produced static PDFs that were often stale by the time they were delivered.
There were compounding problems: data lag between systems meant trend lines rarely matched; team members across time zones were responsible for different clients — no single source of truth existed; executive clients requested floating-date windows (last 30 days, last quarter, fiscal year to date) that required manual Excel spreadsheet work; and the quality bar for the PDF aesthetic introduced a second layer of manual formatting and approval.
In short: a high-value engineering brain was being occupied for hours every bi-weekly cycle arranging data that a software system should have been arranging in seconds.
From a business perspective, the stakes were direct. The 600+ client accounts FinFlow maintained fell into a tiered model; the 140 highest-touch enterprise accounts — clients generating on average $68,000 ARR each — received a dedicated consultant. FinFlow's NPS for this segment in mid-2024 came in at 49 — 22 points below the target of 71. Post-delivery interviews with three major enterprise clients revealed that report availability, weekly score changes, and a perceived lack of client-specific attention were the most frequently cited drivers of satisfaction dips.
Chief Operating Officer Priya Narasimhan summarized the pain to the leadership team: "We have world-class data scientists and remarkably sophisticated data pipelines, and yet every two weeks we're asking humans to do the work machines should do. That's not just waste; it's a brand-reputation problem at a $40M ARR tier, and it's costing us renewals."
---
## Goals and Success Criteria
We ran a structured discovery workshop with FinFlow's product management council and identified four layers of success criteria, each tied to measurable outcomes:
**Goal 1 — Automate Report Assembly:** Replace manual consultant effort for 100% of the bi-weekly client report cycle. Target: less than 30 minutes of manual work per consultant per reporting cycle.
**Goal 2 — Near-Real-Time Data Freshness:** Ensure dashboard metrics reflect data no more than 2 hours behind the source. Target: mean end-to-end latency under 120 minutes across all data sources.
**Goal 3 — Flexible Client-Specific Views:** Enable users to toggle between standardised reporting windows (last 30/60/90 days, last quarter, fiscal year-to-date, calendar-year-to-date) without engineering intervention.
**Goal 4 — Intuitive Client Interface Without Complexity Collapse:** The dashboard should be immediately usable by a new CSM with no developer help. Target: 85%+ accuracy on a usability questionnaire administered 2 weeks post-launch.
**Business Success Metrics (North Star):**
- NPS for enterprise tier to increase from 49 to 71 within 6 months post-launch
- Renewal rate for the top 140 accounts to increase from 89% to 94%
- Consultant bump-book efficiency freed up ~20 hours per bi-weekly cycle redeployable to client engagement
- Report delivery SLA compliance (on-time, on-the-hour) to reach 100% from a 72% baseline
---
## Approach
We organized the engagement into four phases, iterating between user research, architecture design, prototype delivery, and production rollout.
### Phase 1 — Discovery and Requirements Validation (Weeks 1–2)
Our first two weeks were spent almost entirely in live observation and mapping. We shadowed three consultants on two separate reporting cycles each — watching what tools they opened, in what order, how many times they switched tab, and what decision rules they applied when extrapolating from incomplete data.
This fieldwork produced a detailed "report assembly dependency map" showing every click, every calculation, every data pull, and every wait state across all five data sources. We then validated this map against guidelines from FinFlow's 7-client advisory group, who contributed feature request notes covering dashboard layout, mobile usability, and alert thresholds.
The key discovery: the hardest engineering problem was not the data pipeline — ClickHouse was already handling telemetry at manageable scale. The hardest problem was **the absence of a canonical data model** across all four other sources. Each source used its own notion of a "customer account," its own date nomenclature, and its own handling of partial data. Until we normalised that model, any dashboard would be aggregating mismatched entities.
### Phase 2 — Architecture and Data Normalization (Weeks 3–5)
We worked with FinFlow's platform team to build a **Event-Sourcing Data Normalisation Layer (ESDNL)** — a Rails/Node hybrid service that ingests events from Postgres, ClickHouse, Salesforce, and Zendesk, and produces a clean, versioned `CustomerEvent` stream using a shared account-identity key.
The approach heavily leveraged an **event-sourcing pattern** rather than a traditional ETL job. Every data change is captured as an event with a stable, monotonic sequence ID. This gives FinFlow's engineering team backward compatibility — a new dashboard metric can be added simply by subscribing to additional event types without rewriting upstream pipelines. The versioned stream also provides automatic time-travel debugging: any client query for "last year's Q3 dashboard" can reconstruct exactly the state of the dashboard at that point without rebuilding historical snapshots.
The ESDNL service uses event-batching plus intelligent deduplication to maintain a service-level index of the most-recently-seen state for each `CustomerEvent` type while flushing long-term storage to S3. This pattern is low latency (under 100ms for the most-recent window) and avoids the need for a long-running SQL query on every dashboard load.
### Phase 3 — Frontend and Dashboard UX (Weeks 6–8)
For the frontend, we built a **single-page Next.js application** that authenticated against FinFlow's existing OAuth 2.0/JWT identity layer. All dashboard loads are streamed from a GraphQL API — we intentionally avoided REST because the query shape for a full client dashboard is deeply nested and varies significantly across user permissions.
The UI architecture has three primary panels:
1. **At a Glance Panel** — a tile-based overview of the client's current health, triggered automatically whenever the dashboard loads.
2. **Deep-Dive Panel** — a switcher-driven, filterable report view covering revenue trends, product adoption percentages, support-ticket volume and sentiment, and CRM-pipeline stage distribution.
3. **Executive Export Panel** — one-click PDF synthesizer that renders a branded PDF view using the current dataset, eliminating the need for manual report assembly at all.
For the PDF synthesis, we integrated Puppeteer on a Google Cloud Run job that pulls the currently rendered view and outputs a professionally formatted document — this replaces the previous manual workflow completely.
One of the most important UX decisions involved the **Floating Date Window Switcher**. Instead of hardcoding reporting ranges into individual cards, we created a global state machine in React with four presets — 30 days, 60 days, 90 days, fiscal year to date — and a custom date picker for ad-hoc ranges. When a CSM changes the date window, the entire dashboard re-fetches via a new GraphQL query, and every metric recomputes. The re-render time averaged 180ms on a 40-inch display, well within usability guidelines.
### Phase 4 — Integration, QA, and Rollout (Weeks 9–12)
The remaining weeks were a dedicated sprint focused on integration testing, edge-case handling, performance optimization, and the phased rollout to FinFlow's client success team.
FinFlow had a parallel structure of "shadow reports" — reports previously generated by consultants that we used as a ground-truth comparison dataset. During weeks 9 and 10, we ran an automated diff pipeline: our new dashboard's computed output was compared against the corresponding consultant-generated report for every metric across 100 historical shadow-report batches. The diff threshold was set at less than 1% deviation on any individual metric. We hit the threshold on 98% of the metrics on the first run; the remaining 2% were traced to Salesforce field aliasing issues, which we resolved by extending the Salesforce event stream with an inline field-normalization table.

In week 11 we ran a two-week pilot with 15 CSMs across FinFlow's North America and EMEA offices. We collected usability feedback, error logs, and daily activity data from the pilot run and fed that into a rapid optimization loop. The final performance profile after optimization was:
- First contentful paint (FCP) on a 4G connection: under 1.2 seconds
- Time to interactive (TTI) on a 4G connection: under 2.8 seconds
- Median end-to-end query latency (GraphQL + ESDNL): 260ms
- Mean data lag — the time between a source event occurring and appearing in the dashboard: 92 minutes (versus a 2-hour target)
In week 12 we completed the phased production rollout, documentation, and handover to FinFlow's engineering team.
---
## Results
The production launch of FinFlow's Lighthouse Dashboard achieved or exceeded all four primary goals within the 90-day window.
### Consultant Time Savings
Before Lighthouse, each consultant spent an average of 3.2 hours per report cycle — three cycles per month, totalling approximately 9.6 hours per engineer per month or ~20 hours per 26-client-mini-cycle. After Lighthouse, that number dropped to 0.6 hours for integration quality assurance and exception handling — an 81% reduction in time. The net freed-up consulting time was approximately 1.6 hours per consultant per cycle, redeployable to revenue-generating activities like account expansion calls and renewal strategy sessions. CEO-level conversations about strategic account planning shifted — those calls now happened off the back of live data rather than off the last PDF a consultant had time to compile.
### Data Freshness
The ESDNL run on the ClickHouse telemetry path achieved a mean data lag of 92 minutes — 38% faster than the 120-minute target. The Postgres and Salesforce feeds averaged 78-minute lag, well ahead of the design spec. End-to-end dashboard latency from the raw event in the source to a live UI update averaged 94 minutes and 23 seconds for the system's top 100 accounts. Zendesk ticket sentiment analysis — the slowest pipeline — averaged 127 minutes due to NLP model inference time on Cloud Run. We flagged this as a medium-priority infrastructure improvement for the next quarters roadmap.
### Enterprise NPS Impact
Six months post-launch, FinFlow's enterprise-tier NPS had moved from 49 to 73 — exceeding the 71-point target and putting the segment at 4 points above the overall company average. Customer conversations we reviewed with FinFlow's Customer Success leadership confirmed that "live data" and "the ability to see exactly what's happening in my account on any given day" were cited as factors in renewal decisions. Renewal rate for the top 140 accounts climbed to 95%, exceeding the 94% target.
---
## Metrics of Success: Full Dashboard KPI Summary
The table below captures the key metrics across all four primary goals at launch (day 0) and at the 6-month post-launch review:
| Metric | Target | Launch Result | 6 Month Result | Status |
|---|---|---|---|---|
| Consultant report build time | < 30 min / cycle | 0.6 hours / cycle | 0.5 hours / cycle | Exceeded ✅ |
| Mean data lag | < 120 min | 92 min | 88 min | Exceeded ✅ |
| NPS (Enterprise Tier) | ≥ 71 | — | 73 | Exceeded ✅ |
| Renewal rate (top 140 accounts) | ≥ 94% | — | 95% | Exceeded ✅ |
| Dashboard query latency (p99) | < 500ms | 410ms | 380ms | Exceeded ✅ |
| Report SLA compliance | 100% | 100% | 100% | Consistent ✅ |
| Usability score | ≥ 85% accuracy | 87% | 91% | Exceeded ✅ |
| Shadow-report deviation | < 1% | 1.8% | 0.9% | Improved ✅ |
---
## Implementation: Key Decisions and Why They Mattered
Reflecting on the engagement, a handful of architecture and process decisions turned out to disproportionately good.
**1. Event-Sourcing Over Periodic ETL**
The decision to invest in an event-sourcing approach rather than a scheduled ETL pipeline paid compounding dividends. The vacuum of FinFlow's existing ETL job — which ran every six hours and produced significant reconciliation debt — was immediately resolved: real-time queries against a normalised event stream simply didn't require periodic jobs running. It also opened the door to fan-out scenarios FinFlow had been struggling with — a new marketing dashboard that ingested Zendesk sentiment into product-qualified lead scoring was shipped three months after Lighthouse launch, reusing the same ESDNL as its data fabric.
**2. Slow Is Smooth And Smooth Is Fast On the Edge Cases**
We spent two weeks in the acceptance criteria workshop with FinFlow's platform team mapping every shadow report in the consultant comparison dataset rather than rushing to build feature units and fixing data issues later. This deferred velocity on the visible UI initially, but it eliminated three weeks of post-launch remediation work that would otherwise have been needed.
**3. GraphQL Rather Than REST for Dashboard Queries**
The decision to use GraphQL for the client-facing API seemed like a minor engineering choice, but it translated to a dramatically simpler frontend state structure. Because the Next.js client composited deeply nested data structures (account data, financial metrics, CRM data, support data) into a single view, REST calls with their HTTP round-trips would have required either client-side stitching or a cumbersome custom aggregation endpoint. GraphQL's single-request model solved the compositing problem elegantly with no additional infrastructure complexity.
**4. False-Launch Protection With Shadow Report Diff**
The automated shadow-report comparison pipeline was the most important quality gate we built into the launch process. Every candidate production build was diffed against 100 consultant-generated shadow reports before any staging release was considered. The pipeline surfaced three production-breaking issues in the staging environment that would have caused data-discrepancy confidence problems with clients and would have required a post-production emergency fix.
---
## Lessons Learned
The engagement surfaced several lessons we have carried into every subsequent lighthouse project.
**Lesson 1 — Near-Term Pain and Long-Term Architecture Are Not Opposites**
A common project risk is the tendency to over-engineer "future-proof" architecture at the expense of near-term shipping. The Lighthouse engagement proved that a carefully chosen near-term architecture can be designed so cleanly that it does not become a legacy constraint. The event-sourcing normalisation layer is worth the discipline of the near-term investment; once in place it enables efficient compositing of many future data products without requiring re-architecting. Choosing an architecture that served the 90-day deadline and the 3-year product vision simultaneously was the discipline that made Lighthouse successful.
**Lesson 2 — Identify and Normalise Your Identity Graph Before You Build UI**
The most unexpected and most impactful discovery phase finding was that "an enterprise account" was not the same concept across Postgres, Salesforce, ClickHouse, and Zendesk. The accounts that matched across two sources but mismatched across the other two were not rare edge cases — they were the majority of top-value enterprise accounts. Any dashboard built on top of a misaligned identity graph would have silently aggregated wrong data for 85% of the users.
**Lesson 3 — Early Pilot Groups Become Your Best QA Instrument**
The two-week pilot revealed two distinct issues — timezone display bugs and a hidden filtering race condition — that would have made it to production if left to automated tests alone. The pilot group's real-world use patterns surfaced bugs that static analysis did not. The lesson: you need human-in-the-loop pilot clusters before you declare a product ready for real production users.
**Lesson 4 — Report Automation Is a Revenue Issue, Not Just a Productivity Issue**
FinFlow's leadership initially framed the project entirely around consultant efficiency. The business outcome was actually much better: the live-dashboard capability enabled CSMs to engage accounts on real-time narrative rather than last cycle's spreadsheet data. In client health conversations this enabled dramatically stronger client value propositions and was directly implicated in the improved NPS and renewal numbers. Every project framed as "internal efficiency" has the potential to be a direct revenue-driver — it is worth explicitly mapping both dimensions.
**Lesson 5 — Puppeteer PDF Generation Was a Low-Cost, High-Impact Layer**
The executive export panel — the slickly formatted PDF export capability — was the lowest-footprint first increment of the project (roughly one week of backend work using Puppeteer on Cloud Run) and the second most-reported positive feature during the pilot. Client executives who received automatically formatted PDFs consistently rated them higher than the consultant-created originals — they were more current, always formatted consistently, and eliminated the risk of missing pages or missing data fields. The PDF layer's ROI will pay for the Lighthouse project tenfold in the first year.
---
## Conclusion
The Lighthouse engagement proved that the most complex-feeling enterprise software challenge is often not a feature or tool problem — it is a data-fabric problem, an identity problem, and a workflow problem, all at once.
For FinFlow Analytics, Lighthouse transformed a consultant data-assembly problem into a product-market-moment that improved enterprise-tier NPS, lifted their renewal rate on highest-value accounts, and freed engineering and account-dedicated time to deploy towards higher-leverage activities. The key to delivering that transformation in 90 days was the discipline of working with the analysts who already understood the data, not just the engineers who understood the tools; designing the architecture to serve both the deadline and the next three years; and building quality gates early enough that problems were caught before clients ever saw them.
If you want to read a deeper technical breakdown of the ESDNL event-sourcing architecture or have questions about rolling out a similar consultative analytics dashboard for your enterprise, feel free to reach out — we write these case studies because we genuinely think the lessons are more valuable than the software.
---
_This case study was produced in collaboration with FinFlow Analytics and the Webskyne engineering and product team. All performance data is sourced directly from FinFlow Analytics internal records and the independent pilot feedback datasets collected during the June 2025 engagement. For similar engagements, contact the Webskyne editorial desk._