You cannot cut it, because you cannot prove which one it is: the source field in the CRM is blank on half the jobs, and every vendor claims the credit. The Money Trail fixes that in the first 30 days — every new job starts carrying where it came from, and you finally see which channel produced the revenue.
Send your site, get the 3–5 findings costing you the most money — in writing, within 48 hours, checked against your live pages. No call, no cost, no obligation.
“Organic orders from the website grew noticeably. But what impressed me most was the automation: our call center manager now gets a report she used to spend days building.” Alex Levin · Head of Sales, multi-location home service, US
Hiring rather than buying a project? Some companies bring this in-house instead of briefing three vendors who each report on their own half. See the role fit →
One of these is costing you more than the rest. Each link goes to the full write-up: what it is, what fixing it produced, and what it did not.
I do three jobs most companies hire three people for: getting found in search, getting quoted inside AI answers, and building the tracking that proves either one produced money. The third is what makes the first two arguable with numbers instead of adjectives.
Hiring pages call these an SEO consultant, a GEO specialist and an AI automation consultant. Here they are one role — so nothing falls through the seams between three vendors who each report on their own half.
The proving ground is home services: eight US metros, ~1,600 jobs a month, and a deliberately hostile place to measure anything — jobs typed in by hand, half with no source, money moving over the phone. What survives that market is not fragile in a cleaner one.
Ten years in business before search: brand management, B2B and B2C sales, e-commerce SEO for an instrument distributor (Fender, Gibson, Ibanez), a YouTube channel from zero to 25K subscribers, ad budgets over $10K a month. That is why this starts at the invoice and works backwards instead of ending at a rankings report.
Every figure below was pulled programmatically — Search Console API, the CRM job and call-log APIs, the ad platform's reporting and billing APIs. Reproducible on request. Not a dashboard screenshot. Client anonymized.
An appliance repair company across eight US metros, roughly 1,600 jobs a month. Here is the whole story in three columns; the detailed method is underneath for anyone who wants it. Every number came out of an API, not a screenshot.
What it did not do, said plainly: click-through rate fell while all this was happening, because the site started appearing for far more searches, including ones it ranks badly for. And this ran for over a year — six months buys the structure and the first movement, not the whole curve.
The business arrived with analytics that had logged zero conversions in its entire history, an ad account optimising toward a page view, and 45% of jobs carrying no lead source at all. Rankings were never the bottleneck — the missing denominator was. So the measurement chain went in first, and everything after it could be argued with numbers instead of adjectives.
Footnote on the vertical: residential appliance repair, eight US metros, ~1,600 jobs a month, Housecall Pro as the CRM. The vertical is the stress test — hand-created jobs, no source fields, money moving over the phone — not the specialism.
First-touch source, landing page and timestamp written once per visitor. Forms and phone-link clicks logged server-side with a normalized phone key, and that key joined to the CRM job and its invoice amount — so attribution survives a dispatcher creating the job by hand.
Location and service pages restructured so city pages stack instead of splitting each other's rankings; cannibalization found from live Search Console data, not guesswork; schema and internal links rebuilt on top. Indexation went 64 → 1,174.
Entity stated up front, answers self-contained in the first 50 words, original data no competitor has, H2s phrased as the questions people actually ask. Then measured every few days and adjusted — twelve snapshots over six weeks, not one screenshot.
97,800 call records transcribed, classified and matched to jobs. That is what exposed the two channels the CRM had been crediting to the wrong source — and it is what separates leads that were never real from real customers lost mid-conversation.
| Engine | Jul 4 | Aug 18 |
|---|---|---|
ChatGPT |
1 | 813 |
Perplexity |
1 | 637 |
Microsoft Copilot |
1 | 630 |
Gemini |
9 | 215 |
Google AI Overviews |
34 | 177 |
Google AI Mode |
17 | 133 |
Grok (paused) |
194 | 25 |
Total responses citing the site: 63 → 2,605 across twelve snapshots (Ahrefs Brand Radar). Two caveats I keep attached to this table: engines I did no specific work for climbed just as hard, and the measurement tool was expanding its own index over the same window — so some of the rise belongs to the instrument, not the site. That is exactly why the attribution layer exists. Full breakdown →
Every AI-visibility claim in this industry rests on a screenshot of a chatbot being polite. So I built the measuring device instead: it sits on your server and logs the moment an assistant opens one of your pages to answer a real person. No tool sold today can see that, because it happens on your infrastructure, not theirs.
Third-party AI visibility tools tell you how often a brand appears in their own sample of prompts. Analytics tells you how many people clicked. Neither tells you how often an assistant actually fetched your page to compose a live answer for a real person. The tracker sits on the server and logs exactly that: every AI crawler and assistant request, by URL, separated into background crawling, training corpus and live answer fetches.
Five days of raw output from its first run are on the right. The row that matters is ChatGPT's live requests: 813 times in five days a page was pulled while an assistant was answering somebody's question. Over the same six-week window, analytics recorded 26 visits from all AI platforms combined.
Hundreds of answers a week, a handful of clicks. In home services the customer gets the answer — and the phone number — inside the chat and never touches the site. That gap is not a rounding error, it is the channel.
| Agent | Kind | 5 days |
|---|---|---|
| Meta external agent | crawl | 1,778 |
| ChatGPT | live answer | 813 |
| Perplexity | index | 704 |
| Amazonbot | crawl | 490 |
| OpenAI search | index | 178 |
| Claude | index | 122 |
| GPTBot | training | 118 |
| Bytespider | crawl | 68 |
| Claude | live answer | 49 |
| Perplexity | live answer | 19 |
Complete first sample, not a slice: the counter went up on Jul 18 and came down on Jul 23 during unrelated server maintenance. Reinstalled Aug 25 and collecting again. A fetch is not a citation and not a visit — keeping those three apart is the entire point of the instrument.
Each of these exists because a client needed an answer no product on the market could give — which paid leads were never real, why calls did not become jobs, which pages were fighting each other.
Full automation pipeline: scrapes the Google Local Services dashboard, downloads call recordings, transcribes them with a custom AI layer, and flags invalid leads for dispute automatically — no manual review.
Downloads call recordings from the CRM, transcribes and analyzes each call with a custom AI layer. Identifies missed booking opportunities and scores dispatcher performance automatically.
Automated data pipeline: LSA dashboard → Google Sheets → React dashboard. One live view for leads, spend, and CPL by city. Available in two tiers.
Custom SEO tool that pulls Google Search Console data and identifies pages competing for the same keywords. Used in all technical SEO audits.
End-to-end tracking setup: GTM, GA4 events, Google Ads conversion import, call tracking per channel. Closed the loop from ad click to booked job.
Had a one-page site with zero SEO. Built a new site from scratch and launched a blog as the core traffic driver. The blog turned a static brochure into a search-visible asset — phone started ringing, concerts started booking directly through the site.
Search, AI visibility and the measurement layer are the same problem wearing three different titles. Split them across vendors and the seams are exactly where the evidence disappears: the SEO cannot see the CRM, the developer has no opinion on citations, the analytics contractor never touches the content that earns them.
One operator, one context, one invoice — and a system built so it can be argued with.
of jobs arrived with no source recorded at all — nearly half the revenue could not be assigned to anything you were paying for.
of paid-lead spend, on one account, went to leads that were never customers. It had been invisible in every report the business received.
channels were being credited to the wrong source entirely, so budget kept moving toward the one that was not producing the work.
$2,500 a month is what finding out costs. What you are currently spending on the channel that does not work is what not finding out costs — and unlike the first number, nobody sends you an invoice for it.
No discovery-call gate and no proposal theatre. Every price is published, so you can decide whether it is worth talking to me before you talk to me.
A flat fee, always — no revenue share, no commission per lead. I build the numbers this business gets judged by, and nobody should be paid by their own scoreboard. What it takes from you: about twenty minutes of clicking “grant access”, and a job export if you have one.
Want the whole thing written out first — what is broken, what gets built month by month, what you own at the end? Read the program document → It is in plain English, with a glossary, and downloadable as a PDF.
Real data from real engagements, including the measurements that came back against me.
I built a proprietary tool that processes every call, identifies invalid leads, and recovers credits automatically. +$2,730 recovered in 10 days across 7 of 18 locations.
See how it works →What Google actually credits per category, and the automation that filed it across multi-location accounts — $13,000+ back in one cycle.
Read the breakdown →How location page architecture, schema, and internal linking turned near-zero indexation into full city coverage in 6 months.
Read the case study →People Also Ask isn't random. This is the framework I use to dominate PAA boxes for home service searches in competitive US markets.
Read the strategy →Ihor did serious SEO work for us — organic orders from the website grew noticeably. But what impressed me most was the automation: our call center manager used to manually review every Google LSA call to dispute the bad ones. Now that's fully automated, so they can focus on call quality instead of admin work. The custom dashboard Ihor built also gave us something we'd needed for years — one place to see exactly where money is going and where it's leaking. Really happy with the results.
We had a one-page site that was essentially invisible — no traffic, no calls, no bookings from the web. Ihor rebuilt it with proper SEO structure, and within a few months we started showing up in search results. The phone began ringing, and we started booking more concerts directly through the site. The site finally started working for us.
Send me the site. Within 48 hours you get the 3–5 findings costing you the most money, in writing, each verified against your live pages. No call needed — though the calendar is on the pricing page if you would rather talk.
Write me directly with the four lines below and the diagnostic comes back in writing within 48 hours — the 3–5 findings doing the most damage, each verified against your live pages. No call required, nothing to fill in twice.
odaryukigor@gmail.com · answered within a day, usually the same one. The clicked button opens your mail app with those four lines already in it.