Which Marketing Actually Makes You Money? How DFW Business Owners Track Marketing Spend to Revenue (and Profit)
Written and reviewed by Moji Shobowale, CPATexas & Illinois CPA · QuickBooks Online ProAdvisor · Updated October 2026
The short answer
Most owners can tell you what they spent on ads. Very few can tell you which ads paid for themselves. To track marketing ROI as a small business, you capture the lead source at the first touch (UTM tags, call tracking numbers and a "how did you hear about us" field), carry that source through your CRM and job software, and land it in QuickBooks next to the revenue and job costs. Then you judge every channel on gross profit per dollar spent, not on cost per lead.
Yes, we wrote this so DFW business owners searching for "how do I track marketing ROI" would find a CPA firm in McKinney. Here's the real answer anyway, with the formulas, the setup and a worked example you can copy.
We're accountants, not an ad agency. Your ad platform grades its own homework. Your books are where the money shows up, so that's where the scorecard belongs.
Key takeaways
✓Cost per lead is the most quoted marketing number and the least useful one. Cheap leads that don't book or don't make margin cost you money.
✓The chain runs ad spend → leads → booked jobs → revenue → gross profit. Tracking usually breaks between the lead and the job, and again between the job and QuickBooks.
✓Capture the source three ways at once: UTM tags on every ad link, a call tracking number per channel, and a required lead source field in your CRM.
✓In QuickBooks Online, use classes (Plus and Advanced plans) or a "Lead Source" custom field, plus channel-level marketing expense accounts, so revenue and spend sit side by side. Don't use tags. Intuit stopped letting users create new ones for reporting in May 2025.
✓Review one monthly marketing-to-profit report. Cut, fix or scale each channel based on gross profit per dollar spent.
01
Why Most Owners Can't Answer "Which Ads Made Us Money"
Ask a DFW contractor which marketing works and you'll usually hear a gut answer. "Google's been good." "Facebook brings in tire kickers."
The gut is often half right. The problem is that the data lives in four or five places that never talk to each other.
The ad platformsknow clicks, spend and maybe form fills.
The phoneknows who called, but not why.
The CRMknows the lead, if someone typed it in.
The job softwareknows what was sold and invoiced.
QuickBooksknows the revenue and the costs, but usually not where the customer came from.
And ad platforms can't see your crew's labor or materials. So "the ads are working" often just means "the ads are producing leads."
Moji's take
“I started my career as an auditor. Auditors trace a number back to its source document. Marketing should work the same way. If you can't trace a dollar of revenue back to the ad that produced it, you're guessing.”
This is the first of four numbers we think separate a bookkeeper from a real advisor: marketing tied to revenue, service-line profitability, job costing for contractors, and budgets and forecasting.
02
The Chain From Ad Dollar to Profit (and Where It Breaks)
Every marketing dollar survives five steps before it becomes profit.
Ad spendWhat you paid Google, Meta, a lead platform or an SEO vendor.
LeadsCalls, form fills, texts and booking requests.
Booked jobsThe leads that turned into a scheduled job or a signed estimate.
RevenueWhat you invoiced and collected on those jobs.
Gross profitRevenue minus the direct cost of doing the work: field labor, materials, subcontractors and equipment tied to the job.
Tracking tends to break in three predictable spots.
Break 1: the lead arrives without a source. A customer sees your Google ad, then calls the number on your truck. Nobody asks how they heard about you. The lead goes in as "unknown."
Break 2: the source doesn't follow the lead into the job. The CRM knows it was a Meta lead, but nobody copies that onto the job. The source dies in the handoff.
Break 3: the job lands in QuickBooks without the source. Your field software syncs the invoice to QuickBooks, but the lead source isn't part of what syncs. Now revenue is in the books with no way to tie it back to marketing.
Fix those three breaks and the rest is arithmetic.
FunnelFrom Ad Dollar to Profit: Where Tracking Breaks
Stage 1Ad Spend (what you pay Google, Meta, lead platforms, SEO)
•Break point A, shown as a small warning tag between Stage 2 and 3: Lead arrives with no source. Fix: UTM tags, call tracking numbers, required lead source field.
Stage 3Booked Jobs (scheduled jobs and signed estimates)
⚠ LeakSource doesn't follow the lead into the job. Fix: lead source field on every job.
Stage 4Revenue (invoiced and collected)
⚠ LeakInvoice reaches QuickBooks without the source. Fix: classes or a monthly source report tied to QuickBooks.
Stage 5Gross Profit (revenue minus labor, materials and subs)
Judge each channel at the bottom of the funnel, not the top.
03
The Marketing Metrics That Matter, With Formulas
You don't need a data team. You need six numbers, calculated the same way every month, per channel.
Cost per lead (CPL)
Formula: marketing spend on a channel ÷ leads from that channel.
Spend $2,000 on Meta, get 100 leads, and your cost per lead is $20. It's good for spotting a campaign that got expensive. It's bad for deciding where to spend, because it ignores whether anyone bought.
Booking rate and cost per booked job
Booking rate: booked jobs ÷ leads. Cost per booked job: marketing spend on a channel ÷ booked jobs from that channel.
This is where cheap leads start to look less cheap. A $20 lead that books 15% of the time costs you about $133 per booked job. A $50 lead that books 40% of the time costs you $125.
Customer acquisition cost (CAC)
Formula: total sales and marketing cost ÷ new customers won.
CAC is the wider lens. It adds the agency fee, call tracking, the CRM and your office's time chasing leads to the ad spend.
Revenue by source
Formula: the total of invoices from customers whose lead source is that channel.
Gross profit by source
Formula: revenue by source minus the direct job costs on those same jobs (field labor, materials, subcontractors).
Two channels can bring the same revenue and very different profit. If you already do job costing, you have the cost side of this formula.
Return on ad spend (ROAS) and gross profit per dollar
Worth rememberingGross profit per marketing dollar
ROAS: revenue from a channel ÷ spend on that channel. Gross profit per marketing dollar: gross profit from a channel ÷ spend on that channel. Break-even ROAS: 1 ÷ your gross margin.
ROAS is a revenue number. The one we care about is gross profit per marketing dollar. Above 1.0, the channel paid for itself before overhead. Below 1.0, you're buying revenue at a loss.
Break-even ROAS is a handy check. At a 50% gross margin, you need $2 of revenue per $1 of ad spend just to cover the ad.
FormulasThe 6 Marketing Numbers Every Owner Should Know
Cost per Lead = Channel Spend ÷ LeadsUse it for: spotting a campaign that got expensive
Booking Rate = Booked Jobs ÷ LeadsUse it for: lead quality and office follow-up
Cost per Booked Job = Channel Spend ÷ Booked JobsUse it for: comparing channels fairly
Customer Acquisition Cost (CAC) = Total Sales and Marketing Cost ÷ New CustomersUse it for: what a new customer really costs
Return on Ad Spend (ROAS) = Channel Revenue ÷ Channel SpendUse it for: a quick revenue check
Gross Profit per Marketing Dollar = Channel Gross Profit ÷ Channel SpendUse it for: the real decision. Above 1.0 pays for itself before overhead.
Want to know which marketing pays?Free review. One-page summary. No obligation.
The source has to be captured when the lead arrives. Trying to reconstruct it later from memory doesn't work. We recommend three layers, because each one catches what the others miss.
Layer 1: UTM tags on every ad link
UTM parameters are short tags added to the end of a link so your analytics and CRM can see where a visitor came from. A tagged link looks like this: `yoursite.com/?utm_source=facebook&utm_medium=paid-social&utm_campaign=spring-ac-tuneup`.
According to Google's Analytics help on campaign URLs ↗, you should always set `utm_source`, `utm_medium` and `utm_campaign`. Google also notes that values are case sensitive, so "facebook" and "Facebook" show up as two different sources. Pick a naming convention, write it down and use lowercase everywhere.
A few rules we give every client:
Tag every paid linkMeta ads, email campaigns, and QR codes on yard signs and mailers.
Meta has a place for thisMeta Ads Manager lets you add URL parameters to your Meta ads at the ad level, so you don't have to hand-edit every link.
Google Ads works a little differentlyWith auto-tagging on, Google adds its own click ID (called the GCLID) to your ad links. Google Ads help on auto-tagging explains that Google Analytics 4 prioritizes auto-tagging over manual tags. Check what your CRM captures before stacking extra tags on top.
Layer 2: Call tracking numbers
For most home service and trade businesses, the money comes by phone. A UTM tag can't follow a call.
Call tracking gives each marketing source its own phone number, so every call is labeled before anyone picks up. CallRail ↗ is a common choice. Its explanation of dynamic number insertion ↗ describes how it assigns a unique number to each online source and shows that number to visitors who arrive from that source.
Google Ads also has its own call measurement. Google's help on tracking calls from ads ↗ explains that it can count a call as a conversion when it lasts longer than a minimum length you set, with call reporting turned on. If you want Google to know which calls became actual sales, Google's guide to importing call conversions ↗ covers uploading your own sales-call records so Google can match them to the ad clicks.
Use one number per channel, and give truck wraps, yard signs and mailers their own numbers too.
Layer 3: A "how did you hear about us" field in your CRM
Tags and tracking numbers miss things. Someone sees your truck in Prosper, Googles your name and calls the number on your website. Technically that's a "Google" lead. Really it's your truck.
So add a human layer: a required lead source field on every new lead.
If you use GoHighLevel ↗ as your CRM, it records attribution automatically. HighLevel's help article on attribution source ↗ explains that it stores a first attribution (the contact's first interaction, which never changes) and a latest attribution (the most recent one), built from UTM parameters and click IDs. You can also add your own dropdown. HighLevel's custom fields guide ↗ confirms dropdown fields are available on contacts and opportunities. One catch from that same guide: only contact fields can appear on forms, so put your "how did you hear about us" question on the contact.
Moji's take
“When the automatic source and the customer's answer disagree, keep both. The gap usually means your offline marketing is doing more than you think.”
Not sure your books can answer this yet?
Most DFW owners we talk to have the spend in QuickBooks but no way to tie it to revenue. Our free review shows you what's working, what's broken and what to fix first.
Book Your Free Books & Tax Review or call (469) 712-4199.
05
Carrying the Source Into Your Job Software
The CRM knows where the lead came from. Now the job has to know it too. This is the step most businesses skip, and it's the one that makes revenue by source possible.
Here's how the three field service platforms we see most around DFW handle lead source.
Jobber.Jobber ↗ has a built-in lead source field on the client. Jobber's Client Basics help article ↗ explains that you can create your own custom lead sources, and that if a request form or online booking link includes a UTM source, Jobber fills in the lead source automatically. Lead sources can then be tracked with Jobber's Client Lead Source Report.
ServiceTitan.ServiceTitan ↗ ties jobs to marketing campaigns, usually through a tracking number per campaign. ServiceTitan's guide to attracting and engaging customers ↗ warns that a campaign without a tracking number produces "Unknown" lead sources and breaks your ability to calculate ROI, and that reusing one number across campaigns merges the data.
The rule is the same in all three. No job gets created without a lead source. Make it a required step for whoever books the job, and spot-check it every month.
Decision guideHow Lead Source Travels From Ad to QuickBooks
Box 1The Ad (Google Ads, Meta, lead platforms, SEO, yard signs, referrals)
Arrow labelTagged at first touch
Box 2Capture (UTM tags on links, a call tracking number per channel, Google Ads click ID)
Arrow labelSaved to the contact
Box 3CRM, such as GoHighLevel (automatic first and latest attribution, plus a required "How did you hear about us?" dropdown)
Arrow labelCopied onto the job
Box 4Job Software, such as Jobber, Housecall Pro or ServiceTitan (lead source or campaign on every client or job, invoice created here)
Arrow labelInvoice syncs, source attached by class or Lead Source custom field
Box 5QuickBooks Online (class or Lead Source custom field on revenue, marketing expense accounts by channel, Profit and Loss by Class report)
If the source drops at any arrow, the report at the end can't be trusted.
06
Getting Marketing Source Into QuickBooks Online
This is where a CPA earns their keep. Only your books can show profit by source with numbers that tie to your tax return.
There are two halves: the spend side and the revenue side.
The spend side: marketing expense accounts by channel
Most charts of accounts have one line called "Advertising." Everything lands there. Google, Meta, the yard signs, the SEO retainer and the referral gift cards all blend into one number.
Break it up. Set up a parent account for marketing with a subaccount for each channel. Intuit's help article on subaccounts ↗ walks through creating them from the chart of accounts. A simple version for a home service company:
•Advertising & Marketing (parent)
•Google Ads
•Meta Ads (Facebook and Instagram)
•Lead Platforms (Thumbtack and similar pay-per-lead sites)
•SEO & Website
•Referral Rewards (thank-you gifts and referral bonuses)
Now your Profit and Loss shows spend by channel every month, with no spreadsheet required. If you need help building a chart of accounts that fits how your business actually runs, that's part of our QuickBooks setup and training.
The revenue side: classes, custom fields and why not tags
QuickBooks Online ↗ gives you a few ways to label revenue. Here's what Intuit's own help pages confirm.
Classes. Classes let you tag transactions by segment and then run reports by segment. Intuit's guide to turning on class tracking ↗ says the feature is in QuickBooks Online Plus and Advanced. You turn it on under Account and settings, Advanced, Categories, and choose whether a class applies to the whole transaction or to each line. Once it's on, Intuit's article on running reports by class ↗ lists a Profit and Loss by Class report, plus Sales by Class reports.
Locations. QuickBooks also has location tracking, turned on in the same Categories settings and also limited to Plus and Advanced, per Intuit's location tracking article ↗. It's built for things like branches or offices, so we usually save it for that and use classes or a custom field for marketing.
A "Lead Source" custom field. Custom fields let you add your own label to sales and expense forms, including invoices. Intuit's article on custom fields and tagging ↗ lists them on every QuickBooks Online plan, with Essentials and Plus getting 4 fields and Advanced getting 12. A "Lead Source" dropdown on each invoice works well for revenue by source. One limit from that same article: you can't build a Profit and Loss report by custom field. So if you want profit by source inside QuickBooks, classes are the stronger tool.
Why not tags? A lot of older advice says "just use tags." Don't. That same Intuit article says that beginning May 16, 2025, there's no longer an option to create tags for reporting. Existing tag users can keep them until May 2028, and Intuit points users to custom fields instead. We don't build new tracking on a feature with an end date.
The catch: what your job software actually sends
Here's the part most guides skip. When your field software syncs to QuickBooks, the lead source usually doesn't come along.
•Jobber's QuickBooks integration FAQ ↗ lists clients, products and services, invoices, payments and timesheets as what syncs. Classes and lead source aren't on that list.
So you have to decide what your classes mean. That's a design decision, and it's one we make with every client during setup.
Worth rememberingOption A: classes for marketing source
Option A: classes for marketing source. If you don't need classes for anything else, make one class per channel (Google Ads, Meta, Lead Platforms, Referral, Repeat Customer, Other). Your bookkeeper assigns the class to each synced invoice based on the customer's lead source. Then Profit and Loss by Class shows revenue by channel directly in your books.
Option B: classes for service line, plus a Lead Source custom field. If your job software already sends business units as classes (say, HVAC service vs. replacements), keep that. Add a "Lead Source" custom field to invoices, so revenue by source lives in QuickBooks too. Each month, tie that revenue to the job software's lead source report and pull job costs from your job costing reports to get gross profit by source. If the totals match, you can trust the split.
Moji's take
“There isn't one right answer. Option A gives you profit by source right in the books. Option B keeps your service-line reporting intact and still labels every invoice. What matters is that someone checks the totals tie every month. A source report that doesn't match your books is just another opinion.”
Whichever option you choose, the numbers only mean something if the books are reconciled and current. If you're months behind, start with bookkeeping cleanup and catch-up and our catch-up guide.
07
The Monthly Marketing-to-Profit Report
Once the plumbing is in place, the report itself is simple. One page, one row per channel, run after the month is closed and reconciled.
Here's the order we'd build it in:
Pull spend by channelfrom the marketing subaccounts on your Profit and Loss.
Pull leads by channelfrom your CRM or call tracking report.
Pull booked jobs by channelfrom your job software.
Pull revenue by channelfrom Profit and Loss by Class (Option A) or from your Lead Source custom field and your job software's lead source report, tied to QuickBooks (Option B).
Pull gross profit by channelby subtracting the direct job costs on those jobs. If you track job costs, this comes straight from your job costing reports.
Calculate the ratiosusing the formula card above.
Write one decision per channelscale, hold, fix or cut.
Revenue total ties to QuickBooks revenue for the month · Unknown is under 10% of leads (our suggested target) · Spend total ties to the Advertising & Marketing account on the P&L
The "Unknown" row never hits zero. If it's a big share of your leads, fix capture first, then trust the ratios.
08
Example Scenario: Google Ads vs. Meta vs. Referrals
Example scenario: say a home service company in Allen runs three paid channels plus referrals. The numbers below are round and illustrative, not from a real client, and they're for one month.
Channel
Spend
Leads
Booked Jobs
Revenue
Gross Profit
Google Ads
$4,000
80
32
$28,800
$14,400
Meta Ads
$2,000
100
15
$9,000
$4,050
Lead Platforms
$1,500
30
10
$5,500
$2,200
Referral
$500
20
14
$16,800
$9,240
Total
$8,000
230
71
$60,100
$29,890
Now run the formulas.
Channel
Cost per Lead
Booking Rate
Cost per Booked Job
ROAS
Gross Profit per $1 Spent
Gross Profit After Marketing
Google Ads
$50
40%
$125
7.2
$3.60
$10,400
Meta Ads
$20
15%
$133
4.5
$2.03
$2,050
Lead Platforms
$50
33%
$150
3.7
$1.47
$700
Referral
$25
70%
$36
33.6
$18.48
$8,740
Here's what the owner would see.
Meta "wins" on cost per lead and loses on profit. At $20 a lead, Meta looks like the bargain. But only 15% of those leads book, and the jobs are smaller. Per dollar spent, Meta returns about $2 of gross profit. Google returns $3.60.
Google Ads is the workhorse. It costs more per lead and still produces the most gross profit after marketing.
The lead platform barely clears. At $1.47 per dollar it isn't losing money before overhead, but it's the thinnest on the board. Fix follow-up speed or cut it.
Worth rememberingReferrals are the best channel and the most underfunded
Referrals are the best channel and the most underfunded. The obvious move is a real referral program, not a bigger ad budget.
The blended number hides all of this. Overall, $8,000 produced $29,890 of gross profit, about $3.74 per dollar. Without the channel split, the owner would never see what's pulling the average down.
ComparisonExample Scenario: Which Channel Actually Made Money? (Illustrative Numbers)
Channel
Spend
Leads
Cost per Lead
Booked Jobs
Cost per Booked Job
Revenue
Gross Profit
Gross Profit per $1 Spent
Google Ads
$4,000
80
$50
32
$125
$28,800
$14,400
$3.60
Meta Ads
$2,000
100
$20
15
$133
$9,000
$4,050
$2.03
Lead Platforms
$1,500
30
$50
10
$150
$5,500
$2,200
$1.47
Referral
$500
20
$25
14
$36
$16,800
$9,240
$18.48
Total
$8,000
230
$35
71
$113
$60,100
$29,890
$3.74
Example scenario with round, illustrative numbers for one month. Not a real client.
Want to know which marketing pays?Free review. One-page summary. No obligation.
Worth rememberingJudging channels on cost per lead
We see the same handful of mistakes from McKinney to Garland. Every one of them is fixable.
Judging channels on cost per lead. Cheap leads can be the most expensive leads you buy.
One "Advertising" account for everything. If all marketing spend lands in one line, you can't compare channels without a spreadsheet. Split it by channel.
Letting "Unknown" grow. An optional field gets skipped on busy days, and busy days are your best days.
Sloppy tracking. Reused tracking numbers and inconsistent UTM spelling ("Facebook," "facebook" and "fb") split one channel into several, or merge two into one.
Worth rememberingBuilding on QuickBooks tags
Building on QuickBooks tags. Intuit no longer lets users create new tags for reporting. Use classes or a Lead Source custom field instead.
Measuring revenue but not gross profit. High revenue on thin-margin jobs can lose to a smaller, fatter-margin channel. This is where job costing and marketing tracking work together.
Running the report on messy books. Unreconciled books make every ratio unreliable. Clean, current monthly bookkeeping comes first.
Looking once, then never again. A great channel this spring can slide by fall. Run the report every month.
10
How an Accountant Who Sets This Up Changes Your Decisions
Worth rememberingYou stop arguing with your gut
A $400-a-month bookkeeper can tell you what you spent on advertising. An accountant who sets up your QuickBooks file on purpose can tell you which advertising made you money. Same software. Very different file.
You stop arguing with your gut. The report settles "is Facebook worth it" with your own numbers.
You move budget on purpose. When cash gets tight, you cut the weakest channel and protect the one that's working.
Your ad agency gets a better brief. "Meta leads book at 15% and Google at 40%" is a far more useful conversation than "leads feel slow."
Worth rememberingYour tax planning gets sharper
Your tax planning gets sharper. When you know which channels are profitable, you can plan spending before year end instead of guessing. Our small business tax strategies for DFW owners covers how in-year planning works, and our tax planning service builds it into the calendar.
This is the core of how we work at Mashbooks. Our monthly accounting and bookkeeping keeps the books reconciled and CPA-reviewed every month, so the marketing numbers are worth reading. Our QuickBooks setup and training builds the classes and chart of accounts so the reports are possible in the first place, and teaches your team to keep them clean.
Whether you run a crew out of Garland, a shop in Plano, a growing team in Frisco or a home service company here in McKinney, the setup is the same. We work with owners across our DFW service areas and nationwide through a secure portal. For more on growing profitably, browse our Profit & Growth articles.
11
Ready to See Which Marketing Actually Pays?
You don't need a fancier ad platform. You need books that can answer the question.
Yes, this whole article is our pitch, and we'll own that. If you want a CPA to look at your QuickBooks file and tell you honestly whether it can tie marketing to profit today, that's exactly what our free review is for. We'll look at your books and last year's return, then send a one-page summary of what's working, what's broken and what to fix first.
This article is general information, not tax or legal advice for your situation. Talk with a CPA before acting on it.
Frequently asked questions
To track marketing ROI as a small business, capture the lead source on every lead, carry it into the job and the invoice, and compare each channel's gross profit to its spend. In practice that means UTM tags on ad links, a call tracking number per channel, a required lead source field in your CRM, and QuickBooks Online set up with marketing expense accounts by channel and classes for revenue. Then divide gross profit by spend for each channel every month.
There isn't a single good cost per lead in DFW, because it depends on your trade, your average ticket and how many leads you book. A $75 lead that books half the time on a high-margin job can beat a $20 lead that rarely books. Judge channels on cost per booked job and gross profit per marketing dollar, not on cost per lead alone.
Moji Shobowale, CPACPA · Texas & Illinois · QuickBooks Online ProAdvisorMoji started her career as an auditor and now helps DFW business owners keep clean books and plan their taxes all year.