Skip to main content
Strategy8 min read

How to Measure the Real ROI of Your Meta Ads (Stop Staring at CPL)

Cost per lead is the vanity metric that's easiest to fixate on. It's also the wrong metric. Here's how to calculate the ROI that actually matters — and what to do when the number isn't what you hoped.

J
JadenFounder, Elev8 Operations
Worked with 200+ clients8 min read · Updated 2026-09-28

Key Takeaways

  • Cost per lead on its own is meaningless: a $15 lead that never closes is more expensive than a $40 lead that books a $10K job. Always pair it with close rate and job value.
  • The metric that matters is cost per booked job — (monthly ad spend + management fees) divided by jobs actually booked that month.
  • Worked example: $3,000 of ad spend plus $1,500 of management producing 30 booked jobs is $150 per booked job; at a $3,000 average job that is $90,000 of revenue on $4,500 spent.
  • You do not need a CRM to track this. There is a weekly reporting setup that works without one, plus a diagnosis sequence to run when the ROI number comes back bad.

If the only metric you watch is cost per lead, you'll make decisions that wreck your business. Here's a full ROI framework — and why staring at CPL misses the point.

The 4 Metrics That Actually Matter

Scroll sideways to see the full table →

MetricWhat It Tells YouReference Point
Cost Per Lead (CPL)How efficiently you're generating form submits$42.95 avg, Home & Home Improvement (WordStream/LocalIQ 2026)
Lead → Booked RateHow well your team converts leads to jobsTrack your own by source; varies widely by trade
Cost Per Booked Job (CPBJ)True acquisition costWell under the gross profit a job earns
Return On Ad Spend (ROAS)Revenue ÷ ad spendSet your floor from your margins

CPL alone is meaningless. A $15 lead that never closes is infinitely more expensive than a $40 lead that books a $10K job. Always pair CPL with close rate and job value.

The 'Cost Per Booked Job' Formula

This is the metric that matters. Calculation:

Cost Per Booked Job = (Monthly Ad Spend + Monthly Management Fees) ÷ Jobs Actually Booked That Month

If you spent $3,000 on ads + $1,500 on management this month and booked 30 jobs, your cost per booked job is $150. If those jobs averaged $3,000 revenue, you made $90,000 in revenue from $4,500 spent. That's 20x revenue on the ads plus management, or 30x on ad spend alone — a revenue multiple, not profit, so apply your gross margin before calling it ROI.

The Payback Period Question

For contractors with recurring revenue (maintenance plans, service agreements), a customer is often worth several times the first job over their lifetime. Your 'real' cost per customer should account for this.

Hypothetical examples, not measured data: how lifetime value can differ from the first job by trade.

Scroll sideways to see the full table →

Trade (hypothetical)First JobLTV (3-yr)Multiplier
Roofing$12,000$12,5001.04×
HVAC$6,500$18,0002.77×
Pest Control$300$1,8006.0×
Landscaping$2,500$8,0003.2×
Plumbing$800$3,6004.5×

For trades with recurring revenue, your break-even on a $200 cost-per-booked-job is way below the first invoice. You can afford to spend more aggressively on acquisition because lifetime value is higher.

What to Track Every Week

  • Total ad spend (Meta + any other platform)
  • Total leads generated (form submits only — not pageviews)
  • Total leads your team contacted within 1 hour
  • Total appointments / estimates scheduled
  • Total jobs actually booked (signed or deposit collected)
  • Total revenue from this week's booked jobs

How to Set Up Reporting Without a CRM

Google Sheet with 6 columns: Lead Date, Source (Meta / Google / LSA / Referral), Name, First-Contact Time, Booked (Y/N), Job Value. Fill it every day. At the end of the month, pivot by source. Simplest reporting system that tells you the truth.

When ROI Looks Bad — Diagnosis Sequence

If ROAS is below the floor you set from your margins (see the table above), work through this checklist:

  • Is CPL too high? → Creative / audience / landing page problem
  • Is CPL fine but close rate low for your trade (your own history is the benchmark)? → Team / follow-up / qualification problem
  • Is close rate fine but job values dropping? → Offer / pricing problem
  • Is everything fine but ROAS still bad? → You have a math problem (look at margins, not revenue)

Before buying more leads, make sure you can see what the current ones turn into. Once you know your real cost per booked job, budget decisions stop being guesses.

Sources

The public studies behind the figures on this page, with what each one was used for.

  1. 1
    WordStream / LocalIQ — Facebook Ads Benchmarks 2026

    2026. Home & Home Improvement: $42.95 average cost per lead.

