For service businesses that take money over the phone

Stop paying for marketing
that never brought a job.

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.

1 → 5 jobs a day from search, one client, 18 locations 11,724 past jobs traced back to what produced them $23,000 of paid leads that were never real customers
30-day guarantee: no source on every new job by day 30 and the first month is free — clock starts when access arrives, not when you sign.

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
Ihor Odariuk — GEO and lead attribution operator

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 →

The five things that are usually broken

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.

01
Attribution — the layer everything else is measured against
First-touch source on the visit, carried into the lead, joined to the job and the invoice amount in the CRM.
Read the method →
02
GEO — being the answer, not a blue link
Content and schema built so ChatGPT, Gemini, AI Mode and AI Overviews can lift an answer straight out of the page.
Read the method →
03
Architecture — 1,100+ URLs that stack instead of fighting
Cannibalization detected from live Search Console data, then the URL and internal-link structure rebuilt around it.
Read the method →
04
Paid leads — audited against the same numbers
Calls transcribed and classified, then matched to CRM jobs to separate leads that were never real from customers lost on the phone.
Read the method →
05
Local surface — profiles, proximity, map pack
The configuration decisions that quietly delete a service-area business from local results.
Read the method →
06
Measurement — 6,676 AI requests, published in full
The open dataset behind every number on this site: per agent, per day, per URL, with the windows stated and the limits named.
See the data →
07
Automation — the decisions nobody has time to make
Paid-lead disputes, call classification at volume, document parsing. Six systems in production, each with the number it produced.
Read the method →
Start with the audit — four layers, from $1,500
Which of the four layers is actually stopping you, measured rather than guessed, with the logger left on your infrastructure.
See what is included →
63 → 2,605 AI answers citing the site, 6 weeks
7 engines cited
6,119 → 260,233 monthly search impressions
388 → 1,465 monthly search visits
11,724 jobs joined to their real source
97,800 call records matched to jobs
64 → 1,174 indexed pages
2 channels found mislabelled in the CRM
3 in 1 Search, AI visibility, revenue tooling — one operator
8 metros One system running in production, ~1,600 jobs/mo
10 yrs Business and marketing before I touched search
About

One person instead of three vendors.

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.

GEO · AEO Lead attribution Technical & local SEO Python CRM & call-log APIs GA4 · GTM React dashboards

Numbers, and where each one came from.

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.

6,119 → 260,233
Monthly search impressions, Sept 2025 → Aug 2026 · Search Console API
388 → 1,465
Monthly search visits — the one metric no CRM setting or ad budget can explain away
63 → 2,605
AI answers citing the site over six weeks, across 7 engines · ChatGPT alone 1 → 813
11,724
Jobs re-attributed to their real source after the CRM join — 45% had no source at all
97,800
Call records matched to CRM jobs, transcribed and classified
64 → 1,174
Pages earning impressions in Google after the URL architecture rebuild · Sept 2025 → Aug 2026

See exactly which of your pages an AI reads.

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.

The dark funnel, measured from inside the server

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.

AgentKind5 days
Meta external agentcrawl1,778
ChatGPTlive answer813
Perplexityindex704
Amazonbotcrawl490
OpenAI searchindex178
Claudeindex122
GPTBottraining118
Bytespidercrawl68
Claudelive answer49
Perplexitylive answer19

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.

When the answer is not for sale, I build the tool.

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.

PythonAutomationAICustom tooling

Find out which paid leads were never customers

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.

2,740 leads audited across 18 locations
358 invalid leads found (13.1% error rate)
~$23,000 in recoverable LSA spend identified
PythonAICRM IntegrationTelegram

Hear why the calls are not becoming jobs

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.

Flags "why didn't we book this?" per call
Scores dispatcher performance objectively
Weekly Telegram report with improvement areas
ReactGoogle Sheets APIPythonLSA

One dashboard instead of four logins

