Command Center

Everyone renders the same GA4 charts. What separates a Fortune-100 report is four things we can actually do.

An AI narrative that explains the numbers · goals and alerts that make it accountable · true custom-domain white-label · and closing the loop all the way to leads and dollars, not stopping at sessions. Three of the four are hard for a normal agency. They’re native for us — because we host the site, own the CRM, and write the code.

The one screen every merchant sees first:
“This month we generated [X] leads → [Y] became booked jobs → worth ~[$Z] → at [$CPL] each. For every $1 you spent, you got back $[ROAS].”
📊 See it live — the TCYM pilot cockpit

Why we can do this and they can’t

The unfair-advantage stack

Most agencies rent analytics from a vendor and paste client-side GA4 that ad-blockers eat. We sit one layer deeper — on the infrastructure itself. That turns enterprise measurement from a subscription into a property.

dns

We host the edge

Almost every client is Astro on Cloudflare — we own the hosting layer. That means first-party, server-side, cookieless measurement that ad-blockers and GA4 thresholding can’t eat. Enterprise-grade accuracy by default, not as an upsell.

13 of 17 clients on Cloudflare Workers
hub

We own the CRM

GoHighLevel already stores first-touch AND last-touch attribution on every contact, carries revenue up the pipeline via contactId, and does native call-tracking. We don’t build attribution — we inherit it, then join it to the edge data.

Live MCP: contacts, opportunities, payments
schedule

We run the cron

The Site Health engine (CLI-132) already pulls Lighthouse + axe on 13 sites nightly from an M3 + Cloudflare cron. The reporting pipeline is an extension of a muscle we already have, not a new machine.

Daily fleet job, dashboard shipped
code

We control the code

We author every Astro base layout. Dropping a first-party beacon, injecting hidden attribution fields into GHL forms, tagging conversions — all one-line changes we make at build time. No client IT tickets, no plugin roulette.

Base-layout edit ships to all sites

Speak the owner’s language, not the analyst’s

What we report — money first, by business type

Our owners aren’t marketers. They ask “did the phone ring, and did it turn into money?” — not “what’s my bounce rate?” So the template is segmented: the hero metrics change with the kind of business, but every one survives the filter “so what does this mean for revenue?”

call Phone-first trades Asphalt · Carpentry · Cleaning · Carpet · Flooring Call tracking is the spine — most leads arrive by phone, so a form-only view undercounts.
  • Leads (calls + forms, deduped)
  • Cost per booked job — the north star
  • Booking rate (target >60%)
  • Revenue per lead + ROAS
  • Lead source attribution
location_on Destination businesses Marina · Funeral home · Bowling · Salon “Come to us” businesses — Google Business Profile calls + direction requests outweigh form fills.
  • GBP calls + direction requests
  • Map-pack visibility (top-3?)
  • Review rating + velocity
  • Website clicks from GBP
  • Bookings / messages
shopping_bag Storefront / e-commerce PetalsWings (Shopify) + local pickup E-comm money metrics — plus GBP for local walk-in and pickup.
  • Sessions → conversion rate
  • Average order value
  • Revenue + ROAS
  • Top products / channels
  • Local GBP snapshot

The master menu the system can compute

Canonical metric taxonomy

★ = anchors the executive view. Everything else is available on drill-down or in the appendix for the owner who wants to dig. Grouped along the funnel, with the source we pull each from.