Share
8 min read · Updated 2026-09-28

Frequent Questions. Short Answers.

Use your own. Meta's reported ROAS only counts events it can attribute (Pixel + CAPI). Your own count can land above or below Meta's: above when it includes calls Meta never saw, below when Meta counts duplicate or junk leads (see the truth ratio below). Trust the one tied to booked jobs.

Weekly spend + monthly ROAS review is the cadence. First full month gives you a directional read; month 2–3 gives you a stable one. If you're trying to judge profitability after 2 weeks, stop — the data isn't there yet.

Track with a 30-day / 60-day / 90-day booked window separately. Commercial work, full kitchen remodels and other large projects can take weeks or months to close. Attribute back to the lead date, not the booking date, so you're comparing ad spend from the right month.

Only if your close rate is constant and your job values are constant. It rarely is. Contractors who optimize purely on leads-per-dollar end up maximizing low-quality leads at the expense of real revenue.

Build a single source-of-truth spreadsheet (or use your CRM's source field). Every lead gets tagged: meta_ad / google_search / lsa / referral / directory / organic. Every closed job pulls revenue back to source. Run the math monthly: revenue / spend per source = source-level ROAS. Guessing 'I think Meta's working' is how money disappears.

Build a 'truth ratio': divide the leads your CRM actually received from Meta by the leads Meta reports for the same window. Well below 1 means Meta is over-counting (duplicate events, test submissions, junk); well above 1 means it's under-counting (lost browser events, missing Conversions API events, calls it never saw). Once you know your ratio, apply it to Meta's lead column when making weekly budget calls, and recalibrate every quarter, because tracking accuracy shifts with platform updates and your setup. Keep it separate from close rate, which measures what happens after the lead.

Different break-evens. Set break-evens from your margins rather than a universal target: cold prospecting usually needs to clear a lower bar than retargeting, because retargeting audiences already know you. Expect retargeting to return more per dollar, since it reaches warm visitors. If you blend the two and report a single ROAS number, you'll under-fund prospecting (looks unprofitable next to retargeting) and over-fund retargeting (it cannibalizes leads that would've come back anyway). Always report ROAS by funnel stage. A starting split at $5K+/mo (a planning estimate): mostly prospecting, a smaller retargeting slice, and a little top-of-funnel awareness (measured on cost per video view or landing page view, not ROAS).

Don't measure them on direct ROAS — measure them on contributory metrics that compound. Three metrics that matter: (1) BRAND SEARCH LIFT — track searches for your business name in Google Search Console; a sustained rise after a few months of awareness ads is the win signal; (2) DIRECT TRAFFIC GROWTH — direct/typed-in traffic in Google Analytics should rise as awareness builds; (3) RETARGETING POOL SIZE — your Custom Audience of website visitors should grow with your awareness spend. Awareness spend pays back through retargeting and organic, not direct ad clicks. As a rule of thumb, keep awareness to a small slice of total Meta spend, and skip it on small budgets, where every dollar should chase direct response.

Build a Looker Studio (free) dashboard pulling from three connectors: (1) META ADS connector — pulls spend, impressions, clicks, leads daily; (2) CRM connector (HubSpot/JobNimbus/etc native or Zapier) — pulls leads, opportunities, closed jobs daily; (3) GOOGLE ANALYTICS or your finance source — pulls revenue. Build 5 dashboard tabs: (1) Top-line — spend, leads, jobs, revenue this week vs last week; (2) Per-channel — Meta vs Google vs LSA vs referral, side-by-side cost-per-booked-job; (3) Trend — 90-day rolling CPL + ROAS by channel; (4) Per-creative — top 10 creatives by cost-per-booked-job (forces creative-level attribution); (5) Per-team-member — close rate by salesperson (so the math conversation starts with the right person). Set up auto-email weekly to yourself + key stakeholders. It takes a few hours to set up once and saves the monthly spreadsheet reconciliation.

Audience determines the framing, not the number. To INVESTORS/LENDERS: lead with TRUE blended cost-per-booked-job (including all hidden costs from /guides/meta-ads-cost FAQ), 90-day rolling trend, ROAS by funnel stage. They want conservative, defensible numbers — over-promising is how partnerships die. To YOUR INTERNAL TEAM: lead with CPL trends (what they can directly affect), creative-level performance (so they know which ads to make more of), and weekly variance flags (so they catch issues early). Don't show ROAS to the team — it's too abstract and they can't directly affect it. To VENDORS/AGENCIES: lead with target cost-per-booked-job + acceptable variance ranges — 'we'd consider $400 cost-per-booked-job profitable, anything over $600 needs a conversation.' Each audience needs the metrics that empower them to act, not the metrics that make YOU look good. Reporting same numbers to all three is how communication breaks down.

