Marketing & lead ROI

How to connect ad spend to booked revenue (and why most contractors lose that thread)

Most home-service companies know what they spent on Google Ads last month. Few know which of those dollars turned into a booked job, then into collected revenue. This article walks through the attribution gap, the data sources that close it, and what to track once the connection is made.

By Datacube content engineAutogenerated

Here is where most contractors are today: ad spend lives in Google Ads or a marketing agency report. Call data lives in a call tracking tool or the CRM. Booked revenue lives in ServiceTitan, Housecall Pro, or QuickBooks. Three separate systems, three separate logins, no shared row that reads "we spent $4,200 on Google Ads in April, it drove 38 inbound calls, 29 of those booked, and the invoiced revenue from those jobs was $31,000."

Without that row, every marketing spend decision is a guess. You scale a campaign because calls went up, without knowing whether those calls actually booked. You cut a channel because it looked expensive, without knowing it was your highest-ROAS source. Connecting ad spend to booked revenue is not a luxury for sophisticated operators; it is the baseline that makes every marketing dollar defensible.

This article covers why the attribution thread breaks in most home-service businesses, which data sources need to be in the same view, the metrics that matter once they are connected, and how to build the reporting habit that keeps the connection current.

What this article covers

  • Why ad spend and booked revenue live in separate systems for most contractors, and where the thread breaks.
  • The three data sources you need in the same view: ad platform, call tracking, and CRM or job management.
  • The five metrics that matter when those sources are connected: impressions are not one of them.
  • A source-by-source map of what feeds what, and the gap each disconnect creates.
  • What a connected marketing board looks like, and which decisions it makes faster.

Why the attribution thread breaks

The problem is not that the data does not exist. It does. It is that the data lives in purpose-built silos: an ad platform optimized for clicks and impressions, a call tracking tool that knows when a phone rang and from which source, and a CRM that knows when a job was booked and what it invoiced. Each tool is good at its slice. None of them are built to hand the baton to the next.

Call tracking tools can attribute a phone call to a campaign. But they rarely know whether that call became a booked job at $0 or a booked job at $900. The CRM knows the job value, but it often records the lead source as whatever the CSR typed at intake: "internet," "Google," or just "phone." That free-text field is where attribution goes to die.

Add a marketing agency that sends a monthly PDF of clicks and cost-per-click, and you have three separate reports with no shared key to join them. Most contractors end up looking at spend and revenue side by side on a spreadsheet once a month, calling it attribution. It is not. It is coincidence tracking.

Warning

Data visibility gap: the lead-source field problem

In most CRMs, the lead source recorded at intake is whatever the CSR typed or selected from a dropdown. If CSRs are inconsistent, "Google," "Google Ads," and "internet" all become separate buckets in your reports. A call tracking tool using dynamic number insertion can assign a campaign-specific number before the call is answered, which is a cleaner attribution signal. But if that source ID never makes it into the CRM job record, the connection is still broken. Clean attribution depends on the source flowing from the ad platform through call tracking into the CRM as a structured field, not a text box.

Which data source feeds which revenue metric

Data sourceWhat it tracksRevenue metric it enablesGap if disconnected
Google AdsImpressions, clicks, ad spend by campaignCost per click; top-of-funnel ROASNo visibility into whether clicks became calls or booked jobs
Call tracking (e.g. CallRail)Inbound calls by source, call duration, recordingsCalls per campaign; cost per inbound callNo visibility into booking rate or job value per call
CRM or job management (e.g. ServiceTitan, Housecall Pro)Booked jobs, lead source, job type, invoiced amountBooked revenue by source; average ticket by channelNo tie to actual ad spend, so ROAS is incalculable
QuickBooks (accounting)Collected revenue, COGS, gross profit, expense pacingGross margin per channel; marketing spend as % of revenueExpense totals without knowing which revenue they drove
All sources in one dashboardSpend, calls, booked jobs, invoiced revenue in a shared viewROAS by channel; cost per booked job; booked revenue per dollar spentN/A, this is the goal state

The five metrics that matter when the sources are connected

Once your ad platform, call tracking, and CRM are feeding the same view, the metrics that actually tell you something become visible. Impressions and clicks are not on this list. They exist upstream, but they are not the number you manage a home-service business on.

1. Cost per booked job by channel

Total ad spend on a channel divided by the number of jobs that channel booked in the same period. This is the single most useful number for deciding where to put the next dollar. A channel spending $80 per booked job in HVAC tune-ups is a different proposition than one spending $80 per booked job in system replacements.

2. ROAS (return on ad spend) by channel

