Dave Morrison has been fixing furnaces and installing heat pumps in Portland, Oregon for 14 years. He and his business partner run Cascade Comfort HVAC out of a shop in the Lents neighborhood. They're the kind of company that shows up on time, charges fair prices, and gets handshake referrals from every job they complete.
For 14 years, that was enough. Word of mouth kept the schedule full.
Then it wasn't.
By late 2025, the referral pipeline had slowed. A few longtime contractor partners retired. A national HVAC franchise opened two locations in their service area with a real marketing budget. For the first time, Dave needed online leads to fill the gaps in his schedule. The problem was that his entire online presence consisted of a five-page template website from 2019 and a Google Business Profile he'd claimed but never touched.
Zero online leads. Zero organic traffic. Zero rankings for any keyword that mattered.
60 days after running licheo's AI SEO agent on the site, Cascade Comfort had generated 47 qualified service leads from organic search. They were appearing in the Google 3-pack for 23 different "near me" HVAC queries across Portland. Their phone was ringing from people they'd never met.
This is the exact playbook of how that happened.
The audit that made Dave reconsider his website
When I first talked to Dave, he told me his website "worked fine." And honestly, it did look okay on the surface. Clean template. Phone number at the top. A few stock photos of HVAC equipment.
Then licheo ran the initial audit.
The results were brutal. 312 issues across 55 checks. Here are the ones that mattered most.
The site had no Google Business Profile optimization whatsoever. Dave had claimed the listing years ago and set the category to "HVAC Contractor," but the business description was blank. No services listed. No posts. No Q&A. No photos of actual work. The service area was set to a single pin on his shop address instead of the dozen neighborhoods he actually serves.
There was zero local schema markup on the website. Google had no structured way to understand what Cascade Comfort does, where they do it, or what services they offer. The site was essentially a digital brochure with no machine-readable context.
Core Web Vitals were failing across the board. The template loaded three separate jQuery libraries, a chat widget that nobody had ever configured, and a stock photo slider that weighed in at 4.7 MB. Largest Contentful Paint on mobile was 6.8 seconds. Google was likely suppressing the site in mobile results because of this alone.
And the content situation was almost comically thin. Five pages total. The homepage, an "About" page, a "Services" page with four bullet points, a "Contact" page, and a "Gallery" page with six stock images. Total word count across the entire site: 340 words. That's less than the introduction you just read.
No neighborhood pages. No service-specific pages. No blog. Nothing targeting the actual search queries that Portland homeowners type when their furnace dies at 11 PM on a Tuesday.
Dave stared at the audit report for a while. Then he said, "So basically I don't exist on Google." That was accurate.
Week 1: Stopping the bleeding
licheo's AI agent prioritized the fixes by impact. Week one was about getting the technical foundation right so that everything else could work.
First, the agent stripped the site down to what it actually needed. The three jQuery libraries became one. The unconfigured chat widget was removed. The 4.7 MB image slider was replaced with a single optimized hero image at 87 KB. Two unused CSS frameworks were eliminated.
The results were immediate. LCP dropped from 6.8 seconds to 1.3 seconds on mobile. Time to First Byte went from 2.9 seconds to 0.4 seconds. The site went from failing every Core Web Vitals metric to passing all three. In Google's eyes, the site went from "punish this" to "this is fine" overnight.
The agent also fixed the crawl fundamentals. It generated a proper XML sitemap, set up a robots.txt that actually made sense, added canonical tags to prevent any duplicate content issues, and implemented proper 301 redirects for the handful of old URLs that were returning 404s.
None of this is glamorous work. Nobody calls their HVAC company because the site loads fast. But Google absolutely will suppress a site that loads slowly, especially on mobile where 72% of local searches happen. You have to fix the foundation before anything else matters.
Week 2: The Google Business Profile overhaul
This is where things started to shift. If I had to pick the single highest-impact change in this entire 60-day campaign, it was what licheo did with Dave's Google Business Profile.
The agent started by fixing the basics. Wrote a keyword-rich business description that naturally incorporated "Portland HVAC," "heat pump installation," "furnace repair," and "AC service" without sounding like spam. Updated business hours to reflect actual availability, including the emergency after-hours line.
Then it got strategic with categories. The primary category stayed as "HVAC Contractor," but the agent added six secondary categories: "Heating Contractor," "Air Conditioning Contractor," "Heat Pump Supplier," "Furnace Repair Service," "Air Conditioning Repair Service," and "Duct Cleaning Service." Each category opens up a new set of queries where the listing can appear.
Service area configuration was critical. Instead of a single pin, the agent set up a proper service area covering 14 Portland neighborhoods: Sellwood, Hawthorne, Division, Foster-Powell, Woodstock, Brooklyn, Eastmoreland, Reed, Lents, Mt. Tabor, Montavilla, Sunnyside, Buckman, and Richmond. This tells Google exactly where Cascade Comfort operates and triggers visibility in "near me" searches within those areas.
The agent built out the services section with detailed descriptions for nine offerings, each with pricing context ("Starting from $89 diagnostic fee") that Google can display directly in the listing.
Then came Google Business Profile posts, which most HVAC companies never touch. The agent drafted an initial batch and scheduled two posts per week covering seasonal tips and energy efficiency advice. Google rewards active profiles with better visibility, and the gap between a regularly updated profile and a dormant one is significant in competitive local markets.
Within 10 days of the GBP overhaul, Cascade Comfort appeared in the local 3-pack for "HVAC repair Portland" for the first time. Not at the top yet, but visible. For a company that had been completely invisible, that was a turning point.
Weeks 2-4: Building a local content machine
Here's the thing about local SEO that most small businesses get wrong. They build one "Services" page and expect Google to rank them for dozens of different queries. That's not how it works.
When someone searches "heat pump installation Sellwood Portland," Google wants to show them a page that's specifically about heat pump installation in Sellwood. Not a generic services page that mentions heat pumps somewhere in a bullet list.
licheo's AI agent understood this and built a content strategy around it.
First, it created individual service pages for each of Cascade Comfort's core offerings. Not thin doorway pages with swapped-out keywords, but genuinely useful content. The furnace repair page explained common furnace problems Portland homeowners face, typical repair costs in the Portland market, when to repair versus replace, and what to expect during a service call. 1,200 words of content that actually helps someone make a decision.
The heat pump installation page was even more detailed at 1,800 words, reflecting Portland's massive shift toward heat pumps thanks to Oregon's climate and the federal tax credits available through 2032. The agent pulled in current incentive information, average installation costs for the metro area, and comparisons between the brands Cascade Comfort installs.
Then came the neighborhood pages. The agent created dedicated landing pages for each of the 14 service areas. These weren't cookie-cutter templates. The Sellwood page mentioned the prevalence of early 1900s homes with aging forced-air systems. The Hawthorne page addressed the mix of residential and mixed-use buildings. The Mt. Tabor page discussed how elevation affects heating load calculations.
Each neighborhood page linked to every service page, and each service page linked back to relevant neighborhood pages. The agent built an internal linking structure that created clear topical relationships. Google could now understand that Cascade Comfort provides specific services in specific locations. That's the signal that wins "near me" searches.
By week four, the site had gone from 5 pages and 340 words to 31 pages and over 22,000 words of locally relevant content.
The review strategy that compounded everything
Dave had 11 Google reviews when we started. All five stars. All from more than a year ago. The reviews were genuine and positive, but the recency problem was killing him.
Google's local ranking algorithm weighs three factors heavily: review count, average rating, and recency. A business with 11 reviews from 18 months ago loses to a competitor with 30 reviews from the past three months, even if both have perfect ratings.
licheo built a simple review generation system that Dave could actually maintain. After every completed job, Dave sends a text message with a direct link to leave a Google review. The agent generated a short, natural-sounding template: "Hi [name], thanks for letting us take care of your [service type] today. If you have a minute, a Google review helps other Portland homeowners find us: [link]."
The results surprised even Dave. In the first 30 days, he collected 19 new reviews. By day 60, the total had reached 38 reviews with a 4.9 average rating. Customers were leaving detailed reviews that naturally mentioned service types and locations. "Dave and his partner replaced our old furnace in Sellwood and did an amazing job." That kind of organic keyword inclusion in reviews is pure gold for local rankings.
The agent also set up a process for responding to every review within 24 hours. Google tracks business responsiveness, and a 100% response rate signals an engaged, customer-focused business.
Week 3-5: Schema markup that speaks Google's language
Technical SEO might be invisible to customers, but it's everything to search engines. The schema markup implementation was one of the highest-leverage changes licheo made.
The agent implemented LocalBusiness schema on every page with Cascade Comfort's full business information: name, address, phone, service area definitions using GeoCircle markup for each of the 14 neighborhoods, operating hours, payment methods accepted, and founding date.
Each service page received Service schema linking back to the parent LocalBusiness entity with @id references, creating a connected graph of structured data that tells Google exactly what services are offered, where, and by whom.
The agent added HVACBusiness schema, a more specific subtype of LocalBusiness that 94% of HVAC companies miss entirely. It tells Google in no uncertain terms what kind of business this is, improving relevance matching for HVAC-specific queries.
FAQPage schema was implemented on every page with question-and-answer content. Within three weeks, Cascade Comfort's listings started showing FAQ rich snippets for queries like "how much does furnace repair cost Portland."
The agent also added AggregateRating schema pulling from review data. Star ratings and review counts display directly in search listings, and click-through rates on listings with star ratings run 20-35% higher than those without.
Week 5-8: Dominating "near me" searches
By week five, the compounding effect was unmistakable.
The technical fixes meant Google could crawl the site quickly. The content strategy meant relevant pages existed for dozens of specific queries. The GBP optimization signaled credibility. The schema markup gave Google structured understanding of the business. The reviews provided compounding social proof.
licheo's agent continued optimizing through weeks five to eight, monitoring ranking movements daily and adjusting based on what was gaining traction. A page targeting "emergency furnace repair Portland" was stuck at position 14. The agent expanded the content and added emergency service schema. It moved to position 4 within a week.
The agent identified new opportunities from search query data. "HVAC companies that install mini splits Portland" had surprising volume. A dedicated page ranked on page one within 12 days. A blog post about Oregon heat pump tax credits became the highest-traffic page on the entire site.
Each piece reinforced Cascade Comfort's topical authority. Google started treating the site as an authoritative local resource, lifting rankings across the board.
The 60-day scorecard
Here are the actual numbers from Cascade Comfort's first 60 days with licheo.
Lead generation: 47 qualified service leads from organic search -- people who found Cascade Comfort on Google and called or submitted a contact form. Average job value: $2,400. Total attributable revenue: over $112,000.
Search visibility: The site went from ranking for zero keywords to appearing in the top 10 for 67 HVAC-related queries in Portland. 23 of those were "near me" variations where Cascade Comfort appeared in the Google 3-pack.
Google Business Profile: Profile views increased from roughly 120 per month to over 2,800 per month. Direction requests went from 3 per month to 41. Phone calls directly from the GBP listing went from 1-2 per month to 28.
Website traffic: Organic traffic went from approximately 30 visits per month to 1,940, spanning 410 different keyword variations.
Review growth: From 11 reviews to 38 reviews. Rating held steady at 4.9 stars.
Core Web Vitals: All three metrics passing. LCP at 1.3 seconds. FID at 12 milliseconds. CLS at 0.02.
Dave told me the cost of running licheo for those two months was less than a single month of traditional SEO agency retainer. And unlike an agency, the AI agent worked every day, including weekends, adjusting in real time based on performance data.
What this means if you run a local service business
Dave's story isn't unique in the opportunity it represents. It's unique in how quickly the results came.
Most local service businesses, whether HVAC, plumbing, electrical, roofing, or landscaping, are sitting on the same untapped potential. They have real expertise and real credibility. What they lack is online visibility.
The gap between a business that dominates local search and one that's invisible usually comes down to a handful of things that aren't being done. None of them are hard problems individually. But together, they're overwhelming for a two-person HVAC company that needs to spend its time actually installing furnaces.
That's exactly why licheo exists. The AI agent handles the SEO work continuously, identifies opportunities as they emerge, and makes adjustments based on real performance data. Dave didn't become an SEO expert. He didn't hire a marketing manager. He let the AI handle the discipline of consistent optimization while he focused on running his business.
If Cascade Comfort can go from zero online leads to 47 in 60 days in one of the most competitive local service markets in the Pacific Northwest, the question isn't whether this can work for your business. It's how much longer you're willing to leave leads on the table.
Check your SEO standing for free and see where you stand. You might be closer to page one than you think.