Case study · 60-day engagement

From 38% class fill to 92% in 8 weeks.

A Portland dog trainer with a 1,200 sqft training facility and 4 instructors was running 14 group classes a week. About a third of the slots were empty. He was paying $44 per inquiry on Meta — most of which went cold the moment they realized the trainer was 25 minutes away by car.

The challenge

"I am paying for leads who live too far away to ever show up."

The owner came in after a Reddit thread had blown up complaining about Meta ads from local trainers. He thought his ads were the problem. They were not. The targeting was.

We pulled his Meta and Google data. The damage:

  • Targeting was set to a 25-mile radius around his Portland zip. 65% of leads came from outside the 5-mile radius people will actually drive for a recurring weekly class.
  • One landing page for everything. A puppy parent looking for socialization classes saw the same hero image as someone with a 4-year-old reactive Pit mix. Different problems, same generic page.
  • Group class booking went through email. "Reply to schedule a class." Reply rate was 11%. Industry standard is real-time booking.
  • No breed-specific content anywhere on the site. Most dog owners search "[breed] training near me," not "dog training near me." We pulled search console — 78% of his organic traffic was breed-specific. None of it had a place to land.

The fix was geographic + intent-specific. The ad spend stayed flat. Just stopped going to the wrong people.

The plan

Four priorities for a hyperlocal funnel.

Priority 1: Tighten radius to 4 miles (week 1)

Killed everything outside a 4-mile radius from the training facility. Counter-intuitive in marketing because "more reach = more leads," but for recurring weekly attendance, conversion-to-show on a Hillsboro lead from a Beaverton facility was effectively zero. CPM went up 30% in the smaller geo, but cost per actual class signup dropped 50%.

Priority 2: Breed + problem-specific landing pages (week 2-3)

Built 8 landing pages: puppy socialization, reactive dog basics, leash pulling, separation anxiety, recall training, Doodle-specific (huge in Portland), Pit Bull-specific, and small-dog (under 25lb) classes. Each page had video of an actual class, the trainer who teaches it, dates of the next 4 cohorts, and a real-time booking widget tied to the trainer's calendar.

Priority 3: Class-by-class booking widget (week 3)

Killed the email-reply flow. Replaced it with Acuity-embedded booking that showed exact dates, times, and remaining slots per class. Card-on-file required to reserve. Instant SMS confirmation + 48-hour reminder. Show-up rate jumped from 54% to 89% the same week.

Priority 4: Dog-name personalization in retargeting

If someone clicked the "Reactive Dog Basics" page, the next 14 days of Meta retargeting featured a different dog, same problem. If they entered their dog's name on any form, the SMS reminders included the dog's name. CTR on retargeting tripled. Click-to-book rate doubled.

AI tools we used

The internal stack that did the heavy lifting.

We do not pretend the work happens by hand. Three of our internal tools are the reason this engagement moved as fast as it did. Each of them replaces what used to be days of human time.

Tool 01Internal search-term scoring

Custom AI we built that grades every search term on commercial intent, urgency, and local match in under a second. Replaces a half-day human audit.

Tool 02Negative keyword expander

Takes one bad search term and proposes the related variants we should also negate before they show up. Found 87 negatives nobody had thought of.

Tool 03Conversion tracking validator

Crawls the site and fires every conversion event in a sandbox so you can see what is actually being recorded vs what should be. Caught the duplicate form fire in 4 minutes.

The execution

Week-by-week timeline.

WeekWhat we shippedWhat moved
Week 1Radius tightened to 4 miles, ad creative paused for restructureCost per click drops 35% the same week
Week 2First 4 breed/problem-specific landing pages liveConversion rate per page averages 6.2% vs 1.8% on old generic page
Week 3Acuity real-time booking widget shipped, email flow killedBooking-to-show jumps from 54% to 89%
Week 4Final 4 landing pages live, retargeting structured by visited pageRetargeting CTR triples
Week 6Class fill rate hits 81% across 14 weekly classesTrainer adds 2 new classes to the schedule
Week 8Quarterly reviewClass fill stable at 92%, retainer continues

The numbers

What changed in the data.

+142%
Class fill rate
-57%
Cost per signup
+65%
Show-up rate

The trainer's schedule went from "marketing problem" to "capacity problem":

Group classes are a $250-400 ticket each. The +54% fill across 16 weekly classes is roughly $4,800/mo in new gross revenue, recurring. The retainer cost less than 2 class signups per month.

I assumed "more reach equals more leads." Mark cut my radius from 25 miles to 4 and my actual booked classes doubled inside a month. He showed me the customer who lives 18 minutes away will not come every Tuesday at 6:30 PM, no matter how cheap the ad.

Dog trainer owner·Portland, OR · 4 instructors, 16 classes/week

Keep reading

Three more turnarounds you might find useful.

Want a story like this with your numbers on it?

Thirty minutes. We pull up your account on screen. We tell you what we would do, what we would not do, and whether we are the right fit for your business.

Book my 30 min call Run my free audit