AGENCY
ZGRZ Agency

CFO finance dashboard for a performance-marketing agency

Within 6–8 weeks, for an agency managing 20–40 active clients: 45–55% less time spent on weekly reconciliations, 70–80% less time spent preparing transaction records and invoices, and 40–50% fewer overlooked small recurring SaaS charges.

 

FinTech
Directus CMS
Back-Office Development
Internal System
Internal Operations
Dashboard
B2B
Analytics & Reporting

About the Project

Internal financial-control platform for the CFO and operations team of a digital agency. The core workflows include monitoring cash flow and spending across any reporting period, identifying problematic payments, separating agency expenses from pass-through client budgets, and generating transaction-confirmation exports on demand. The platform serves as the single source of truth for transactions and supporting documents, making P&L and margin calculations transparent, traceable, and evidence-based.

 

About Customer

A performance marketing agency managing 20–40 active clients across Google Ads and Meta campaigns. Every day, the team processes dozens of small transactions, including SaaS subscriptions, one-off services, contractor payments, and advertising-related expenses. Financial data was previously reconciled manually, which meant smaller charges could be missed and gradually erode profitability. The client also needed a clear separation between agency operating expenses and pass-through client budgets to make margins easier to understand and defend.

 

Small SaaS charges go unnoticed

 

Individually trivial, collectively a real margin hit and an end-of-month surprise.

 

Pass-through vs. agency expense ambiguity

 

Without an evidence-based classification model, transit client payments and actual agency costs become indistinguishable in the P&L.

 

Problematic payments discovered too late

 

Declined charges typically surface only after a SaaS provider has already cut access — triggering a chain of operational disruptions.

 

Proof-package requests turning into manual work

 

Pulling transactions and invoices for a given period was repeatedly turning into manual searches across statements, screenshots, and spreadsheets.

 

No repeatable weekly cadence

 

The CFO needed cashflow and cost structure visibility on a fixed weekly rhythm, not as a one-off spreadsheet exercise.

 

Proposed Solution

We built a headless system in which Directus serves as the operational center and rules engine — managing everything from raw data and roles through classifications, status vocabularies, and document templates. A React/TypeScript interface sits on top of that model as the user-facing application. Node.js (Express) handles integrations and background automation: imports, document generation, notifications, and event triggers.

 

Architecture

We built the domain model in Directus around clients and vendors, invoices, transactions, expense categories tagged on two axes (Agency vs. Client Pass-Through), statuses, and service dictionaries. Directus also enforces the CFO's evidence rules: mandatory transaction classification, validation of critical fields, consistent status vocabularies, and traceable paths for the standard recurring charge types.

 

Expense classification

 

We designed the workflow so that a transaction only enters the operational layer once it carries a defined ownership and category. Classification can happen automatically through rules or through controlled manual labeling in Directus with roles and audit history — making it possible to see at a glance whether a given charge belongs to the agency or to a client's pass-through budget.

 

Status control layer

 

We treated statuses as a live signal layer so the system can expose a focused view of problematic payments and trace each one back to context — which SaaS service, when, what exactly was charged. The goal was a single source view where any concerning charge surfaces immediately.

 

Import into a unified structure

 

We designed a controlled import pipeline bringing transactions into one schema with unified fields, statuses, and counterparties. Vendor-name and description normalization rests on Directus-managed dictionaries and mappings, so a recurring SaaS charge does not appear as five different vendors across five statements.

 

Proof package generation

 

We implemented proof generation as a first-class system feature: select a period and filters → matching transactions are fetched → relevant invoices are attached → a client-ready document is generated. Template and counterparty details live in Directus, so format changes do not require frontend deployments.

 

React interface

 

We concluded that the interface should not invent financial logic — it should display it. We designed weekly cashflow aggregates, a transaction log with filters, drill-down to invoice level, and visible status control. All evidence and consistency live in the Directus data model and rules.

 

We walked through the agency's weekly and monthly financial-control cycle, then mapped where the CFO was losing hours, what was still being checked by hand, and what questions came from the owner and the account team, documented the recurring critical situations: small SaaS charges, duplicate payments, transactions without context, and declined charges noticed too late. Output: the operational scenarios the system had to close first, and the minimum field set that makes a transaction defensible.

 

Directus CMS
PostgreSQL
SendGrid
Slack

+5 Resource

Results

The company reduced the CFO’s manual financial workload and turned transactions and approval flows into a repeatable operational process. The impact was measured against the agency’s real day-to-day operations while serving a portfolio of 20–40 active clients.

 

−45–55%

time spent on weekly reconciliation of expenses and incoming funds

−70–80%

time spent on preparing transaction + invoice proof packages

 

40–50% reduction

in missed small SaaS charges over the first 6–8 weeks of production use

 

30–40% reduction

in time to close the financial month

Audit-ready by default

every transaction carries classification, status, and counterparty context; every classification or status change is logged

 

Single source of truth

for transactions and supporting documents — P&L and margin defensible without a side-spreadsheet exercise

Get in Touch

Or send us a message and we'll get back to you within 15 minutes during business hours

Enter your name

Enter your email

Enter your message

Andrii Trubai

Andrii Trubai

CEO | Head of WebDev department

More Success Stories