Automated data pipeline: LSA dashboard → Google Sheets → React dashboard. One live view for leads, spend, and CPL by city. Available in two tiers.

Tier 1: One-time dashboard setup + data export
Tier 2: Fully automated daily refresh pipeline
Google Ads + LSA + CRM in one view
PythonGSC APISemrush API

Find the pages competing against each other

Custom SEO tool that pulls Google Search Console data and identifies pages competing for the same keywords. Used in all technical SEO audits.

GSC-powered — real impression & click data
Visualizes overlapping keyword clusters
Built as internal tool — available as add-on
GTMGA4Google AdsCallRail

Every call traced back to what caused it

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.

Every call source tracked individually
Google Ads optimized toward real conversions
LSA + Google Ads + organic in one dashboard
Website BuildBlogSEOSpain

Event Company: From Zero Traffic to Inbound Calls

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.

New site built from scratch with SEO structure
Blog implemented as primary organic driver
Traffic up, inbound calls up, concerts booked

Why not just hire an agency?

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.

SEO agency
Reports impressions and positions. Can't tie either to a job in the CRM.
This
Search + GEO + the attribution layer, built as one system and audited against itself.
AI visibility vendor
Sells a screenshot of a chatbot being polite. No revenue number attached.
Developer
Ships the dashboard. Doesn't know why the page isn't being cited.
Analytics contractor
Wires up GA4 events. Doesn't write content or own rankings.
Generalist
Touches all of it. Goes deep on none of it.

What not knowing costs

45%

of jobs arrived with no source recorded at all — nearly half the revenue could not be assigned to anything you were paying for.

$23,000

of paid-lead spend, on one account, went to leads that were never customers. It had been invisible in every report the business received.

2

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.

The Money Trail — $2,500 a month, and the first month splits in two.

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.

$1,250 to start · $1,250 two weeks later, once the tracking is in and data is coming back · then $2,500 a month, flat

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.

Common questions.

All three, in one order: measurement first. I build the attribution layer, then grow the channels it can measure — search and AI answers — then audit the paid channel against the same numbers. Buying any one of them alone is how you end up with work nobody can defend a year later.
A visit from ChatGPT carries no search query, so analytics files it as direct and the channel looks like it does not exist. I store that referrer on first touch and join it to the job by phone number, which makes it countable in dollars. A server-side log records which pages assistants fetch live. Three signals — fetched, cited, arrived — kept apart, not blended.
No. Home services is where the system was stress-tested: jobs typed in by hand, half with no source recorded, money moving over the phone. That is close to the worst case for attribution, which makes it the proof rather than the boundary. What has to be true is simpler — you sell something with real transaction value, recorded somewhere an API can read.
Tracking is live in about a week and guaranteed by day 30. It is not retroactive, though history can sometimes be rebuilt from call logs — that is how 11,724 past jobs were re-attributed. Citations usually appear 6–10 weeks after the architecture changes, and revenue effects run one to three months behind that.
No, and anyone who does should end the conversation. What I do guarantee is the measurement: if every new job is not carrying its source 30 days after you hand me access, the first month is free. The first thing attribution did on my main engagement was disprove my own headline numbers — that page is still on this site, unedited.
About twenty minutes of clicking “grant access”: read access to Search Console and analytics, a small script on the site, and API access to the CRM and any ad accounts. Nobody’s workflow changes — dispatchers keep booking jobs exactly as they do now, because the join runs on the phone number rather than a field someone has to remember to fill in.

Working notes, in public.

Real data from real engagements, including the measurements that came back against me.

Also on the blog
All 16 articles →
"

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.

AL
Alex Levin
Head of Sales · Multi-location home service, US
"

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.

SM
Sergey Matusov
CEO · Event company, Spain

Start with the measurement.

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.

One email, no form

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.

  • Your site
  • Main service and the cities you cover
  • What feels broken: rankings, leads, tracking, or not sure yet
  • Whether read access to Search Console is possible — optional, it makes the answer sharper

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.