How a Texas pest control company nearly doubled new customer acquisition — and built a system that tells them exactly where every customer came from.
Three markets. Four ad channels. Zero visibility into which one was producing customers worth keeping. We built a closed-loop attribution system from scratch. No enterprise software. No data team. Q1 2025 to Q1 2026: 112 new customers became 222.
New customers added — Q1 YoY
Revenue billed — Q1 YoY
Cost per acquired customer
Average LTV — 2024 cohort (mature)
A Texas pest control company with a genuinely differentiated product
No contracts. Month-to-month service. Transparent pricing. Three markets — Houston, Fort Worth, and Granbury — with a growing fleet of technicians and a culture that treats every customer like a neighbor.
When I came on as CMO, the business was growing. The owner is a natural operator — sharp instincts, relentless energy, genuinely cares about his team and his customers. The product was excellent. The reviews were strong. Word of mouth was working.
But the marketing was running on gut feel. Money was going into Google, Facebook, and Bing. Leads were coming in. And nobody — not the owner, not the team, not the agency that had been running the campaigns — could tell you which dollar of ad spend was producing which customer. The dashboard was green. The revenue was growing. The attribution was a guess.
Three specific gaps were costing money the business didn't know it was losing
No closed-loop attribution. The contact form captured a name, email, and phone number. That's it. No UTM parameters. No session data. No channel tagging. Every lead that came in looked identical regardless of whether it came from a Facebook ad, a Google Business Profile click, or a neighbor's recommendation. Of 771 new customers acquired in the prior year, 99.4% had no lead source logged in the CRM — sales reps weren't filling in the source field.
No lead-to-revenue connection. The field service software held all the actual revenue data — jobs invoiced, payments collected, customer subscriptions. But it was completely disconnected from the marketing data. Nobody was matching leads to customers to revenue. The business knew it was making money. It didn't know which marketing decisions were producing that money.
Budget going to the wrong channels. One Facebook campaign was running at 1.04× ROAS — spending $100 to make $104. Barely profitable, not obviously broken, easy to ignore in a green dashboard. Meanwhile a Bing campaign was running at 10× ROAS and being starved of budget because nobody knew it was performing. Same total spend. Wildly different returns. No system to see the difference.
A closed-loop attribution system built from scratch — no enterprise software, no data team
Instrumented the website
Rebuilt the contact form to capture 39 data points with every submission. Visible fields plus hidden attribution fields that auto-populate before the user hits submit: UTM source, medium, campaign, term, content. Google Click ID. Facebook Click ID. Microsoft Ads Click ID. Landing page. Referrer. Session duration. Pages viewed. Device type. AI source detection for traffic from ChatGPT, Claude, Perplexity, and Gemini. Geographic data from IP. Every form submission fires three integrations simultaneously: creates a lead in BirdEye CRM, appends a row to the attribution database, and sends an email notification to the team.
Connected leads to real revenue
Built a Python script — revenue_sync.py — that runs automatically every morning at 6am. It reads every unmatched lead from the attribution database, queries the field service CRM by phone number and name, and writes actual revenue data back to the lead record: customer ID, match confidence, first service date, service type, total revenue collected, subscription status, projected lifetime value. For the first time, every lead record showed not just where the lead came from but whether they became a customer, what they paid, and what they're worth over their lifetime. The loop was closed.
Dual attribution: system vs. self-reported
Every lead form includes a 'How did you hear about us?' dropdown. The dashboard compares this against the UTM system attribution. Where they disagree — Facebook Ads claiming a lead the customer says came from a yard sign, Google Business Profile credited to word of mouth — is where the real attribution investigation begins. 168 of 240 all-time leads answered voluntarily. That's a 70% response rate. Word of mouth, yard signs, and Nextdoor — channels completely invisible to digital attribution — account for a meaningful share of self-reported acquisition.
Three revenue horizons
Most attribution systems stop at the first transaction. This one tracks three: initial price (first invoice), annual contract value (year 1 recurring services), and projected LTV. Every channel is evaluated across all three. A channel with low initial ROAS might have excellent LTV — or vice versa. Mature customer LTV (2024 cohort): $718 average. A $15 blended customer acquisition cost against $718 LTV is a 47× return — and that number only exists because the database connects spend to revenue.
Upsell intelligence
Built an Upsell Opportunities dashboard that cross-references active customer subscriptions against service history to identify which customers are strong candidates for additional services. 406 upcoming appointments in the next 30 days. 300 upsell opportunities identified. 286 unique customers flagged. The system surfaces customers with 12+ months of pest service as termite protection candidates, 6+ month customers for rodent exclusion, 3+ month customers for mosquito program add-ons. The field ops team now walks into every appointment knowing exactly which conversation to have.
Live analytics dashboard — 8 views
A multi-tab Streamlit dashboard hosted at a private URL pulls live data from the field service CRM across all three offices, Meta Ads API, Google Analytics 4, Google Search Console, Google Business Profile, CallRail, and the attribution database. Eight tabs: Overview, Advertising, Business Operations, Lead Tracking, Marketing KPIs, Web Analytics, Google Business Profile, Upsell Opportunities. The business owner opens it on his phone. The COO uses it to reconcile her books. The Chief Field Ops Officer texts into it from the field to get operational data in real time.
Year-over-year growth — Q1 2025 vs Q1 2026
All figures pulled directly from FieldRoutes API and Meta Graph API. Not estimates.
Customer lifetime value by acquisition cohort
2026 cohort is incomplete — most customers haven't reached 12-month mark yet.
The channels performing best weren't the ones getting the most budget
Google Business Profile converted leads to customers at 66% — 35 converted out of 53 total GBP leads all-time. Organic and direct traffic converted at 63%. Paid Facebook converted at 25%. These numbers don't appear in any platform dashboard. They only exist when you connect form submissions to CRM subscription records.
Meta's self-reported ROAS from customers who said Facebook brought them in: 2.57×. Meta's system-attributed ROAS via UTM/FBCLID: 1.70×. The gap between what customers say and what the pixel says is a 51% difference in attributed revenue. Both numbers matter — and they tell different stories about how Meta should be managed.
One signal nobody expected: AI-ChatGPT is already appearing as a lead source. Real people, real form submissions, traceable back to AI-generated referrals. The channel is small. It won't stay that way.
Same ad budget. Nearly double the new customers.
The same ad budget that was producing 112 new customers in Q1 2025 produced 222 new customers in Q1 2026. Nearly double. Not by spending more on the same channels. By knowing which channels were working and concentrating resources there.
The 1.04× ROAS Facebook general pest campaign was paused. The Bing campaign at 10× ROAS had its budget tripled. The Google Business Profile — a zero paid acquisition cost channel — was UTM-tagged across all three offices and now converts at 66% all-time, with review automation driving velocity on the Houston listing.
The 2026 business is on pace for approximately $780,000 in billed revenue — up from $650,979 in full year 2025. A 20% year-over-year growth trajectory built on the same operational team, the same service quality, and a marketing system that finally knows what's working.
New customers added Q1 YoY
112 new customers in Q1 2025 → 222 in Q1 2026
Revenue billed Q1 YoY
$116,805 → $182,426 — pulled from FieldRoutes API
Cost per acquired customer
vs. industry average of $150–$300+ for pest control
GBP lead-to-customer conversion
35 converted of 53 GBP leads — highest channel all-time
Annual value ROAS on Meta spend
$1,738 Meta spend → $12,687 year-1 contract value
Average LTV — 2024 cohort (mature)
$15 blended CPA vs. $718 LTV = 47× return
"Waking up to 6 leads gave me about 4 minutes of zero anxiety. It was amazing. Looking at the lead source they seem to be all from Facebook. Stellar job Cameron."
The client — owner, Texas pest control company
This is a local service business. Not a tech company.
Three markets. A fleet of trucks. A team of technicians. A COO managing the books and a field ops officer running routes. If a pest control company in Texas can build a closed-loop attribution system that connects every Facebook ad click to every invoiced job — your business can too.
The system described in this case study required no enterprise software, no dedicated data team, and no six-figure agency retainer. It required a clear methodology, the right technical architecture, and a CMO willing to do the work of connecting the dots between marketing and revenue.
That's what I build.
This case study is the central example in The Attribution Trap — a book about building closed-loop marketing systems for service businesses. Coming Q4 2026.
Want this built for your business?
The same system that connected every ad dollar to every booked job is available for your service business. It starts with a two-week audit.