Sheppard

Build it

Marketing attribution that reconciles to booked revenue, not platform-reported conversions

Most home services operators run on attribution that ad platforms report to themselves. Google Ads says it sourced 1,200 leads, Meta says 800, and the dispatch system shows 1,400 booked jobs that don't reconcile to either. The fix is an attribution warehouse the CFO can sign off on.

By Chris SheppardJune 26, 202611 min read

Every CFO has been here. The marketing team presents a deck showing $4.2M of marketing-sourced revenue. The financial system shows $52M of total revenue. The dispatch system shows 14,000 booked jobs. Nothing reconciles. The CFO can either trust the marketing report and accept that 8 percent of the topline is unverifiable, or treat the marketing report as directional and run the business off the financials. Most run off the financials.

This is the root cause of the broader problem operators describe as 'my agency reports activity but the P&L isn't moving.' It isn't that the agency is lying. It's that the attribution they use is built from ad-platform exports, not from the operation's actual booked-revenue ledger. Those two systems disagree by design, and the disagreement compounds every month.

Why platform-reported attribution doesn't reconcile

Google Ads, Meta, and the rest of the ad platforms measure conversions using their own pixel data and click attribution windows. A 'conversion' in Google Ads is a tracked event that fired within the conversion window after an ad click. A 'lead' in your CRM is a record created when someone called or filled a form. A 'booked job' in your dispatch system is a record created when the dispatcher confirmed the appointment.

These three systems use different identity resolution, different time windows, different definitions of a 'conversion,' and different attribution models. They will never reconcile to each other on their own, and the gap between them is where the operator's view of marketing performance goes to die.

  • Google Ads counts a conversion if a tagged form was submitted within 30 days of a click. It doesn't know whether the form became a booked job or revenue.
  • Meta counts a conversion if its pixel fired (often a Lead event) within a 7-day click or 1-day view window. Same problem.
  • Your CRM records leads by source as captured at form-fill or call. Source attribution is often whatever the form's UTM parameters said, which is often blank or 'direct.'
  • Your dispatch system records booked jobs and revenue. It generally has no idea where the customer came from in marketing terms.
Four systems, four definitions of a 'conversion,' four attribution windows. They will never reconcile on their own. The CFO is right not to trust them.

The attribution warehouse pattern

The fix is an attribution warehouse: a data layer that ingests events from every system, resolves them to a single customer identity, and produces a reconciled view of marketing-sourced revenue that the CFO can sign off on. Conceptually it's three things: an identity graph, an event store, and a reconciliation layer.

1. Identity graph

Every customer interaction across every system needs to resolve to one canonical customer record. The graph stitches phone numbers, email addresses, form fingerprints, ad-click IDs (GCLID, FBCLID), CallRail session IDs, and dispatch-system customer IDs into a single resolved identity. This is the unsexy 70 percent of the work and the part most operators skip.

2. Event store

Every event from every system flows into one Postgres-or-equivalent event store, timestamped, with the source system tagged. Ad clicks, form submissions, calls, bookings, dispatch outcomes, invoices, payments. The warehouse is the source of truth for what happened. The reporting tools query it; they don't define it.

3. Reconciliation layer

A set of SQL transforms (dbt-style is the cleanest) that produces the canonical 'marketing-sourced revenue' view. Joins the booked-job record back through the customer identity graph to the original ad click, applies the attribution methodology you've decided on (first-touch, last-touch, multi-touch with a defined model), and outputs revenue by source/medium/campaign/DMA. This is the view that gets shown in the dashboard. This is the view that reconciles to the GL.

Picking an attribution methodology

