Paid media · Home-services lead generation

I do not sell traffic.
I sell booked jobs.

Six years running performance accounts and building the pages the money lands on. $3.6M in ad spend managed at 5.16x return, and sites built the way a dispatch board needs them — click-to-call above the fold, published pricing, self-scheduling, and the tracking wired before the first dollar goes out.

$3,635,622Ad spend managed
5.16xBlended return on ad spend
19.4%Blended ACoS across 22 months

Featured builds

Things you can open right now

Two account reports with real numbers, and three sites I built end to end. No mockups, no case-study PDFs.

The real problem

Most home-services accounts cannot tell you what a booked job costs

Not because nobody is looking. Because the measurement was never built, so the report defaults to the metrics that are easy to pull.

Calls are invisible

Most home-services conversions happen on the phone. With no dynamic number insertion, a paid call and an organic call look identical, and the campaign that actually fills the truck gets cut because its form count looks weak.

The report ends at the lead

Cost per lead is a vanity metric here. A $22 lead that never books is worse than a $60 lead that turns into a $3,200 panel upgrade. If the CRM data never comes back into the ad account, bidding optimizes toward the cheap lead every time.

The page undoes the ad

A perfectly targeted click lands on a slow page that hides the price and buries the phone number below three scrolls. The spend is not wasted in the auction. It is wasted after the click.

Transformation

Disconnected spend becomes an accountable system

Before

  • One tracking number on the site, shared by every source
  • Conversions counted as form fills only
  • Smart bidding switched on with no conversion history
  • Every ad group pointed at the homepage
  • Search terms reviewed when something looks wrong
  • Monthly report headlined by impressions and clicks
  • Price hidden behind a "call for a free quote" form

After

  • CallRail DNI, a distinct pool per source, 60-second qualified-call threshold
  • Exactly two primary conversions: booked form and qualified call
  • Manual → Maximize Conversions → tCPA, stepped, on real data
  • One ad group to one matching landing page, always
  • Search-term mining every Monday, negatives added the same day
  • Weekly report headlined by cost per booked job and revenue by service
  • Flat-rate pricing published, plus a calculator that returns a range in ten seconds

Capabilities

Six things I am actually hired to do

01 Paid search and paid social

Account structure, keyword and negative strategy, bid-strategy progression, budget pacing, search-term mining, ad copy and asset testing. Six years of daily account work across $3.6M in spend. Amazon Ads is where the volume sits; the transferable half is the bid-to-target math, which is identical whether the target is expressed as ACoS or as cost per booked job.

02 Conversion-built websites

Hand-written static HTML and CSS, no page builder, no theme. Mobile-first, sub-two-second loads on LTE, click-to-call in the header, hero, mid-page and footer, a sticky call bar under 768px, and the booking form above the fold. Service pages, service-area pages, schema, sitemap and canonicals.

03 Tracking and measurement

GTM containers head and body, GA4 configured inside the container rather than hardcoded, dataLayer events with the parameters that actually change a decision, a real thank-you page so the conversion is a pageview, call tracking with dynamic number insertion, and a documented spec so the next person can maintain it.

04 Local SEO

Google Business Profile setup and categories, service-area pages written per municipality rather than spun, citation consistency, review generation, and the on-page structure that decides whether a page competes in the map pack or just exists.

05 Reporting that survives scrutiny

One page, same format every week: spend, calls, forms, booked jobs, cost per booked job by campaign; revenue by service and by city; what I added as negatives and what it saved; what I changed and what I am testing next. If a campaign produces cheap leads that never book, the report says so and I shut it off.

06 Creative and offer strategy

Coupon and offer architecture, review-proof placement, financing framing, and the copy decisions that move a home-services buyer — publishing the price, naming the arrival window, and putting the warranty where the objection lives.

Stack

What I work in

Advertising platforms

Amazon AdsGoogle AdsMicrosoft AdsMeta AdsLocal Services AdsPerformance Max

Measurement

