TMC Roofing: 46 to 202 charged Google LSA leads a month
TMC Roofing is a residential and commercial roofer in Perris, California. Google charged it for 46 Local Services Ads leads in January 2026 and 202 in September 2026, inside its goal of 200 to 250 a month. Spend rose with volume. The owner reports revenue grew from $3M to $8M in 12 months.
At a glance
46 to 202
charged Google LSA leads a month
January vs September 2026
63 to 136
LSA leads marked booked
August vs September 2026
$3M to $8M
annual revenue, as reported by the owner
12 months
- Trade
- Roofing, residential and commercial
- Region
- Perris, Riverside County, CA. Serves Riverside, San Bernardino, Orange, Los Angeles and San Diego counties
- Working with DG since
- 2025
- What we run
- Google Local Services Ads, website and SEO, Google Business Profile, reviews, citations, Yelp, Meta ads
- Their tools
- ServiceTitan for jobs and customers. Their own office team answers the phones
- Goal they set
- 200 to 250 leads a month, with a $100 cost per lead ceiling
Where they started
This is where things stood in early 2026, from Google's own account data and our audits.
- January 2026: Google charged TMC for 46 LSA leads on $4,366 of spend. The office connected on 55 of 103 LSA calls, 53%.
- No LSA leads were marked booked in December 2025 or January 2026, so nobody could see which leads turned into roofs.
- The website ran on Lovable. Our April 29 audit found 156 pages submitted to Google in 5 sitemaps and 0 of them indexed.
- Over the 90 days to April 28, 2026 the site showed up 132,137 times in Google search and got 392 clicks, a 0.30% click rate.
- Our May 29 Meta audit scored the ad account 30 out of 100. Server-side tracking had not fired since August 12, 2025.
What we did, in order
March 10, 2026
Audited the old site and shipped fixes: unique meta descriptions on 47 pages and wrong phone numbers corrected on 4 desert city pages.
Why: The SEO health score went from 78 to 87 on the fixes alone.
April 29, 2026
Ran a full SEO, AI search and competitor audit across 12 reports.
Why: The site had impressions and almost no clicks. The audit found 0 of 156 submitted pages indexed and the Orange County city pages set to noindex.
April 30 to May 4, 2026
Moved the site off Lovable hosting to Vercel, then tested what Google's crawler actually received.
Why: Crawlers were still getting near-empty pages. We dropped the patch we had built and went straight to a full rebuild instead of shipping something broken.
May 5 to May 14, 2026
Rebuilt the site in Next.js. Forms wired to the database on May 5, all 156 live URLs kept at the same address so no redirects were needed, titles rewritten for clicks on May 6, 13 blog posts by May 12, sitewide business and service schema on May 14.
Why: Pages that render on the server can be read and indexed. Keeping every URL meant the move carried no ranking risk.
May 21 to 22, 2026
Switched the new site live and fixed the lead email alert. From May 22 every website lead is also saved to a database.
Why: A form lead that only lives in an inbox can get lost. Now each one has a record.
May 29, 2026
Fixed Meta tracking (domain verified, Pixel and server-side events confirmed live) and built a website lead campaign with 2 ad sets and 3 retargeting audiences, all paused for the owner to approve.
Why: The old campaigns optimized for instant forms with broken tracking. A lead from someone who visits the site and fills the real form is worth more.
June 3 and June 22, 2026
Built two landing pages for the Meta ads: $0 down financing and a commercial roof assessment.
Why: Each ad gets a page that matches its offer.
July 30, 2026
Ran a Q3 audit and a click-rate plan from 90 days of Search Console data.
Why: It found 21 or more city pages still dropped from Google's index and a /cities page returning 404 with 471 internal links pointing at it.
August 13, 2026
Rewrote titles and descriptions for the same-day repair, tile and Oceanside page groups.
Why: Those pages were showing up in search and getting skipped.
August 2026
Meta campaigns went live. The owner signs off and switches ads on himself.
Why: That is the account rule. We build, he approves the spend.
September 2026
On the Google Business Profile: 14 posts, 3 new Q&As, 8 review replies and 4 directory listing updates.
Why: Keeps the profile active and every review answered.
September to October 2026
Pulled TMC's full LSA lead history from the Google Ads API and compared it with the owner's own lead tracker.
Why: Google had credited 26 leads back by October 21, 2026. The company's tracker showed 1.
October 1, 2026
Delivered the September report: 202 charged leads, inside the 200 to 250 goal. Set October's focus on bringing cost per charged lead back under $100 and the connect rate back toward 90%.
Why: Volume was there. Cost per lead had crept over the owner's ceiling.
Results
September 2026 was the first month inside the owner's 200 to 250 lead goal. Spend went up with it, so this is a volume story, not a cheaper-leads story.
- 202 charged LSA leads in September 2026, up from 102 in August and 46 in January.
- 136 leads marked booked in September, up from 63 in August. Cost per booked lead held at about $160 ($162.96 in August, $159.66 in September).
- 205 of 245 LSA calls connected in September, 84%. That is the client's office team, and it was 53% in January.
- Google Business Profile call taps went from 11 to 27, August 1 to 25 vs September 1 to 25.
- After the rebuild, Google search impressions went from 91,285 to 186,022 and clicks from 172 to 594 (January 10 to April 7 vs April 29 to July 27, 2026).
- The owner reports annual revenue grew from $3M to $8M in 12 months working with us.
| Month | Calls | Connected | Charged leads | Spend | Cost per charged lead |
|---|---|---|---|---|---|
| Oct 2025 | 47 | 25 (53%) | 23 | $1,940 | $84.36 |
| Nov 2025 | 84 | 48 (57%) | 44 | $3,861 | $87.75 |
| Dec 2025 | 61 | 34 (56%) | 30 | $2,467 | $82.23 |
| Jan 2026 | 103 | 55 (53%) | 46 | $4,366 | $94.92 |
| Feb 2026 | 80 | 58 (73%) | 60 | $5,871 | $97.85 |
| Mar 2026 | 76 | 58 (76%) | 64 | $5,791 | $90.48 |
| Apr 2026 | 84 | 50 (60%) | 54 | $5,278 | $97.74 |
| May 2026 | 67 | 51 (76%) | 55 | $5,313 | $96.61 |
| Jun 2026 | 78 | 51 (65%) | 48 | $4,566 | $95.13 |
| Jul 2026 | 35 | 24 (69%) | 26 | $2,397 | $92.20 |
| Aug 2026 | 104 | 92 (88%) | 102 | $10,267 | $100.65 |
| Sep 2026 | 245 | 205 (84%) | 202 | $21,714 | $107.50 |
Calls include repeat callers. Charged leads are the ones Google billed for. Calendar months.
Source: Google's Local Services Ads account report, synced to DG Ops, pulled October 21, 2026.
What took longer or didn't work
- Cost per charged lead went over the owner's $100 ceiling: $100.65 in August and $107.50 in September. From January to September spend rose about 5 times and cost per charged lead rose from $94.92 to $107.50.
- July 2026 dropped to 26 charged leads on $2,397 of spend before August picked back up.
- Map pack coverage stayed flat. TMC showed in the Google Maps top 3 on 3% to 9% of the area we scan for 6 roofing searches in August and September.
- The first hosting move on April 30 made the pages crawlers saw worse, not better. That cost several days before the Next.js rebuild started.
- After the rebuild, 21 or more city pages were still out of Google's index on July 30.
- Search appearances fell 39% from August to September, even though clicks went up.
- The connect rate slipped from 88% to 84% in September as call volume more than doubled. 40 calls didn't connect.
- The Meta lookalike audience built from past customers is still waiting on a customer list from ServiceTitan.