There's no universally correct attribution model. There's a model that fits how your business actually generates demand, and you need to pick it consciously. Three pragmatic choices for residential home services:

  1. Last-non-direct-click. Default option. Simple. Defensible. Captures most of the truth for emergency-demand trades (plumbing, restoration, garage door) where the considered cycle is short.
  2. First-touch within a 90-day window. Right model for considered-purchase trades (HVAC replacement, panel upgrades, roof replacement, flooring) where the customer often researches for weeks before calling. Last-touch under-credits the brand and content that drove the first visit.
  3. Time-decay multi-touch. More complex. Right for platforms running coordinated brand + performance spend at scale. Worth the engineering investment only if you have the budget volume to justify the optimization decisions it enables.

The wrong move is picking a model in vendor marketing-speak ('data-driven attribution!') without understanding what it actually does to your numbers. The right move is documenting your methodology choice, the rationale, and the audit trail so a future CFO or buyer's CDD team can review it.

How long this takes, what it costs

For a single-location operator: 6 to 10 weeks to build a basic warehouse and reconciliation layer. Ongoing infrastructure cost typically $500-$2,000 per month (Postgres hosting, ETL tooling, dashboard layer). Operator effort: significant up front, light ongoing once it's running.

For a multi-DMA roll-up: 12 to 20 weeks to build the warehouse across all locations and the cross-portco roll-up layer. Cost scales with location count and the diversity of source systems. Most platforms with 5+ locations recover the investment within 6 months from the channel-mix optimization the new view enables.

How Sheppard deploys this

Sheppard's Build-it mode builds attribution warehouses inside the operator's perimeter, not as a SaaS the operator rents. The warehouse is owned by the operation; we set it up, document the methodology, and operate the dashboards as part of the marketing function. When the business sells, the warehouse transfers cleanly to the next owner. We've built variants on top of Postgres + dbt + standard reporting tooling, integrated into ServiceTitan, FieldEdge, Housecall Pro, Salesforce, and HubSpot. The architecture is well-understood; the work is in the integration and the methodology decisions.

Frequently Asked

More on build it.

Why doesn't Google Analytics 4 solve this on its own?

+
GA4 sees what happens on your website and what fires from your tagged events. It doesn't see your CRM, your dispatch system, or your booked revenue. Without a layer underneath GA4 that connects ad clicks to booked jobs and revenue, GA4 is a website analytics tool, not an attribution system. It complements an attribution warehouse; it doesn't replace one.

Can a marketing agency build this for us, or do we need an engineering team?

+
Most home services marketing agencies don't have the data engineering capacity to build this. The ones that do typically charge $40K-$100K for the build and $2K-$8K per month to operate. The alternative is to hire a fractional data engineer for the build phase and own the ongoing operation in-house. Sheppard builds the warehouse as part of the engagement and operates it as the marketing function; we don't license it as a SaaS.

What's the simplest viable starting point if we have nothing today?

+
Three weeks of work, two engineers: CallRail or equivalent on every paid number, GCLID and FBCLID captured on every form submission, a daily ETL job pushing leads from your CRM into Postgres with their source attribution attached, and a basic reconciliation query joining lead-source to dispatched revenue. That gets you 70 percent of the way to a defensible attribution view. The remaining 30 percent (multi-touch modeling, view-through, cross-device) is real work but it's optional polish on a working system.

How does this play with the AI call-answering layer?

+
The AI call layer becomes your richest source of source-of-truth lead data because every call is captured, transcribed, and tagged with the source it came from (CallRail tracking number, dialer line, etc.). Build the call layer and the attribution warehouse together if you can: the call layer generates the events the warehouse needs to reconcile.

Will this survive a PE-buyer's CDD team in diligence?

+
If it's built right, yes. Methodology documented, reconciliation queries auditable, integration to financial system traceable. Sponsors increasingly expect this as table stakes in residential home services platforms above ~$25M EBITDA. Platforms that present a working attribution warehouse defend their multiple. Platforms that present a marketing dashboard built from Google Ads exports get discounted.

Engage Sheppard

Have a deal that needs this work?

Pre-LOI, post-close, mid-hold, or pre-exit, the conversation starts with five questions and fifteen minutes on the calendar.