GROWTH ANALYTICS · REVENUE RECONCILIATION · POWER BI · EXCEL
673 tests ✓
GrowthOps OS
Ad platforms claimed $3.72M in revenue; the business collected $3.06M. Two bridges explain every dollar between them. A monitor traced a nine-point drop in lead quality to one new Meta campaign, a deliverability check caught deadline emails going out from an unwarmed domain, and the payment workflow flagged nine buyers who paid but never got access. The Power BI report and the Excel workbook reach the same findings on their own, and agree to the cent.
Approach and evidence
A fictional coaching business six months after a CRM migration, generated over fifteen months with problems planted in it: a broad-audience campaign that buys volume rather than quality, a landing-page release that strips UTMs, short links with broken tags, a switch to an unwarmed email domain just before the enrollment deadline, duplicate contacts and lost deal links, and an access-provider outage on launch day. The reconciliation walks from what Meta, Google and LinkedIn report to the net cash the warehouse credits to paid media, and from CRM bookings to cash, with every step computed separately and nothing left over. Meta reports 7.3× return on ad spend; on collected cash it is 3.3×. Change detection splits each movement across campaigns and landing pages, and a test checks that it finds every planted problem with the right cause.
The BI layer reads one governed snapshot of the dbt marts. The seven-page Power BI report is generated from a specification, not clicked together: 215 measures with descriptions, KPI tiles drawn as SVG that turn red when a cost rises, page headers that name the filters in effect, a filter panel, and an executive summary written in DAX that names meta_broad_v17 as the weakest campaign at scale without being told. It was opened, refreshed and queried in Power BI Desktop, and CI regenerates it and fails on any drift. The Excel workbook runs off one reporting-window control: KPI tiles against the prior window, findings written by formulas, a campaign scorecard, email health, a revenue waterfall and fourteen reconciliation checks that must all be zero. Its calculated values are tested against the same figures computed in Python.
Around it: paid media down to cost per booked call, email on human opens rather than privacy-proxy opens, HubSpot run as a production integration in a developer test account (a two-way sync under a field-ownership contract, where HubSpot owns the CRM record and GrowthOps its analytics; change sets a named person approves, re-checked before and read back after every write; signed webhooks; renewal tasks for customer success; and the product catalog, line items and a support pipeline), an idempotent payment-to-access workflow with retries and a dead-letter queue, and ask-your-data with no language model or API key: it reads the period, ad platform and measure a question names, offers suggested questions, and answers from governed numbers, cites a definition or refuses, with no wrong answers on a 182-question test set.
6 / 6
PLANTED PROBLEMS FOUND
7.3× → 3.3×
META ROAS, CLAIMED → CASH
✓ 673 tests protect cash conservation in all six attribution models, both revenue bridges, detection of each planted incident with its root cause, the email and short-link checks, the HubSpot field contract, sync, conflict checks and webhook signatures, webhook idempotency and retries, the ask-your-data question contract, every field and measure the Power BI report binds, and the Excel workbook’s calculated values; CI rebuilds the data from scratch and fails if the report or the snapshot drifts by a byte.
SEE THE POWER BI REPORT AND WORKBOOK↗
DOWNLOAD THE WORKBOOK (.XLSX)↓
▶ OPEN LIVE APP↗
READ THE CASE STUDY↗
OPEN REPO↗