Case study Summer 2026 Mobile tire service

Closed-loop spend scaling

A roadside tire business had run for almost a year with less than a job a day. Ad spend needed to increase, but increasing without data was hard. Three ad platforms each reported a fraction of what was happening. None could answer the only question that mattered: did the call turn into work?

A Google Analytics 4 reporting view: a channel-group traffic chart above a table of users and sessions by channel. GA4 Sessions and call-button taps on the site — but a tap it often couldn't trace back to a source.
The Google Ads campaigns screen, showing the campaign list and a clicks-over-time chart. Google Ads Calls tied to campaigns and keywords, and blind to every call it didn't serve.
A Google Local Services Ads leads table listing calls by job type, charge status, and date received. Local Services Ads A separate console of leads, joining to neither of the other two.
Three platforms, three partial views of the same phone call.
Screenshots are Google's own product imagery, not this account's data.
3 Sources joined GA4, Google Ads, Local Services Ads
10× Spend increase Across channels, owner-initiated
1–2 mo To that decision From reluctance to double the budget
§ 01 Situation

Almost no calls, in the season that should have been busiest

Mobile commercial tire service — where a stranded driver searches once and calls whoever answers. Demand isn't the constraint. Being findable at the moment of the search is.

The owner rarely did more than a job a week. It should have been the busy season. Ads pointed at a Google Business Profile; there was no website for credibility or to place conversion tracking and no landing experience to tune.

Every measurement decision that followed depended on first having somewhere to measure.

§ 02 The surface

Somewhere to measure

The site exists to do one thing: turn a search into a phone call. Everything on it is arranged around a single action — tap to call the owner via a tel: link in the header, again as the primary button, and again at the end of every section.

The site was built with SEO and advertising in mind, structuring itself around the searches and ads being run for the clientelle it the business is trying to reach.

It was built to stay light. A driver on the shoulder of I-20 is on a bad connection and just wants to find help fast.

The Breaux's Roadside home page: a dark hero reading 'Semi down? We get big rigs rolling', with a 50-mile service radius line, an Available 24/7 badge, a large Call 601-594-5803 button, a Call Now button in the header, and a commercial tire service panel below.
The customer-facing site. Two call actions visible before scrolling, and the availability and service area stated before anything else. Opens the live site.
§ 03 Sequence

The order mattered

Each step was a precondition for the next.

01 Built the customer-facing website A real landing destination for paid traffic, and the first surface capable of hosting conversion tracking.
02 Rebuilt Google Ads, added Local Services Ads Phrase-match search on semi and commercial tire queries, Performance Max, and LSA.
03 No unified tracking Three platforms reporting separately, in incompatible formats, with no way to see a call end to end.
04 Built the attribution layer One row per call, joining platform data to the outcome the owner recorded by hand.
05 Used it to increase ad budget Cut spend on traffic that didn't convert; increased spend on traffic that did.
§ 04 Problem

Three systems, three partial truths

GA4 Site sessions and tel: click events — a real conversion on a business that runs on calls. Tracing a tap back to its source was difficult and often impossible.
Google Ads Its own call reporting, tied to campaigns and keywords. Blind to anything it didn't serve.
Local Services Ads Lead records in a separate console with its own ratings. Doesn't join to GA4 or Ads at all.

Left alone this produces two failures: the same call counted twice by two systems that each claim it, and a call counted by none of them — credited to no source at all. Both distort the only number that decides budget: what a source actually returns.

The deeper gap: all three measure calls. The business makes money on jobs. A cost-conscious owner asked to spend more isn't asking how many phones rang.

§ 05 Build

End to end call tracking

Began in Google Sheets, fed by a simple Google Form — a deliberate choice over anything more sophisticated. The outcome data could only come from the person answering the phone, so adoption was the binding constraint. A tool the owner fills in between jobs beats a better one he abandons.

The Call Form responses spreadsheet: one row per call, with columns for call timestamp, call time, call day, call category, request description, whether the job was done, and why it was not.
One row per call, and the two columns no ad platform could fill: whether it became work, and if not, why.
Joining three sources to an outcome Owner-entered data
Join key

Normalize reported phone number to LSA format.

Aggregation

Aggregation by date, source, type, and outcome. Charts built on that data made gaps and trends visible directly.

Source Attribution

LSA calls are exported with a time and phone number, Google Ads calls with a 1-hour time range and ad category. This is enough - start with LSA number and time matching, fallback to Google Ads category and time matching = reliable attribution, especially for relatively low call volume.

Outcome

The owner records what the call was and whether it became work — the same details he still records on job forms today. That column is the one thing no platform could supply.

Known limitation

Call data is self-reported and hand-entered, so it carries the usual risks. It was reconciled against platform call counts to catch gaps, but it isn't instrumented ground truth. It was accurate enough to make budget decisions with, which was the bar it needed to clear.

§ 06 Result

Measurement unlocked the spend

The owner was reluctant to double his ad spend. Within one to two months — call volume visibly climbing, each call traceable to a source and an outcome — he was spending more than ten times the original budget across channels, confidently.

An owner who won't increase ad spend because he can't see what it returns isn't being stubborn. He's responding correctly to missing information.

That decision is the strongest evidence the system worked, and better evidence than a figure would be. Nobody multiplies their ad spend tenfold on a channel they can't see returning.

§ 07 Ongoing

The problem it surfaced next

Better measurement produces better problems. With calls classified by outcome, leaks became visible: some calls measured as "conversions" by Google Ads weren't converting to jobs, and searchers who landed on the page and left because it didn't show what they were looking for.

Resulting work: tightening keyword targeting, plus landing page changes to increase call-rate. Then watching the outcome to confirm improvement instead of guessing.

§ 08 Consequence

Why this became software

Running the Sheets system revealed how much was tracked by hand elsewhere:

  • Call attribution in a Google Form feeding a spreadsheet
  • Invoices in separate third-party software
  • Tire inventory counted manually
  • Quotes calculated by hand, unlinked to the job they became
  • No expense tracking at all
  • No customer accounts at all

Not six problems — six views of one event. A call arrives from a source and becomes a job, the job consumes tires, produces an invoice, generates expenses, and belongs to a customer. Modeling that event once collapses all six.

How that became an internal tool →