Multi-location IV therapy franchise · Reporting & attribution

15+ locations, one attribution gap, quarterly reporting that runs itself.

Context
A franchise IV therapy operator with more than fifteen clinics across two states, reporting to both corporate marketing and individual franchisees off numbers nobody trusted.
Problem
Location data was not passing on conversion events, so per-clinic performance could not be attributed: corporate could see aggregate spend and aggregate conversions, and could not defend a budget decision at the clinic level. Quarterly reporting was assembled by hand, which capped both frequency and depth.
Role
My role: owned the diagnosis, the reporting architecture, and the client-facing deliverables. Team: the agency's paid media leads supplied campaign context and executed account changes; I did not manage the ad accounts day to day.
Work
Traced the attribution gap to the event layer in GA4 and corrected the conversion configuration so location resolved on every conversion. Rebuilt the reporting layer on scheduled pulls rather than manual exports, reconciled ad platform conversions against call tracking, and shipped automated per-location quarterly reports: each with territory and drive-time analysis behind the geographic recommendations.
Outcome
Per-location attribution restored across every clinic. Quarterly reporting produced from live data with a generated client-facing PDF per location, and a corporate rollup on the same definitions.
Stack
  • GA4
  • Google Ads
  • Call tracking
  • BigQuery
  • Looker Studio

Tracing the gap to the event layer

The reporting was not wrong so much as unmeasurable, and those two problems have very different fixes. Location was not being passed on conversion events, so per-clinic performance could not be attributed at all: corporate could see aggregate spend and aggregate conversions, and could not defend a budget decision at the level of a single clinic. No amount of dashboard work resolves that, because the number the dashboard needs is not being collected.

So the first work was in GA4, not in the reporting layer: tracing the attribution gap to the event configuration and correcting it so that location resolved on every conversion. That is the unglamorous step that makes everything after it possible, and doing it in the other order, building the reports first, would have meant restructuring around a comparison nobody could trust.

Reporting that runs itself

Once location resolved, the reporting was rebuilt on scheduled pulls rather than manual exports, and ad platform conversions were reconciled against call tracking so the totals meant one thing rather than three. The manual quarterly assembly that had capped both the frequency and the depth of the reporting was removed, which is what let the same engagement serve both audiences at once.

The output was a generated per-location PDF for each clinic and a corporate rollup built on the same definitions, so a franchisee and the head office read numbers that agreed by construction rather than by luck. For a group of more than fifteen clinics reporting to two audiences, that shared definition is the thing that stops every quarterly cycle turning into a reconciliation argument.

Why the clinic was the unit that mattered

Aggregate numbers were not just less useful here, they were actively misleading: a healthy average across more than fifteen clinics can hide a handful of locations quietly losing money, and budget moved on the average keeps feeding them. The point of restoring per-location attribution was to make the clinic, not the account, the unit of analysis, because that is the level at which the operator actually spends and decides.

That is also why the per-location deliverables carried territory and drive-time analysis behind their geographic recommendations rather than a single national view. A recommendation about where demand actually sits is only defensible when the performance data underneath it resolves to the location it describes. Once the event layer passed location cleanly, that per-clinic view was something the reporting could produce on a schedule instead of something a person rebuilt by hand each quarter and could never quite trust. And because the machine produces it, adding the sixteenth or seventeenth clinic costs a line of configuration rather than another afternoon of assembly.

Further reading