Google Tag ManagerGA4CallRailSearch ConsoleLooker StudioAmazon Brand Analytics

Build

HTMLCSSJavaScriptReactViteTailwindCloudflare PagesWordPress

SEO

Google Business ProfileAhrefsSEMrushScreaming FrogSchema / JSON-LD

Data

ExcelGoogle SheetsHelium 10Node.js scripting

Operations

ServiceTitanSlackNotionAsanaChatGPTClaude

Listed honestly: Amazon Ads is where my spend history lives. Google Ads, Local Services Ads and ServiceTitan are platforms I have built and planned against but not yet billed years inside — the 90-day plan linked above is how I would prove the difference in the first quarter rather than asking anyone to take my word for it.

Process

How an account gets built

01

Fix the measurement first

No dollar goes out before GTM, GA4, call tracking and the conversion actions are live and verified in DebugView. Launching without them means paying for data you cannot read.

02

Buy evidence, not efficiency

The first thirty days are for finding out what a booked job actually costs and which services carry the margin. Manual or Maximize Clicks, daily search-term review, no smart bidding on an empty account.

03

Match the page to the ad

One ad group, one landing page, one offer. The cheapest Quality Score improvement that exists, and the fastest conversion-rate gain available in most accounts.

04

Tighten in steps

Maximize Conversions once the signal is real, then tCPA set above the observed CPA and stepped down. Never one jump — a target set far below current performance simply stops serving.

05

Report on the number that matters

Cost per booked job on the top line, revenue by service next to it. Every week, same format, including the weeks where the honest answer is that something did not work.

FAQ

The questions worth asking me

Your spend history is Amazon Ads, not Google Ads. Why should that count?

Because I would rather you hear it from me than find it out later. The $3.6M is Amazon Sponsored Products, Brands and Display — I have not personally run a Google Ads account at that spend. What carries over is real: weekly search-term mining, negative-keyword discipline, bid-to-target math (ACoS is cost per sale as a percentage; cost per booked job is the same equation with a job ticket in place of an order value), budget pacing, and judging a campaign on revenue rather than clicks. What does not carry over is platform surface — Search match types, PMax asset groups, LSA and Google Guaranteed, geo and schedule modifiers around a dispatch board. That gap is why the 90-day plan on this page exists.

What does "cost per booked job" mean if I only have leads in my CRM?

It means the CRM has to talk back to the ad account. Booked-job status gets pushed back as an offline conversion, or at minimum reconciled weekly by hand until the integration is built. Until that loop closes, every optimisation decision is made on a proxy, and smart bidding will happily buy you the cheapest leads that never turn into a truck roll.

Why static HTML instead of WordPress?

Mobile speed is the entire game for emergency service searches. A typical WordPress home-services site ships several megabytes of theme and plugin assets before the phone number renders. The demo site on this page has zero dependencies and loads in well under two seconds on a phone on LTE. There is also no plugin surface to get compromised and no update that quietly breaks the booking form on a Saturday.

Should we publish prices on the site?

In most home-services accounts, yes, and it is usually the single highest-leverage change available. Published flat-rate pricing pre-qualifies the caller, so cost per booked job drops even when cost per lead rises — and the people who were never going to buy at $3,000 stop consuming truck rolls. It is a booked-job decision, not a design preference.

When would you launch Performance Max?

Not until there are roughly thirty conversions in the account, and never without brand terms excluded at account level. Launched early, PMax cannibalises brand traffic and reports the credit back to itself, which makes the account look like it is working while the incremental revenue is flat.

What are your hours?

40 hours a week, Monday to Friday, with full US Eastern overlap. I am based in Bulacan, Philippines and work the client's clock, not mine.

System ready

Give me the account and the first 90 days

Measurement in week one, evidence in month one, efficiency in month two, scale in month three. Reported weekly on the number that pays the bills.

Contact

Let's connect the first part of your system

Portfolio demo form — not wired to a backend. WhatsApp or email reaches me fastest.