Executive / headline
The one screen. 4–6 hero numbers, each with a period-over-period arrow.
★ Leads / conversionsThe one number that = new businessEdge events · GHL · call tracking
★ Cost per lead / per booked jobWhat each new customer costsAd spend ÷ conversions
★ Revenue / pipeline valueROI justification for the retainerGHL opportunities + payments
★ ROAS / ROIDid the marketing pay for itselfSpend + attributed revenue
Goal progress (on-track / at-risk)Accountability against agreed targetsGoals engine
Acquisition & behavior
Volume and quality of traffic — the top of the funnel.
Sessions · new vs returningHow many showed up, reach vs loyaltyCloudflare edge / Umami
Traffic by channel & campaignWhich channel is workingEdge events + UTM
Engagement rate · time on pageQuality of traffic, not just volumeEdge events / Umami
Top landing pages / contentWhat’s pulling weightEdge + GSC
Geography vs service areaAre we reaching the right marketrequest.cf geo / GBP
Conversion & lead quality
Where traffic turns into money — and where it leaks.
★ Conversion rateEfficiency of turning traffic into leadsEdge events / GHL
★ Phone calls / click-to-callPrimary lead channel for local serviceCall tracking · GBP
★ Form submissionsDirect lead captureGHL forms
Lead → customer (qualified / booked)Lead *quality*, not just countGHL pipeline stage
Funnel steps (view → call / checkout)Where leads leakEdge events
SEO / organic search
Strat’s lane — visibility and the ranking narrative.
Keyword rankings + movementAm I showing up for what mattersGSC · rank tracker
Impressions · clicks · CTR · positionVisibility + how compelling the listing isGoogle Search Console
Branded vs non-branded queriesGrowing demand vs harvesting existingGSC
Core Web Vitals / page speedGoogle ranking + UXSite Health engine (live)
Site audit health scoreIs the foundation soundSite Health engine (live)
Local / Google Business Profile
Critical for our book — most of our clients live or die on local.
★ GBP calls + direction requestsHighest-intent, ready-to-buy signalsGBP Performance API
Profile views (Maps vs Search)Local visibilityGBP
Direct vs discovery searchesBrand-known vs newly-found customersGBP
★ Review rating + velocityReputation = conversion driverGBP / reviews
Map-pack positionDo they own the local gridLocal rank tracker
Revenue & unit economics
The premium tier — the story that renews retainers.
Revenue by source (first & last touch)Fair credit across the journeyGHL attribution + edge join
CAC · LTV · LTV:CACLong-term profitabilitySpend + GHL revenue
Pipeline / deal-stage valueFuture revenue visibilityGHL opportunities
Repeat / returning-customer rateRetention economicsGHL contacts
Benchmark vs tradeAm I winning vs my industryWebFX / LocaliQ / WordStream

The follow-up · our second unfair advantage

What GoHighLevel gives us that no one else has

Owning the edge answers “who came and from where.” Owning GHL answers “did it turn into money” — and GHL already does the expensive part. We don’t build attribution or call tracking; we inherit them and join them to the edge data. This is the difference between a traffic report and a revenue report.

timeline

Native first + last-touch attribution

Every GHL contact already carries First Attribution (static) and Latest Attribution (updating) — source, medium, campaign, referrer, landing page. We don’t build the multi-touch split every vendor charges for; we read it off the record and group revenue by it.

account_tree

The revenue chain by contactId

Contact → Opportunity (monetaryValue, status=won) → Payment (collected revenue) all join on contactId. A won opportunity inherits the contact’s attribution by transitivity. That’s how a website visit becomes an attributable dollar — the chain already exists inside GHL.

ring_volume

Native call tracking (no CallRail tax)

GHL’s own number pools do dynamic number insertion (min 4 numbers). The tracking number dialed maps to the session; the caller’s phone number is the deterministic join key to the contact. For phone-first trades we can attribute calls without paying for a separate CallRail seat per client.

payments

Payments & pipeline as truth source

list-transactions + opportunity pipeline give us booked and collected revenue directly — not an estimate. That turns "traffic up 18%" into "18% more traffic drove $4,200 in booked jobs." The ROI line owners actually care about.

reviews

Reputation + conversations in-platform

GHL manages reviews, SMS/email conversations, and appointment calendars. Review velocity, response rate, and booked-appointment counts come straight from the CRM we already run — no third-party reputation tool.

cable

Live MCP — already connected

ghl-tcym and ghl-two-chicks MCP servers are live in Aria’s session today (contacts, opportunities, conversations, payments, social stats). The reporting pipeline can pull real numbers now; scaling to all clients is a per-location OAuth, not new infrastructure.

Visit → dollars, deterministically

The attribution chain

Plant one join key at the top (a first-party _vid) and let GHL’s native fields carry the rest. Phone calls join on the caller’s number; revenue rides up the pipeline on contactId. That’s enterprise attribution — actual dollars traced back to a campaign or a session.

ads_click Web visit mint _vid (HMAC cookie) + read UTMs
arrow_forward
bolt Edge Worker first-party beacon · request.cf enrich · Analytics Engine
arrow_forward
person GHL Contact first + latest attribution · hidden _vid field
arrow_forward
trending_up Opportunity contactId · monetaryValue · status=won
arrow_forward
attach_money Payment contactId = collected revenue
The one trap to engineer around: GHL’s UTM cookie is domain-scoped. When an ad lands on the Astro site but the form posts to a leadconnectorhq.com iframe, attribution silently dies. The fix — capture UTMs + _vid on our page and inject them as hidden fields into the embedded GHL form — is a one-time base-layout change. Non-negotiable, and only we can make it because we write the layout.