Use cohort-based ROI, not calendar-month ROI. The trap: contractors look at 'leads in March → revenue in March' and conclude their March spend was unprofitable, when actually March's revenue came from December's leads. Fix: track LEAD COHORTS, not monthly snapshots. Tag every lead with their submission month in your CRM. When the lead converts (4 months later), credit revenue back to the lead's submission month, not the conversion month. After 6-12 months, you have a clear picture of 'leads from March 2026 ultimately produced $X in revenue, vs $Y of ad spend in March 2026.' That's the real ROI for that month. Don't try to compute true ROI in real-time for long-cycle businesses — wait for the cohort to mature. If Meta looks unprofitable for remodeling work, check whether you're using calendar-month math instead of cohort math.

Five-row daily Google Sheet. COLUMNS (left to right): (1) Date; (2) Meta Spend ($, manual entry from Ads Manager); (3) Leads received (auto-pulled from CRM via Zapier or manual); (4) Appointments scheduled (manual entry from CRM); (5) Closed jobs (manual entry); (6) Revenue ($, manual). At end of each row, calculate: CPL = column 2 / column 3; Cost-per-booked-job = column 2 / column 5; ROAS = column 6 / column 2. At top, build a 30-day rolling average pivot. Total setup: 30 minutes one-time. Maintenance: 5 minutes/day to fill rows. Better than fancy dashboards because: (1) you actually use it daily; (2) the act of filling it forces awareness; (3) no third-party connector breakages. A simple Google Sheet you actually open beats a polished dashboard you don't.

Banks want stability + repeatability evidence, not optimistic projections. Three documents to prepare: (1) 24-MONTH HISTORICAL spend + revenue trend by month — shows seasonality + growth pattern. Format as a simple chart with two lines (spend vs revenue), 24 data points; (2) UNIT ECONOMICS table — average CPL, close rate, average job value, cost-per-booked-job for the last 12 months. One row, six columns, easy to scan; (3) FORWARD MODEL — next 12 months projected at CONSERVATIVE numbers (worst-case month repeated, no growth assumption). Show monthly cash flow + cumulative profit. Bankers reward conservatism; over-promising + under-delivering kills future credit access. Avoid: showing best-case ROAS as 'expected,' projecting hockey-stick growth, including channels you're not actually running. Over-sharing costs credibility; conservative, verifiable numbers help win loan approvals and better terms. Have your accountant cross-check before submission.

Set RANGE-based quarterly targets, not single-point estimates. Three-row target template: (1) STRETCH (best-case) — a meaningful improvement on the prior quarter; reachable only if everything goes right; (2) EXPECTED — a modest improvement; what you should reasonably hit if execution is solid; (3) FLOOR — flat performance; the minimum acceptable result that wouldn't trigger an account-strategy rebuild. Document all three at start of each quarter; share with team + agency. At quarter-end: hitting STRETCH = celebrate + analyze what worked to repeat; hitting EXPECTED = stay course; hitting FLOOR = warning, diagnose; missing FLOOR = rebuild trigger. Single-point targets ('we want 10% improvement') make normal variance look like failure. Range targets give you elastic accountability — celebrate when overperformance happens, escalate when underperformance happens, accept normal variance in the middle. The structure also keeps reviews honest — a range admits normal market noise without letting a real miss pass as a hit.

Track these as INDEX METRICS, not ROAS metrics. Three indirect-ROI signals that compound over 12-24 months: (1) RETARGETING POOL DEPTH — every blog visitor + video viewer joins your retargeting Custom Audience. The pool's size at end of year is a proxy for upper-funnel ROI: bigger pool = cheaper cost-per-booked-job from retargeting later; (2) BRAND-SEARCH GROWTH — track searches for your business name in Google Search Console month-over-month. Direct traffic and brand searches rising year over year means your upper-funnel content is building name recognition; (3) CONVERSION PATHS in GA4 (Advertising → Attribution → Conversion paths) — leads who didn't book on the first visit but came back through Google search or direct traffic after seeing your upper-funnel content. GA4's conversion paths report shows this. Don't measure upper-funnel content on direct ROAS; measure on these three downstream indicators. Judging content on this month's direct ROI uses the wrong measurement window. The right framing: content is asset-building; judge it over many months, not this month.

Want Us to Do It For You?

Apply in 60 seconds. We'll apply everything in this guide to your business, for free.

Apply Now — It's Free