Skip to content

Case study

One set of numbers for a 41 location franchise network

Head office, the franchisees and the media agency each reported a different lead count for the same month. We consolidated measurement into one GA4 property, moved tagging server side and rebuilt reporting so booked jobs trace back to source.

Named only with client approval Figures marked are illustrative Reply within one business day

Attribution · this quarter

GA4 · server-side
Direct
Paid
Social
Organic
Email

312

Booked calls

3.1x

ROAS

−31%

CPL

The engagement, in short

OlDevs rebuilt measurement for a home services franchise network with forty-one locations across Ontario and Quebec, consolidating duplicate and inconsistent analytics into one GA4 property with a documented event schema every location shares.Tagging moved to a server-side Google Tag Manager container on the client's own subdomain so conversions survive browser restrictions and blockers, and Consent Mode v2 was wired to the banner so reporting reflects what visitors genuinely agreed to, with modelling clearly marked as modelling. Last click reporting was replaced by a Looker Studio view that ties phone calls, form fills and booked jobs back to source, with calls matched to jobs through the booking system rather than guessed at. The network went from 41 analytics properties to 1, recorded 27% more conversions after the server-side move, and reached signed off reporting 9 wk after the audit began.

Key facts

01Client
Home services franchise network with forty-one locations across Ontario and Quebec
02Industry
Home services franchising
03Services
Analytics & CRO, Performance Marketing
04Duration
4 months
05Platforms
GA4, server-side Google Tag Manager, Consent Mode v2, Looker Studio
06Outcome
41 analytics properties consolidated to 1, 9 wk from audit to signed off reporting

The challenge

Three parties, three lead counts, one meeting that never ended

Head office, the individual franchisees and the media agency each reported a different lead count for the same month, and every review meeting turned into an argument about whose spreadsheet was right. The underlying measurement made that inevitable: GA4 had been installed twice on several location sites, event names varied by whoever built the page, and the consent banner blocked tags without recording anything in their place. Nobody would commit budget to a channel they could not verify.

01

GA4 installed twice on several location sites

Some sites carried two GA4 installations at once, so a single page view or form submission was counted more than once. Location performance could not be compared, because the size of the error depended on who had built each site.

GA4 · Duplicate tagging

02

Event names invented page by page

One site called a form submission one thing, the next called it another, and a third counted a click on the button instead. With no shared schema, head office had to reconcile the differences by hand every month, and any location added after the last reconciliation simply went missing from the report.

Event schema · Governance

03

A consent banner that blocked tags and recorded nothing

The banner stopped tags from firing but passed no consent signal onward, so declined traffic vanished rather than being represented. Reporting understated activity by an unknown amount, and no one could tell refusal from a measurement failure.

Consent Mode v2 · Privacy

04

Last click reporting that stopped at the form

Reporting credited whichever channel touched the visitor last and ended at the form fill or the phone call. Nothing connected those enquiries to jobs actually booked, so a channel producing cheap unqualified leads looked better than one producing revenue.

Attribution · Reporting

What we built

One property, a shared schema and tagging the browser cannot drop

We consolidated measurement into a single GA4 property with a documented event schema shared by every location, so the same action carries the same name whoever builds the page. Tagging moved to a server-side Google Tag Manager container on the client's own subdomain, and Consent Mode v2 was wired to the banner so reporting reflects what visitors genuinely agreed to, with modelled figures clearly labelled as modelling. Reporting moved to a Looker Studio view that follows phone calls, form fills and booked jobs back to source, with calls matched to jobs through the booking system.

01

One GA4 property with a documented event schema

Forty-one separate setups were consolidated into a single property, with location held as a dimension rather than as its own account. The event schema is written down and versioned, so a new site is instrumented from the document rather than from memory.

GA4 · Documentation

02

Server-side tagging on the client's own subdomain

A server-side Google Tag Manager container runs on a subdomain the client controls, so conversions keep being recorded when browser restrictions and blockers interfere. The client owns the container, the hosting and the data flowing through it.

Server-side GTM · Data ownership

03

Consent Mode v2 wired to the banner properly