Server-side first, because we can be

The data-capture architecture

Four layers. The edge Worker is the spine (more accurate than GA4, ad-block-proof, ITP-durable); Umami gives clients a polished cookieless UI cheaply; the nightly cron pulls platform + SEO + local; GA4 is demoted to Google-Ads plumbing. Recurring cost for the whole layer at ~15 sites: ~$5–25/mo.

A

Edge collection Worker — the spine

Cloudflare Workers + Analytics Engine

A tiny same-origin beacon (client.com/api/e — never a path with “track”/“analytics”) POSTs pageview + conversion events to a Worker. It mints an HMAC-signed HttpOnly visitor cookie (ITP-durable up to 400 days, exempt from Safari’s 7-day JS-cookie cap), enriches from request.cf (country, city, colo, ASN — spoof-proof, free), and writes to Analytics Engine. On conversions it fans server-to-server to GHL. Recovers 15–30% of the conversion data GA4 never sees.

B

Client dashboard tool — cookieless

Self-hosted Umami (~$5/mo, one VPS)

MIT-licensed, cookieless by default (no consent banner), unlimited sites, script proxied through our own Worker for ad-block resistance. Gives clients a polished traffic/funnel UI without hand-building charts. PostHog Cloud layered on only the 1–3 clients who need session replay.

C

Platform + SEO telemetry — no site code

Nightly cron (extend Site Health)

Pulls Cloudflare GraphQL Analytics (traffic/WAF/cache), Google Search Console (queries/rankings, bulk-export to beat the 50K-row cap), and GBP Performance API (calls, directions, views). Warehouse everything — retention walls are hard: Analytics Engine 90d, GSC 16mo, GBP 18mo.

D

GA4 — demoted to Google-Ads plumbing

Fired server-side via the Worker

Kept only for Google Ads conversion import (Smart Bidding), audience export, and the name on the report cover. NOT the source of truth — GA4 misses 25–40% of traffic and silently drops small-business rows below ~50 users (thresholding hits our clients hardest). Our first-party edge data leads every report; GA4 rides along.

One data layer, three surfaces

How it reaches people

Build the deterministic metrics once; the portal tile, the emailed PDF, the AI sentence, and the alert are all downstream consumers. The merchant gets a live portal and a monthly ritual; you get a cockpit over the whole book.

dashboard

Merchant portal

portal.madebyaspire.com — branded, always-on The client
  • Lands on a live Overview: 4–6 hero KPI tiles (big number + PoP % + ▲/▼ + color), then per-channel sections (tiles → chart → table).
  • Custom subdomain, Aspire branding, zero vendor URL — true white-label (the thing Looker Studio literally cannot do).
  • Section order tuned per client: phone-first trades lead with calls; destination businesses lead with GBP.
  • Mobile-first single column — the owner checks it on a phone.
mail

Monthly report

White-label PDF + live link, from our domain The ritual
  • The interpretation layer the dashboard can’t give: narrative, context, recommendations.
  • 3-sentence TLDR at the top for mobile, executive summary readable in ~90 seconds, detail in an appendix. Under ~10 pages.
  • Cadence: monthly for SEO/local; weekly for paid-media clients; weekly for the first 60–90 days of any new client, then step down.
  • Pairs with an optional 15-min walkthrough — turns a report into a conversation.
grid_view

Owner cockpit

Your cross-client view — never client-visible You (+ Jaime)
  • Every client is a card/row with 3–5 of their own KPIs (number + PoP % + green/red), filterable by tag and by who owns the account.
  • KPIs ↔ Goals toggle; optional roll-up table with an aggregate total across the book.
  • Surfaces cross-client risk at a glance: whose leads dropped, whose ROAS slipped, who’s off-goal.
  • Walled off from clients entirely — the same pattern Databox and AgencyAnalytics enforce.

What makes it read enterprise

The intelligence layer

auto_awesome

AI narrative — phrasing layer, not reasoning layer

