The ask
The agency wanted to say “we already did the work on you” to every prospect: real Google visibility data per company. And it wanted a direct-mail campaign that only reaches shops that really underperform — a letter that says “you are invisible” to a business ranked first would be worse than no letter.
Two uses came out of it: batches from a bought list of around 800 HVAC businesses, and single reports on demand when the agency names a company.
The pipeline
- Resolve. Match the company to its Google Business Profile — by domain, then phone. A name match alone only goes to review.
- Measure. DataForSEO for 30 organic and 8 map searches per company; SerpApi for the “Google Verified” (Local Services) roster per city; a homepage screenshot and an ad-tag check.
- Check ads by hand. Five minutes, from a connection in the prospect’s state, plus the Ads Transparency Center.
- Gate. Not already strong · address matches the live listing · really an HVAC business.
- Build. A one-page, mobile-first report — and for the campaign a personal landing page, a printed letter and a PIN.
Accuracy engineering
- Name matching lied. In a dry run it would have told a shop ranked #1 in its own map box that it was invisible. Since then: domain or phone only; names go to review.
- Resolve, then measure. Switching to map-based matching cut unresolved listings from 70 % to 20 %, with 80 % resolved.
- A second engine where it counts. SerpApi rescued 13 of 25 remaining cases and found about 20 “Google Verified” providers per city instead of about 8 — including 6 advertisers the first engine had missed.
- A tool that was measured and not used. An automatic extractor for city and services from the website reached only 32 % on the city and 3 % on services in a test with 35 cases. So keywords stay agent-assisted, from the website.
Empty in one engine does not mean absent.
What the machine cannot see
Local ads are usually shown only to people who are physically in the market. A scan from outside saw 0 ads in 22 searches; a check from inside the market saw 4 paid placements.
Instead of pretending, the pipeline has one deliberately narrow human step: five minutes, only for paid placements. The rule: scan for rankings, eyes for ads. And the report says “no ads observed”, never “no ads”.
Built is not the same as mailable
- Three gates upstream drop strong performers, wrong addresses and non-HVAC businesses. Of 544 candidates, 213 qualified (39 %) — reported as yield, never as head count.
- A freshness gate right before shipping removed 7 businesses whose new numbers would have made their letters wrong.
- A re-audit after shipping, with parallel AI agents checking every business against the web, directories and its own website: 41 of 44 addresses correct. The 3 misses — old listings after a move or takeover — became a rule: three independent sources.
What a report looks like
One page: a verdict, four lane cards (organic, map 3-pack, paid ads, Google Verified), the map box for a money search with the business’s own position, the full keyword grid, the Google listing check and the review comparison with the map winners. No reconstructed search screenshots, no estimated revenue.
| Lane | Searches on page 1 / in the box | Verdict |
|---|---|---|
| Organic | 3 / 22 | Gap |
| Map 3-pack | 1 / 22 | Gap |
| Paid ads | none observed | Opportunity |
| Google Verified | not seen | Gap |
| Map box for “ac repair phoenix az” | Rating | Reviews |
|---|---|---|
| 1 · Competitor A | 4.9 | 1,212 |
| 2 · Competitor B | 4.8 | 864 |
| 3 · Competitor C | 4.7 | 530 |
| … #9 · Acme Heating & Air | 4.8 | 96 |
Economics and honest limits
Under $0.10 in data cost and a median of 113 seconds of machine time per company audit; 330 audits logged for $32.33 in total. Around 200 personal report pages built, around 100 letters shipped in five batches, and 11 single reports on demand — about $0.07 each plus roughly 10 minutes of human checking.
What it does not do:
- No outcome data in the files — so this case study is about process, accuracy and cost, not ROI.
- Keywords and service area are agent-assisted, not derived automatically.
- One location per report, desktop rankings; no geo grid.
- The ad check is manual by design; there is no revenue estimate.
- No one-command orchestrator: a set of CLI scripts that the agent runs step by step.