Consent state now travels with every hit instead of tags simply being blocked. Reporting distinguishes observed activity from modelled activity and labels the modelling in the report itself, so nobody presents an estimate as a measurement.

Consent Mode v2 · Privacy

04

Looker Studio reporting down to booked jobs

One view ties phone calls, form fills and booked jobs back to source and campaign, with calls matched to jobs through the booking system rather than assumed. Head office and each franchisee read the same report from the same definitions.

Looker Studio · Attribution

Process

How the engagement ran.

  1. Audit every location site

    We inventoried tags, containers, properties and event names across all forty-one location sites, then documented where numbers diverged and by how much, so the disagreement had a cause instead of a culprit.

  2. Agree one event schema

    Head office, the franchisees and the media agency signed off a single list of events, parameters and definitions, including what counts as a lead and what counts as a booked job.

  3. Build the server-side container

    We stood up a server-side Google Tag Manager container on the client's own subdomain, migrated conversion tags to it and validated each event against the schema before switching any site over.

  4. Wire consent and validate

    Consent Mode v2 was connected to the banner, then tested against accept, reject and partial choices so reporting reflected genuine consent and modelled figures were labelled clearly.

  5. Roll out and sign off

    Locations moved across in batches with side by side comparison against the old numbers, ending in a Looker Studio view head office and the franchisees both signed off.

Stack

What it was built with.

Analytics

GA4Google Tag Manager web containerServer-side Google Tag ManagerDocumented event schema

Consent and privacy

Consent Mode v2Consent banner integrationData retention settingsLabelled modelling in reports

Reporting

Looker StudioCall to job matching from the booking systemLocation level dimensions

Media measurement

Conversion imports to the ad platformsCampaign and UTM conventionsBooked job feedback into reportingChannel level reporting

Ways of working

A working demo every weekOne accountable teamClient owned containers and accountsWritten handover documentation

41→1

Analytics properties consolidated

+27%

Conversions recorded after server-side move

9 wk

Audit to signed off reporting

Outcomes

What changed for the client.

01

One number everybody reads the same way

41 analytics properties consolidated to 1, with location as a dimension and a shared event schema, so head office and franchisees stopped reconciling spreadsheets.

02

Conversions survive the browser

Conversions recorded rose 27% after the server-side move, not because more leads arrived but because fewer went unrecorded.

03

Reporting that reflects real consent

Consent Mode v2 carries the visitor's choice through to reporting, and modelled figures are labelled as modelling instead of quietly filling gaps.

04

Budget decisions with something behind them

9 wk from audit to signed off reporting, and channels are now judged on booked jobs traced through the booking system rather than on last click form fills.

In their words

The client on the result.

Head office and the franchisees argue about strategy now instead of arguing about whose lead number is correct.
AH

Marketing director, home services franchise network

Home services franchising

FAQ

Questions about work like this.

Separate properties made cross location comparison impossible and multiplied the maintenance. A single property with location as a dimension gives each franchisee a filtered view of the same data head office reads, so both look at one definition of a lead. Access can still be scoped so a location sees its own numbers.

Tags run on a server the client controls rather than entirely in the visitor's browser, so conversions keep being recorded when browser restrictions or blockers interfere with client side scripts. It also gives one place to validate events against the schema before they reach any advertising platform.

No. Consent state travels with each hit, and when a visitor declines, no identifiers are collected. What changes is that the refusal is represented rather than leaving a silent hole, and any gap filled by modelling is labelled as modelling in the report so nobody mistakes an estimate for a measurement.

Calls are matched to records in the booking system rather than guessed at from timing. When a call becomes a job, that job is tied back to the session, source and campaign that produced the call, so reporting can rank channels on work actually booked instead of on the volume of enquiries.

Yes, and that was a requirement. The shared schema and container standardise how activity is measured, not who is allowed to advertise. A franchisee running local campaigns gets those results in the same view as national activity, tagged consistently enough that head office can see both without a reconciliation exercise.

Still have a question? Ask us when you request a quote

Let’s connect

Have a problem like this one?

Tell us what is not working. We’ll reply within one business day with how we would approach it and a tailored quote.

We’ll only use your details to prepare your quote. No lists, no spam.

Call us Request a quote