The pipeline computes the load-bearing facts deterministically (deltas, MoM/YoY %, top-contributing dimension). The LLM only phrases them: “Leads up 22% MoM, driven by organic search.” It never does arithmetic or invents causes. Human edits before it ships; a template fallback degrades gracefully. This is the marquee differentiator across every premium tool — and it’s cheap for us because we already run Claude.

notifications_active

Proactive alerting — push, not pull

Flag conversion-rate drops, lead-volume drops, ad-spend spikes, off-goal pacing — always pairing a volume metric with a quality one (a spike of unqualified leads is not a win). Threshold rules for known limits + anomaly detection for the unexpected. Anti-fatigue: severity tiers, persistence windows, mute during planned changes. Surfaced to the owner cockpit and to Aria’s morning brief.

verified

Enterprise trust signals

“Data last updated” stamp on every view · per-section source labels (GA4 / GBP / GHL) · metric definitions on hover · caveat notes (“excludes internal traffic”) · drill-through to raw rows · a section flags itself stale rather than showing bad numbers. These are what make a report read Fortune-100 instead of hobby-dashboard.

Who builds what

Execution — roles & ownership

Most of this runs without you. Aria orchestrates and owns the data pipeline; Vegas owns everything client-facing and site code; Circa owns the GHL side; Strat wires the SEO/local feeds. Your five tasks are the human-gated decisions and access that unblock the rest — isolated at the bottom so nothing gets lost.

smart_toy
Aria
Orchestration + the data pipeline

Edge collection Worker · deterministic metrics engine · nightly telemetry cron (extends Site Health) · owner cockpit on CC · the hand-built pilot report. Briefs and verifies the specialists. Closes the loop between edge data and GHL.

web
Vegas
Everything client-facing + site code

Site-side instrumentation (beacon in the Astro base layout + hidden _vid/UTM fields into the forms) · the white-label merchant portal (portal.madebyaspire.com) · the PDF / email report renderer. Web craft is Vegas’s lane; Aria briefs, Vegas builds.

settings_phone
Circa
The GHL / CRM side

Call-tracking number pool · the conversion webhook (Worker → GHL) · verifying First/Latest attribution + payments/pipeline data is clean · defining the GHL-side “won” event. Circa owns GHL configuration.

search
Strat
SEO + local data feeds (Phase 1+)

Google Search Console rankings/impressions feed and the GBP local-performance feed. Minimal in Phase 0; wires in when the nightly telemetry cron lands.

person
Topher
The human-gated decisions + access

The money-event definition, ad UTM tagging authorization, Google/GBP API access, infra sign-off, and the pilot-report review. These unblock the build — see “Your tasks” below. Everything else runs without you.

The phase timeline

Prove the whole chain on one client first, then productize. Each phase ships something real. Total to a full-book rollout: roughly 8–11 weeks of specialist build time, sequenced behind the AD-first gate.

Phase 0
~1 week

Pilot on That Call You Missed

GREENLIT. TCYM is the ideal proving ground — live, ghl-tcym MCP already connected, and we’re spending on Meta ads right now, so there’s real paid traffic and real ad dollars to attribute against. Instrument the edge beacon, wire the hidden _vid + UTM fields into the demo/signup forms, stand up Umami, and hand-build one monthly report end-to-end. Proves the whole chain ad-spend → visit → call/demo → signup → dollars before we scale. Full task board below.

Deliverable: one real ROAS report + a live portal view for TCYM.
Phase 1
~2–3 weeks

The data spine

Productize Phase 0: the collection Worker as a drop-in for the Astro base layout, the nightly telemetry cron (CF GraphQL + GSC + GBP) folded into the Site Health job, and the warehouse that beats the retention walls. Clear the GBP Basic-Access quota gate now — it blocks local data at launch.

Deliverable: every Cloudflare-hosted client emitting first-party data.
Phase 2
~2 weeks

The deterministic metrics engine

One computed fact-set (deltas, PoP %, top-driver, goal + threshold evaluation) that feeds the portal tile, the PDF, the AI sentence, and the alert. Build it once; everything downstream consumes it. This is the leverage point the whole product pivots on.

Deliverable: metrics API returning per-client scorecards.
Phase 3
~2–3 weeks

Merchant portal + report renderer

Vegas builds the white-label portal (portal.madebyaspire.com) and the PDF/email renderer against the metrics engine. Brand it to the live v2.9 design library. AI-narrative + alerting wired in.

Deliverable: self-serve portal + scheduled monthly send.
Phase 4
~1–2 weeks