Booked revenue attributed to a channel divided by spend on that channel. A 5x ROAS means every dollar spent returned five dollars in booked revenue. The ROAS glossary page covers how to define and track it. What matters here: ROAS is only calculable if spend and booked revenue share a source label. Without that shared key, you are dividing total revenue by total spend and calling it ROAS, which is just a blended average that tells you nothing about where to scale.

3. Booking rate by lead source

Not all inbound calls book at the same rate. Google Local Services Ads tend to bring callers with higher intent than broad display. Seasonal promotion campaigns may drive high call volume at a lower booking rate. Knowing which sources book well versus which ones just ring the phone tells you whether a channel's cost-per-call is actually cheap or expensive once you factor in how many of those calls turn into jobs.

4. Average ticket by lead source

A channel that drives high-intent, high-value jobs, say HVAC replacements or full electrical panel upgrades, has a very different ROI profile than one that drives tune-up calls. Average ticket by source surfaces that difference. Combined with ROAS, it tells you whether a channel is worth scaling even if its volume looks modest.

5. Booked revenue MTD by campaign

Month-to-date booked revenue broken out by the campaign or source that drove each job. This is the live version of the attribution picture: you are not waiting until the month closes to review the marketing report. You can see mid-month whether a campaign change is translating into booked jobs, or whether spend went up without a corresponding lift in revenue.

Info

Quick example: same spend, very different results

Imagine a plumbing company running two Google Ads campaigns in the same month, each spending $3,000. Campaign A drove 24 inbound calls, 18 booked at an average ticket of $520, for $9,360 in booked revenue. Campaign B drove 40 inbound calls, 14 booked at an average ticket of $310, for $4,340. Campaign B had more calls and a lower cost-per-click. Campaign A had a lower volume but more than twice the booked revenue per dollar. Without connecting spend to booked revenue by campaign, the obvious read is to scale Campaign B. The connected read is the opposite. (These figures are illustrative; actual results vary by trade, market, and season.)

How to build the connection: a before/after workflow

Before: your marketing manager logs into Google Ads, screenshots the spend. Your CSR manager exports a call log from call tracking. Your controller pulls a lead-source report from the CRM. Someone puts three tabs in a spreadsheet and tries to match rows by hand, once a month, for last month's data.

After: a dashboard that pulls from all three sources simultaneously shows spend, calls, booked jobs, booked revenue, and cost per booked job by channel in one view. The marketing manager reviews it every Monday morning. By Tuesday they know whether last week's campaign adjustment moved the needle.

The three things that need to be in place

First, your call tracking tool needs dynamic number insertion so that callers from each campaign get a distinct number, not a single main line. This is what ties a call back to the campaign that drove it. Second, that source label needs to flow into the CRM job record as a structured field, not a free-text note. Third, your ad platform and CRM need to be accessible to the same reporting layer so spend and jobs can be matched on the same time axis. Without all three, you have pieces of the picture, not the picture.

What a connected marketing board looks like

When ad spend, call tracking, and CRM data feed a single board, a marketing leader or owner can see campaign performance from spend all the way through to booked revenue in one view, without exporting a single report.

Dashboard preview

Figures are illustrative. A live board reflects your own connected sources, campaigns, and KPI definitions. Attribution coverage depends on which sources are connected and how lead source is recorded in your CRM.

The decisions a connected view makes faster

Attribution data is not a reporting exercise; it is a budget-allocation tool. With spend and booked revenue in the same view, your marketing leader can answer four questions without waiting for month-end:

Which channel is producing the most booked revenue per dollar, and should we shift budget toward it? Which campaign drove a spike in calls that did not translate to jobs, suggesting a booking or intent quality issue? Is our cost per booked job rising even though call volume looks stable, which could indicate a CSR booking rate drop rather than a marketing problem? And is our ROAS trending in the right direction before the month closes, or do we need to course-correct now?

Those are not questions you can answer from a click report or a CRM export in isolation. They require the data to be in the same place at the same time.

What to track in a datacube marketing board

For home-service businesses using datacube, the Marketing board is designed to consolidate campaign spend from connected ad platforms alongside call and booking data from the CRM. When configured to pull from Google Ads, a call tracking tool, and ServiceTitan or Housecall Pro, the board can display spend, calls, booked jobs, booked revenue, cost per booked job, and ROAS by channel in real time. The board refreshes as fast as the connected sources allow, so your marketing leader is not reviewing data that is two weeks old.

Connecting ad spend to booked revenue: frequently asked questions

See what your marketing spend is actually returning

If your spend and booked revenue live in different systems, you are making budget decisions on incomplete data. Schedule a live demo to see how datacube consolidates ad spend, call data, and CRM jobs into one marketing board, and what that view would look like for your channels.