Where your customers
actually come from.
How a service business finds out which marketing produced real jobs — and what it takes to fix it when the answer turns out to be “nobody knows.” The program is called The Money Trail, it runs six months at $2,500 a month, and the first thirty days are guaranteed. No marketing knowledge needed: every term is explained where it appears, and there is a glossary at the end.
Or skip the reading and ask for the free written diagnostic — three to five findings on your own site, in writing, within 48 hours.
Imagine a shop with five doors and no cameras. Customers come in all day and some of them buy. At the end of the month five landlords each hand you a bill, and each one says their door brought the customers. You cannot check, so you pay all five and hope. Next year you cut one at random.
That is marketing for almost every service business I have opened up. My job is to install the cameras first, then widen the doors that actually bring buyers.
Three things are broken, and they break in a fixed order. Fixing the third one first — which is what almost everybody does, because it is the fashionable one — is why your last engagement felt like nothing happened.
Nothing is traceable
Every budget decision is a guess. You cannot cut the channel that does nothing, because you cannot prove which one it is.
Fix: Tracking that follows one customer from first click to the invoice amount in your CRM. Month one.
The site fights itself
Five of your pages chase the same customer, so none of them wins. More pages make it worse — and you have been sold more pages.
Fix: Rebuild the structure so each page has one job and the site pushes its best pages hardest. Months two to three.
AI answers are invisible
Customers now ask an assistant instead of searching. That traffic lands in your reports as “Direct”, which means “no idea”.
Fix: Separate it out, log which pages assistants actually read, make those pages worth quoting. Months two to six.
$2,500 a month, six months, no lock-in, and it starts with a free written diagnostic you can act on without hiring me. The rest of this page is the detail behind those four facts.
You cannot tell what produced the money.
The phone rings. Your dispatcher is mid-conversation with someone whose freezer is leaking, and the CRM has a dropdown called “Lead source”. They pick the first option, or leave it blank, or type “phone” — which is not a source, it is a device. The job gets done, the invoice gets paid, and the record of where that customer came from is gone forever.
Multiply by a year of jobs. Your agency reports that traffic went up. Your lead platform reports leads delivered. Both are true, neither says whether the money came back — so you keep paying everyone, or cut whoever you like least.
Nobody sells the join. Agencies report traffic because traffic is what their tools produce. Lead platforms report leads because that is what they bill for. Your CRM was built to schedule technicians. Every vendor reports the part that makes them look good, and no one owns the connection between them.
What I do
Record how every visitor arrived and keep it across visits. Write every enquiry to a log you own, with the phone number normalized so (555) 010-0123 and 5550100123 are the same person. Match that key against your job records — which turns “a lead” into “a job worth $840 completed on the 14th”. Rebuild the same match backwards over past months where your call logs allow it. Split AI-assistant visits out of “Direct”, where analytics files them by default.
Rebuilding attribution from call logs and CRM records re-attributed 11,724 jobs and exposed two channels the CRM had been crediting to the wrong source.
On the call side, 97,800 call records were matched to jobs to separate leads that were never real from real customers lost during the conversation. Only the second kind can be won back — by changing how calls are handled, not by asking anyone for a refund — and it was the bigger number.
What you get that you do not have today: invoiced dollars per channel per month, cost per completed job for every paid channel next to the same figure for organic, which locations produce work and which you have been subsidising, and how many enquiries died before becoming jobs.
Your website competes with itself.
Somebody built you location pages — one per city, each assigned a single service rotating down a list, so one city page talks about freezers and the next about dishwashers. A customer in the first city with a broken oven finds nothing of yours. Meanwhile five other pages all say roughly “appliance repair in [region]”, so search engines split your visibility between them and none of them ranks.
You hired five salespeople and put them all behind one counter arguing over the same customer, while four counters stand empty. Nothing is wrong with the salespeople. The floor plan is wrong — and in this trade the floor plan is invisible unless someone measures it.
What I do
Pull the conflicts out of your own Search Console data and resolve them — merge, redirect or re-target, which often means removing pages, and removing the right pages is a gain. Rebuild the hierarchy so services are a real section with cities beneath them. Rebuild internal links so the site's weight reaches the pages that earn calls. Rebuild the machine-readable markup describing your business, locations and services. Fix the technical layer: duplicate description tags written by two plugins at once, multiple headings, cut-off titles, demo pages left live by a theme. Then add pages — built on your job data, against demand that was measured rather than assumed.
On a site I audited, a brand page sitting in the template menu had 188 internal links pointing at it. Three of the four best-performing city pages had zero — no route from the site's own pages, so nothing told Google those cities mattered.
Indexed pages 64 → 1,174. Impressions over the trailing six months 98,712 → 838,495, average position 17.1 → 9.4. Referring domains 29 → 212. Organic jobs went from roughly one every three days to five a day. The full case study →
Two honest notes on that case. Click-through rate fell during the growth, 4.7% → 0.9%, because the site began appearing for far more searches including ones it ranks poorly for — a vendor showing you only the metrics that went up is managing your impression of the work. And that engagement ran well over a year: six months buys the structure and the first movement, not the whole curve.
AI assistants are the new front door.
Your customer used to type “refrigerator not cooling” into Google and click one of ten links. A growing share now ask ChatGPT, Gemini, Copilot or Google's own answer box, and get a written answer naming a few businesses. If you are not named, you were never in the running — and no report you currently receive will tell you it happened. When someone does click through, analytics files the visit under “Direct”, so the channel is invisible twice.
There is a new receptionist in your industry. She has read every website in your city and recommends three companies when someone asks. She has never heard of you, and nobody told you she exists.
What I do
Measure how often each engine names you before any work starts, so month six has something real to be compared against. Install a logger on your server that catches the fetch an assistant makes while writing an answer for a real person — separated from routine crawling and training collection. No third-party tool can see this; it happens on your infrastructure, not theirs. Then make those pages quotable: self-contained answers, nothing hidden behind tabs or scripts, and real data from your own job history that no competitor can copy.
AI answers citing the client's site went 63 → 2,605; ChatGPT specifically 1 → 813. Seven engines were checked — and the ones that cite are not the ones most tools cover on their standard plans.
Same logger on my own sites: 6,676 requests from AI agents, 529 live answer-time fetches. Of the 207 URLs that got one, 168 were fetched exactly once, and eight URLs carried about 44% of all fetches.
What that means for you: the part of your site an assistant will ever quote is far smaller than the part you publish. Buying more pages does not move this. Making the right eight quotable does. The dataset, with CSVs →
Six months, month by month.
| Period | What happens | What you can verify yourself |
|---|---|---|
| Month 1 | Measurement and technical foundation. Tracking installed, lead log live, CRM join built, history rebuilt where possible, analytics cleaned of duplicate tags and bot traffic. Baseline AI measurement taken. Technical fixes shipped as they surface. No new content. | New jobs carry a real source. The dashboard shows last month’s revenue split by channel — often for the first time. Speed and technical checks measured before and after. |
| Months 2–3 | Architecture. Conflicts resolved, hierarchy and internal linking rebuilt, schema deployed, answer-fetch logging running. Publishing begins against demand that was measured. | Pages the engines already knew move first, because they finally have a route and a reason. The fetch log starts naming which of your URLs assistants read. |
| Months 4–6 | Volume and rewriting at the same pace, including existing pages that carry impressions and waste them. Citations measured across engines every few days. Attribution starts producing revenue per channel instead of traffic per channel. | Movement on local queries in your core market. A cost per completed job per channel. Second and third AI measurements against the baseline. |
Not on this list: a ranking promise for month one. Any vendor who gives you one is describing normal fluctuation as their own work. Competitive local terms typically take six to nine months, and if we reach month five and they have not moved, you hear that from me before you ask.
A written update every Friday, without exception.
The most common story I hear about a previous agency is six months of silence followed by a report full of adjectives. This part I can guarantee, unlike rankings: a written update every Friday including the weeks when it was slow, something failed, or I am blocked waiting on you; a live work log with every task dated and linked to proof; a monthly report pulled from the APIs, including what did not work; bad news the same day, not on Friday; and a 30-minute call whenever you want one, with async as the default so no call is required to find out what happened.
Week 6 · Mar 14
Done:
- Attribution join now covers 2024–2026: 8,400 jobs matched to a source, 611 unmatched (7%) — jobs created manually with no call record, list attached.
- Four city pages merged into two, redirects verified live. Schema deployed on 31 location pages, 0 errors.
Did not go to plan: the dishwasher page rewrite is a week late — the job export came back with service type blank on 40% of rows. Asked your office for a corrected pull on Tuesday, still waiting. This is the only thing blocking me.
Numbers: impressions 9,120 (+7% w/w) · calls attributed to organic 34 (+2) · AI live fetches 41, top URL /refrigerator-repair-[city] with 9. Next week: internal linking pass, second AI measurement.
What you own at the end
Closed-loop attribution running on your infrastructure · a revenue figure per channel including paid leads · AI traffic separated out of Direct · the answer-fetch log per URL and engine · a rebuilt architecture with cannibalization resolved · location and service pages built on your own data · schema across the site · citation measurement against a pre-work baseline · a dashboard combining organic, AI, paid and calls · 24 weekly updates and 6 monthly reports · documentation written so your next contractor can pick it up without calling me.
All of it survives me. Tracking is on your domain, scripts in your repository, dashboards read your accounts. There is no kill switch and I do not want one.
What I do not promise.
No numbers before I have seen your data
Specific rankings, a specific number of citations, or a revenue forecast. Any figure offered at this stage would be invention rather than estimate — and you can already tell the difference, which is probably why you are reading a document instead of sitting on a discovery call.
I do not promise that every part of my own plan will work
On one engagement I built an automated pipeline that filed invalid-lead credit requests with a paid lead platform, under that platform's own published policy. It worked exactly as designed: 3,614 requests filed, 14 credited. The engineering was fine. The platform approves what it approves, and no amount of automation changes that — so I told the client the tool I had just built was not worth running.
That was a later cycle. An earlier one on the same account had been worth running — which is the actual lesson: the approval rate is a property of the platform's policy in a given period, not of the tool, and it moves without notice. Anyone quoting you a fixed approval rate for lead disputes is quoting a period they were lucky in.
The value came from the measurement instead. Reviewing 2,740 delivered leads against the CRM identified 358 that were invalid by the platform's own definition — roughly $23,000 of spend. Over one ten-day window, $2,730.54 came back across 7 of 18 locations.
And be clear what “came back” means here: it is advertising credit inside the lead platform, not cash. It reduces what you pay for future leads. It does not reach your bank account, it cannot be withdrawn, and if you leave the platform the unspent balance goes with it. Worth real money if you are going to keep buying leads there; worth much less if you are planning to stop — and that is a legitimate reason not to hire anyone for this work. How the dispute side actually works →
Read those as an audit result on one account in one period, not as a service and not as a forecast. Credit decisions belong entirely to the platform, most requests are refused, and I do not sell refund recovery — if you want someone who promises to get your ad money back, that is not me. What I sell is knowing which of your leads were never real, because that number changes what you should buy next month whether or not a single dollar ever comes back. I include the story because when my own idea fails you get the count, not a narrative.
And things I refuse to do even if asked: mark up review ratings earned on other platforms as your own (an explicit guideline violation, and the penalty lands on your domain, not the contractor's) · publish invented statistics or fake reviews · report a metric without its denominator · buy links at volume.
Your options, honestly compared.
| Option | Good at | Where it leaves you |
|---|---|---|
| Local SEO agency$1,500–5,000/mo | Volume. Writers, consistent publishing, a report that arrives on time. | Reporting on traffic, because that is what their tooling produces. The join to your invoices is not on the price list, and whoever sold it is not who does it. |
| Cheap freelancer$300–800/mo | Tasks you can specify exactly: write ten pages, fix these errors. | You have to know what to ask for. Nobody at this price audits architecture or builds attribution — and mass-produced pages are frequently what created the problem. |
| AI visibility tool$99–500/mo | A dashboard showing how often engines mention your brand. Genuinely useful and cheap. | It measures, it does not fix. Standard plans cover a subset of engines — on one popular tool, three of six — so a starter plan shows zero for engines actively fetching your site. And it cannot see live answer-time fetches at all. |
| Hiring in-house$70–110k/yr + tools | Full-time attention from someone who learns your business deeply. | You need to know enough to hire and to judge the work, and the role spans three specialisms that rarely sit in one person. |
| This program$2,500/mo | Measurement first, then the channel, by one person who builds both and reports weekly in writing. | One person, not a team: no design, PR or link building at scale, and if one of those is your real bottleneck I will say so rather than bill for it. |
A fair note on the tool row: if all you want is to know whether ChatGPT mentions your brand, buy the tool — it is $99 and it answers that. Hire me when you need to know whether the mention produced a job. What the tools do and do not cover →
$2,500 a month. Six months. No lock-in.
First month splits in two: $1,250 to start, $1,250 two weeks later — by then the tracking is live and data is coming back, so the second half is paid against something you can see.
Thirty days after you hand me the access, every new job in your CRM should carry the source that produced it. If it does not, that first month is free. The clock starts the day the access arrives rather than the day we agree to work together, because how fast your side grants it is the one part I cannot control.
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.
Six months is the plan, not the contract. No minimum term, and everything built stays yours. But the sequence needs six months to close: month one is measurement, two and three are architecture and indexing, and the movement that pays for the program lands in months four to six. A three-month agreement ends one step before the result. And if month one shows the channel is not worth growing, the engagement ends there — you paid for one month and got a permanent answer to a question your business could not previously answer.
Not included: ad spend, paid lead budgets and tool subscriptions (yours, billed by their vendors, cancellable without asking me) · site redesign — I work inside the platform you have · link building at scale, PR, photo and video · writing review replies for you, since a customer should feel answered by the business, not a contractor.
What this takes from you: about twenty minutes of clicking “grant access”, once. Read access to Search Console and analytics · read access to the CRM, or a twelve-month job export if that is easier — city, service type, job type, source and invoice amount, and no customer names or contact details · admin on the site · call tracking and the paid-lead accounts you want measured. Nobody's daily 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.
Fixed-scope projects — an attribution build, an architecture rebuild, or a paid-lead and call audit — start at $3,000 and are listed with everything else on the pricing page.
Questions people actually ask.
Usually yes. The requirement is not a specific system, it is that completed jobs are recorded somewhere with a date, a location and an amount — a spreadsheet works, invoices in accounting software work. If jobs exist only in someone’s head, I would say so before taking the engagement.
It constrains it: some platforms block server-side logging, which removes the answer-fetch part. Everything else still applies, and the free diagnostic tells you exactly which parts are unavailable on your platform before any money moves.
Either — your call. The measurement layer makes their work visible, which good agencies welcome and weak ones resist. I have also done exactly this layer as a white-labelled subcontractor, because it is usually the piece an agency cannot staff.
Because without it month six produces a chart with no denominator and we argue with the same tools you have now — opinions. It is also the fastest part: tracking is live within the first month and immediately tells you things about your existing spend you can act on without me.
Data within weeks — the first channel-by-channel revenue split usually lands in month one. Ranking and citation movement is slower: pages the engines already know can move in weeks, competitive local terms typically take six to nine months.
The first month carries a guarantee, because the first month is the part I fully control: 30 days after you hand me the access, every new job in your CRM should carry the source that produced it. If it does not, that month is free. The clock starts when the access arrives, not when we agree to start. Beyond that there is no lock-in, the first month is split into two payments so the second is paid against something you can already see, and you get a written record every Friday — so the failure mode where a client finds out in month six cannot happen here. What I will not guarantee is rankings, citation counts or a revenue figure: nobody can promise those honestly, and a guarantee written against a number I can influence but not control is a discount with extra steps.
I do not take two clients competing for the same customers in the same market. If you are in a market where I already work, my first reply says so.
I do — no account manager, no junior handoff, which is also the honest limit: one person’s capacity. A working, anonymised version of the call-analysis pipeline is public at github.com/IgorOdaryuk/call-audit-demo under an MIT licence and runs without any client data.
The terms, in plain English.
Start with the free part.
Send your website address and one sentence on what you have already tried. Within 48 hours you get the three to five findings doing the most damage, in writing, each verified against your live pages. No call required and no obligation after it.
Or take the document with you:
Every figure on this page comes from live client work or my own published data and can be shown in the source system on request. Client names are withheld deliberately — yours would be too.