Owner cockpit + rollout

Cross-client cockpit on CC for you and Jaime. Roll the instrumentation across the remaining clients, tune alert thresholds, and set per-client cadence. Fold the health of the pipeline into the weekly self-audit.

Deliverable: whole book reporting; cockpit live; alerts tuned.

Greenlit · starting now

Phase 0 task board — the TCYM pilot

The exact sequence for the pilot on That Call You Missed, in dependency order. Each task has one owner. Steps 3–6 run largely in parallel once you’ve answered steps 1–2.

1
Confirm the live ad destination + the money event Topher

Which URL do the Meta ads point to (that’s what we instrument)? What counts as a conversion for TCYM — a booked demo, a signup ($1,995+$399/mo), or a call to Grace? What’s a “good month” target number? ~15 min; unblocks everything.

2
UTM-tag the live Meta ads Topher → Circa

Every live ad needs utm_source / utm_medium / utm_campaign. Without it, paid attribution starts blind. You authorize; Circa (or Aria) applies it in Meta Ads Manager. Do this first — it also improves the ads immediately.

3
Stand up Umami + the edge collection Worker Aria

One small VPS (or M3) for cookieless Umami, proxied through our Worker. Deploy the collection Worker that mints the _vid cookie, enriches from request.cf, and writes to Analytics Engine.

4
Site-side instrumentation on the TCYM site Vegas

Drop the beacon into the TCYM Astro base layout; inject hidden _vid + UTM fields into the demo/signup forms (the domain-scoped-cookie fix). Aria briefs with the exact snippet contract.

5
GHL wiring on the TCYM location Circa

Set up the call-tracking number pool on the TCYM number; stand up the conversion webhook (Worker → GHL); verify First/Latest attribution + payment fields populate on a test lead end-to-end.

6
Build the metrics + the pilot report Aria

Join the edge data with the ghl-tcym MCP pull (contacts, opportunities, payments), compute the scorecard, and hand-build the first monthly ROAS report + a live portal view for TCYM.

7
Review the pilot report — is this the template? Topher

You look at the real report on real TCYM data and tell me what’s missing or wrong. Sign-off turns the pilot into the product — Phase 1 productizes exactly what you approved.

Your tasks, Topher

Five items. The first two unblock everything — the rest can trail by a few days.

Now
Confirm the live ad destination URL + define the “money event” for TCYM (demo / signup / call) + a target number.
Unblocks the whole pilot. Everything is instrumented against the answer.
Now
Authorize UTM tagging on the live Meta ads (I’ll draft the exact tags; you say go, or add them yourself in Ads Manager).
Paid attribution is blind until the ads carry UTMs. Also makes the ads better regardless.
This week
Green-light where Umami lives — a ~$5/mo VPS (I’ll pick one) or on the M3.
One infra decision. M3’s future is unsettled, so I lean VPS — your call.
This week
Grant / confirm Google Business Profile + Search Console API access for the Aspire Google account.
Needed for the local + SEO feeds. The GBP Basic-Access quota gate takes days to clear — starting now keeps Phase 1 unblocked.
End of pilot
Review the TCYM report and sign off (or redline) before it becomes the template.
The pilot report is the product spec made real. Your redlines are cheaper now than after we build the renderer.

The economics

What it costs, what it’s worth

~$5–25/mo
Total analytics infra at ~15 sites (Umami VPS + occasional CF Workers Paid)
$0 net-new
AI narrative — we already run Claude; the cron already runs on M3
Retention hook
A monthly ROI report is the single strongest reason a client renews a retainer
Where this sits against the gate: this is AD internal capability that compounds across every client — squarely inside the AD-first thesis. It also becomes a sellable product tier (the “Intelligence” or reporting retainer) and the natural home for the Site Health engine’s output. Phase 0 is greenlit on That Call You Missed — live, on Meta ads now, so we prove the full ad-spend→visit→call→booked→dollars chain on real paid data (and on our own sub-brand, where we control the whole funnel) before committing specialist weeks. One week, near-zero cost. Revenue timing and any client-facing pricing stay yours.

Sources: AgencyAnalytics · Databox · HubSpot · Semrush · Whatagraph · Cloudflare Workers/Analytics Engine docs · GHL API v2 · WebFX / LocaliQ / WordStream 2026 benchmarks. Full citation set in the session journal.