How contractors should track campaign spend by month
Most home-service operators know roughly how much they spend on Google Ads each month. Very few know which campaigns drove booked revenue, which ones ate budget without producing a call, and how March's spend compared to March of last year. This guide walks through a practical month-by-month tracking framework and the signals to watch when the numbers start moving.
Here is the before picture for most contractors: the Google Ads account lives with a marketing agency, QuickBooks shows a line item called "advertising" that lumps every channel together, and ServiceTitan has lead-source data that no one has reconciled against the ad spend in weeks. At the end of the month, the owner asks how marketing is performing. The answer is a rough number, no attribution, and a shrug.
The after picture: every channel's spend is logged against the revenue it produced for that calendar month. You can see that Google Local Services Ads drove 34 booked calls at a cost per booked job well within your target, while the branded search campaign consumed 4,200 dollars and produced 8 jobs. You cut the branded search budget and shift it. That decision takes two minutes instead of two days of spreadsheet work.
Getting from the before to the after requires two things: a consistent way to record spend by channel by month, and a way to match that spend to booked revenue. The matching (attribution) is covered in depth in how to connect ad spend to booked revenue. This article focuses on the tracking cadence: what to log, when to log it, and which month-over-month signals tell you something is wrong.
What this guide covers
- Why a single "advertising" line in QuickBooks is not enough for campaign spend tracking
- The five data points to record per channel per month
- A channel-by-month table template you can start using this week
- Which month-over-month ratios signal a channel is slipping before the damage shows up in revenue
- How operators using a connected dashboard see this data without a spreadsheet
Warning
Data visibility gap: the lumped-advertising problem
When every ad channel flows into one QuickBooks expense category, you lose the ability to compare channels against each other. You might know you spent 18,000 dollars on marketing in April, but you cannot see that Google Ads produced a 5.2x ROAS while Yelp produced a 1.1x ROAS. Without that split, you are averaging two very different performance stories into one number that tells you nothing actionable. The first step in campaign spend tracking is breaking the lump into channel-level line items.
The five data points to record per channel per month
A useful campaign spend record for a home-service company captures more than just spend. For each active channel, record these five fields at the close of every calendar month:
1. Spend. The actual dollars charged for the month, not the budget. Agency management fees should be logged separately.
2. Calls (or leads) generated. Pulled from your call tracking platform, your CRM lead-source report, or the ad platform itself. Pick one source and stick with it.
3. Booked jobs. How many of those calls turned into a scheduled job. This is the number that connects marketing to operations and is why the CSR booking rate matters to your marketing leader as much as to your call center manager.
4. Booked revenue. The total invoice value of those jobs. For HVAC or plumbing, this closes the loop between a Google Ads click and a completed repair or install.
5. ROAS (return on ad spend). Booked revenue divided by spend for the month. This is the number you compare month over month and channel over channel. It removes the size-of-budget effect so a 2,000-dollar local channel and a 12,000-dollar Google campaign sit on the same scale.
Sample month-by-month channel spend tracker
| Channel | Spend (month) | Calls / leads | Booked jobs | Booked revenue | ROAS |
|---|---|---|---|---|---|
| Google Local Services Ads | $3,800 | 51 | 38 | $22,400 | 5.9x |
| Google Search (non-brand) | $6,200 | 44 | 28 | $19,600 | 3.2x |
| Google Search (branded) | $4,200 | 22 | 8 | $5,600 | 1.3x |
| Yelp Ads | $2,100 | 18 | 9 | $5,400 | 2.6x |
| Direct mail | $1,900 | 11 | 7 | $6,300 | 3.3x |
| Total | $18,200 | 146 | 90 | $59,300 | 3.3x (blended) |
What the table tells you that a blended average hides
In the example above, the blended ROAS is 3.3x. That single number looks acceptable. But behind it, Google LSA is running at 5.9x and branded search is at 1.3x. Branded search alone consumed nearly a quarter of the marketing budget and produced revenue at barely above breakeven for most trade margins.
A contractor looking only at blended spend has no reason to act. A contractor looking at channel-level ROAS by month can cut branded search, shift 3,000 dollars into LSA, and recapture that margin without increasing total spend. That is the argument for tracking by channel and by month, not by quarter or by blended total.
Month-over-month signals that warrant a closer look
Once you have two or three months of data in the table, the following changes usually mean something shifted and need investigation, not just a note:
Spend up, calls flat or down. The most common sign that your cost per click has risen, often because a competitor entered the auction or your Quality Score dropped. Worth checking the channel before increasing budget further.
Calls up, booked jobs flat. This is a CSR issue, not a marketing issue. Routing, availability, or call handling changed. Check the booking rate for the same period before assuming the channel is at fault.
Booked jobs up, booked revenue flat. Average ticket dropped, possibly from job-mix changes, more diagnostic-only calls, or a promotion running that attracted lower-value work. Investigate at the job level before renewing the campaign.
ROAS down for two consecutive months on a previously strong channel. A single bad month can be seasonality, a slow week, or a data lag. Two months signals a structural change: competition, market saturation, creative fatigue, or a change in your service area.
Marketing channel scorecard: reading the ROAS signal
Use this as a rough calibration guide when reviewing channel performance each month. ROAS targets vary by trade, margin structure, and geography; treat these as directional, not universal.
- Google Local Services AdsPay-per-lead model typically delivers strong unit economics for HVAC and plumbingGood
- Current
- ROAS 5.0x+
- Target
- 4.0x+
- Google Search (non-brand)Healthy for most trades; monitor cost per booked job against average ticketGood
- Current
- ROAS 3.0x+
- Target
- 2.5x+
- Google Search (branded)Often subsidizes organic traffic; review whether branded clicks would arrive without paidPoor
- Current
- ROAS 1.3x
- Target
- 3.0x+
- Social / Facebook AdsIntent is lower than search; requires longer attribution window and careful lead quality checkWatch
- Current
- ROAS 2.0x+
- Target
- 2.0x+
- Direct mailAttribution is tricky; use unique phone numbers or promo codes to isolate responseGood
- Current
- ROAS 3.3x
- Target
- 2.5x+
- Yelp / directory adsPerformance varies sharply by market; needs three months of data before drawing conclusionsWatch
- Current
- ROAS 2.6x
- Target
- 2.5x+
| Metric | Current | Target | Status |
|---|---|---|---|
| Google Local Services AdsPay-per-lead model typically delivers strong unit economics for HVAC and plumbing | ROAS 5.0x+ | 4.0x+ | Good |
| Google Search (non-brand)Healthy for most trades; monitor cost per booked job against average ticket | ROAS 3.0x+ | 2.5x+ | Good |
| Google Search (branded)Often subsidizes organic traffic; review whether branded clicks would arrive without paid | ROAS 1.3x | 3.0x+ | Poor |
| Social / Facebook AdsIntent is lower than search; requires longer attribution window and careful lead quality check | ROAS 2.0x+ | 2.0x+ | Watch |
| Direct mailAttribution is tricky; use unique phone numbers or promo codes to isolate response | ROAS 3.3x | 2.5x+ | Good |
| Yelp / directory adsPerformance varies sharply by market; needs three months of data before drawing conclusions | ROAS 2.6x | 2.5x+ | Watch |
Info
Owner takeaway: the agency reconciliation call
Most contractors get a monthly PDF from their marketing agency showing impressions, clicks, and conversions. Rarely does that report show booked jobs or booked revenue pulled from the CRM. Before your next agency call, pull the booked-job count by lead source from your CRM for the same period and bring it to the conversation. If the agency's "conversion" count and your CRM's booked job count are more than 15 percent apart, there is a tracking discrepancy that is hiding cost or inflating results. Reconciling that gap is more valuable than any campaign optimization the agency can recommend.
A practical tracking cadence: weekly, monthly, and quarterly
Weekly: check spend pacing. Are you on track to hit the monthly budget or running ahead? A campaign that exhausts budget in the first three weeks of the month goes dark when call volume is still high. Pacing checks take five minutes and prevent a surprise drop in calls during the fourth week.
Monthly: complete the channel-by-month table above within the first three business days of the following month. Pull CRM lead-source data, reconcile call counts against call tracking, compute ROAS per channel, and flag any channel that moved more than 20 percent from the prior month without a clear explanation (seasonality, promotion, or a competitor change).
Quarterly: compare channel mix. Over three months, where has the ROAS improved? Which channels have a consistent trend downward? Use the quarter view to make budget reallocation decisions, not the monthly view, which is too noisy for structural changes.
What tools you need to make this work
Call tracking: a platform like CallRail assigns a unique phone number to each campaign source. Calls roll up against the campaign, so you know a specific call came from Google LSA rather than from organic search or a yard sign.
CRM lead-source data: for teams using ServiceTitan or similar platforms, every job carries a lead source. That tag is how you count booked jobs and booked revenue by channel. Keeping lead-source tags clean is the unglamorous prerequisite for everything else in this article.
Accounting: QuickBooks is the source of record for actual spend, broken by vendor (ad platform or agency). If your chart of accounts lumps channels, work with your bookkeeper to add sub-accounts or class codes by channel so the reports separate Google from Yelp from direct mail.
A connected marketing dashboard: when your call tracking, CRM, ad platforms, and QuickBooks are configured to feed a single live view, the monthly table above populates automatically. Operators using datacube can see spend, call volume, booked jobs, and ROAS by channel updated throughout the month rather than assembled at close.
Three campaign spend tracking mistakes that cost contractors margin
Mistake 1: counting impressions and clicks as conversions. Ad platforms are optimized to show you the metrics that make them look good. Impressions and clicks cost money but do not pay your techs. Unless the platform conversion tag fires on an actual call or a form fill tied to a booked job, the conversion number is a proxy at best.
Mistake 2: attributing all revenue to the last click. A homeowner may have clicked a Google Search ad, visited your website, then searched your brand name and called from a Yelp listing two days later. Last-click attribution gives Yelp full credit and Google none. For most home-service companies, a simple first-touch or even a 50/50 split model is more honest than last-click for high-ticket, multi-day decisions.
Mistake 3: reviewing spend after the month is gone. If you do not look at campaign spend until day five of the following month, there is nothing you can do about the 4,200 dollars your branded campaign wasted. Build a weekly pacing check into your rhythm so you have time to act within the month.
Campaign spend tracking for contractors: common questions
See campaign spend and booked revenue in one live view
If you are still assembling your marketing numbers in a spreadsheet at the end of the month, a connected marketing board shows you spend, calls, booked jobs, and ROAS by channel as the month runs. Schedule a demo to see how datacube pulls your ad platforms, call tracking, and CRM together.
