Reporting Layer
Analytics and Reporting
We pull GA4, Search Console, call tracking and your job records into one dashboard, so a visit can be traced to a call and a call to a job. A plain report lands every week and every month without anyone asking for it.
- Year 1Website
- Year 2Map Listings
- Year 3Booking Tool
- Year 4Front Desk
- Year 5Payments
- Year 6Reports
Same six pieces.
Ten layers, already running.
The Short Version
- Real data from Google and your phone line, not traffic guesses from a third party tool.
- Calls, rankings and jobs sit side by side, so you see what paid.
- Weekly and monthly reports send on their own, in plain words.
- Every comparison uses a baseline taken before the work started.
| Site data | GA4 |
|---|---|
| Search data | Google Search Console |
| Calls | CallRail |
| Jobs | Shop Desk or your CRM |
| Reports | Weekly and monthly, sent on their own |
| Baseline | Captured before work begins |
- SourcesGA4Search ConsoleCallRailJob records
- CollectDaily pullStored history
- MatchPage to callCall to job
- DashboardRankingsCallsJobs
- ReportWeekly emailMonthly email
What You Actually Want to Know
Most marketing reports are a pile of charts. Sessions. Bounce rate. Impressions. You read them, nod, and still cannot answer the one question you care about. Did this bring in work?
So we built our reports around that question. Which pages brought visitors. Which of those visitors called or filled a form. Which of those turned into a job. And how that compares to before we started.
Everything else is there if you want it. But the first lines of every report say what changed for the business, in plain words.
Where the Numbers Come From
We only use data that comes straight from the source.
- GA4 tells us who visited, from where, and what they did on the site. That includes visits from AI tools like ChatGPT and Claude, which GA4 logs as referrals.
- Search Console tells us what people searched when they saw you on Google, and where you ranked.
- CallRail tells us which calls came from which source and page. See CRM and phone.
- Your job records tell us which of those people paid you.
We do not lean on the traffic guesses that paid SEO tools show. We have compared them to real GA4 numbers on our own sites, and the estimates ran far below what actually happened. A guess is fine for spying on a competitor. For your own site, you have the real thing, so we use it.
How the Dashboard Is Wired
A job runs every day and pulls the latest numbers from each source into our own tables. We keep the history, so a trend never depends on how far back a vendor lets you look.
Then the dashboard lines things up. Rankings for each page. Calls and forms for each page. Jobs tied to those calls. You can open one city page and see it moved up in search, got more calls, and booked more work.
The weekly report compares this week to last week and names the movers. Here is the core of that step. It takes clicks per search term for two periods and returns the biggest changes.
def movers(before, after, top=5):
"""before and after map a search term to clicks."""
terms = set(before) | set(after)
change = {t: after.get(t, 0) - before.get(t, 0) for t in terms}
ranked = sorted(change.items(), key=lambda kv: kv[1])
losers = [kv for kv in ranked[:top] if kv[1] < 0]
winners = [kv for kv in reversed(ranked[-top:]) if kv[1] > 0]
return winners, losers
winners, losers = movers(
{"brake repair": 12, "oil change": 30},
{"brake repair": 25, "oil change": 22, "mobile mechanic": 6},
)
print(winners) # [('brake repair', 13), ('mobile mechanic', 6)]
print(losers) # [('oil change', -8)]The numbers in that sample are made up to show the shape. Real reports use your data.
Tying a Call to a Job
The hardest link in the chain is the last one. A call is logged with its source. A job is logged in the shop system. Nothing ties them together unless you build it.
We match on the customer. The phone number on the call is looked up against the customer on the job, in the same ten digit form, so formatting does not break the match. When a job opens within a set window after a call from the same number, the job gets credit for that call's source and page.
That match is careful on purpose. If a number fits more than one customer, we do not guess. The job is left unmatched and counted as unknown. An honest unknown is better than a report that gives a page credit it did not earn.
Once the link exists, the report can say something useful. Not "the brake page got visits" but "the brake page led to calls, and some of those calls became brake jobs." That is a sentence an owner can act on.
Reports That Send Themselves
A report you have to ask for is a report you stop reading. So ours send on their own. A weekly email says what moved. A monthly email says what the month brought in and what we plan next. Short milestones go out when they happen, like a page reaching the first page of Google.
The emails go through your CRM, so they come from a name you know and land in the same place as the rest of your business mail.
What It Saves the Owner
You stop logging into four tools to piece together a month. You stop paying for a report someone builds by hand. You can decide what to keep and what to cut based on jobs, not clicks.
Say a city page cost you a few hours to build. If the report shows it brought in calls that became jobs, you build the next one. If it did not, you know that too. That is the reporting service, and the dashboard behind it is the reporting dashboard build.
What We Learned the Hard Way
Take the baseline before the work starts. If you capture it a month in, your gains are already baked into it and the report will undersell the work. We pull the before numbers on day one and never overwrite them.
Search Console data lags a few days. A weekly report that ends today will show a fake drop on the last days. We end each window on the last complete day.
A report that stops sending does not tell you. The job can run and fail quietly. So we check that the report actually arrived, not just that the job started. See automation and scheduling for how.
To see how to find AI search visits in your own GA4, read AI search traffic in GA4. For the report template, read the weekly report guide.
Questions People Ask
Can you tell me which pages on my site actually bring in jobs?
Yes. We match visits to calls and forms, and calls to jobs. The report shows which pages led to paid work, not just traffic.
Do I need to log into Google Analytics myself?
No. The report comes to your email every week and every month. You can still log in any time, since the accounts are yours.
Can I see if people find me through ChatGPT?
Yes. GA4 logs visits that come from AI tools as referrals. We pull those out so you can see them on their own line.
Why do your numbers differ from my SEO tool?
Most SEO tools estimate traffic from the outside. We use real data from Google and your own site, which is what actually happened.
We sell time
Get Years of Building Switched On in Hours
A thirty minute call. A written price. Nothing built until you say yes.