Book a call

Case Study · American Dry

We rebuilt measurement, and the money followed.

A basement waterproofing contractor with a long sales cycle and a five-figure average job. Its ad platforms could see only a sliver of what sold. We built the warehouse, resolved identity across web, phone, and CRM, and sent real booked revenue back to Google.

Motion:

The Results

Cost per won job
−16.7%Cost per won jobRamp vs. baseline
Lead to won job rate
+58.2%Lead to won job rate3.54% to 5.60%
New identities carrying a click ID
51.5%New identities carrying a click IDUp from 0%
Marketing efficiency ratio
6.50×Marketing efficiency ratioUp from 5.07×

Revenue on this page is indexed for confidentiality. Ratios are computed on period totals from the BigQuery warehouse.

The Short Version

What happened, in three paragraphs.

American Dry was struggling with marketing, measurement, and tracking all at once, and from the inside those three look identical. Google Ads was optimizing against a thin, mislabeled slice of outcomes. In the five months before the rebuild, not one conversion handed back to Google carried a resolved click ID.

Once the warehouse could say that this ad click became this phone call, which became this booked job, Smart Bidding had something true to learn from. Cost per won job fell 16.7% and the efficiency ratio rose from 5.07× to 6.50×, while monthly media spend nearly tripled.

Revenue moved in three phases and never reversed: flat while the warehouse filled, a four-week dip while campaigns re-learned against sold jobs, then a ramp from April that had not plateaued by the end of August.

Partner
American Dry
Home services
What we did
Data engineering, Attribution, Paid media, SEO
Stack
  • BigQuery
  • Cloud Run
  • Cloud Functions
  • GA4
  • Zoho CRM
  • CallRail
  • Gravity Forms
  • Google Ads
Data window
Through August 31, 2026

The Problem

Three systems, no spine.

Web forms lived in Gravity Forms. Phone calls lived in CallRail. Pipeline truth lived in Zoho. Nothing joined them.

  1. 01

    The channel field held form names

    Lead_Source values were Hero Form, Quote Form, and Contact Form. Every report built on it answered which form someone filled in, while the business read it as which marketing worked.

  2. 02

    Click IDs died at the form

    GCLID and UTM values reached the landing page and were dropped before the CRM record was created, so ad platforms could not connect a click to a sale.

  3. 03

    Revenue had no agreed definition

    Booked, sold, and closed meant different things in different reports. With three answers on the table, nobody trusted any of them.

01 · Revenue

Three phases, one direction.

Weekly booked revenue through 2026, indexed so the baseline average equals 100. Grey is the baseline while the warehouse filled, light blue is March, when the conversion signal changed underneath live campaigns, and navy is the ramp from April on.

Weekly booked revenue, indexed (baseline = 100)

Learning2026-01-05 · Booked revenue index: index 652026-01-12 · Booked revenue index: index 2422026-01-19 · Booked revenue index: index 1812026-01-26 · Booked revenue index: index 472026-02-02 · Booked revenue index: index 452026-02-09 · Booked revenue index: index 2192026-02-16 · Booked revenue index: index 862026-03-02 · Booked revenue index: index 282026-03-09 · Booked revenue index: index 1302026-03-16 · Booked revenue index: index 2092026-03-23 · Booked revenue index: index 1562026-03-30 · Booked revenue index: index 1242026-04-06 · Booked revenue index: index 4152026-04-13 · Booked revenue index: index 2182026-04-20 · Booked revenue index: index 1902026-04-27 · Booked revenue index: index 2632026-05-04 · Booked revenue index: index 2162026-05-11 · Booked revenue index: index 2082026-05-18 · Booked revenue index: index 2672026-05-25 · Booked revenue index: index 2012026-06-01 · Booked revenue index: index 2872026-06-08 · Booked revenue index: index 3452026-06-15 · Booked revenue index: index 1792026-06-22 · Booked revenue index: index 2042026-06-29 · Booked revenue index: index 2562026-07-06 · Booked revenue index: index 4312026-07-13 · Booked revenue index: index 2162026-07-20 · Booked revenue index: index 3242026-07-27 · Booked revenue index: index 3162026-08-03 · Booked revenue index: index 5512026-08-10 · Booked revenue index: index 6222026-08-17 · Booked revenue index: index 7812026-08-24 · Booked revenue index: index 1085JanFebMarAprMayJunJulAug
  • Booked revenue index
Weeks of Jan 5 to Aug 24, 2026, on the install-date anchor the Partner dashboard uses. Source: BigQuery warehouse.

FindingThe ramp holds week by week. Revenue climbs through nearly every week from April, and no single outsized week carries the trend.

02 · Signal timing

Bid on the booking, because the install comes too late.

American Dry books installs two to three months out. The median deal takes 67 days from creation to its scheduled install. By the time a completed install reports back, the auction that produced it is a quarter stale, and marketing can't adjust on a signal that arrives that late.

So we optimize on the booking. The rule we apply everywhere is to feed bidding the deepest stage that still returns in time to act on, and to carry a revenue value with it.

03 · Identity resolution

From zero click IDs to half of everything.

The identity layer stitches one person together from a form submission, an answered call, and a CRM record, then carries the first click ID it ever saw forward onto every pipeline event. It resolves more than 49,000 identities.

Before March, every conversion we sent Google could only be matched on hashed email or phone. That works for reporting but is far weaker for bidding. Deterministic click-ID matches went from one a month to 235.

Conversions handed back to Google, by how Google can match them

2026-01 · Matched on hashed email or phone: 140 conversions2026-02 · Matched on click ID: 1 conversions2026-02 · Matched on hashed email or phone: 118 conversions2026-03 · Matched on click ID: 90 conversions2026-03 · Matched on hashed email or phone: 239 conversions2026-04 · Matched on click ID: 62 conversions2026-04 · Matched on hashed email or phone: 150 conversions2026-05 · Matched on click ID: 51 conversions2026-05 · Matched on hashed email or phone: 94 conversions2026-06 · Matched on click ID: 62 conversions2026-06 · Matched on hashed email or phone: 81 conversions2026-07 · Matched on click ID: 200 conversions2026-07 · Matched on hashed email or phone: 284 conversions2026-08 · Matched on click ID: 235 conversions2026-08 · Matched on hashed email or phone: 343 conversions2026-01 · New identities with a click ID (%): 0.0%2026-02 · New identities with a click ID (%): 1.1%2026-03 · New identities with a click ID (%): 35.5%2026-04 · New identities with a click ID (%): 39.5%2026-05 · New identities with a click ID (%): 47.5%2026-06 · New identities with a click ID (%): 53.2%2026-07 · New identities with a click ID (%): 50.4%2026-08 · New identities with a click ID (%): 51.5%JanFebMarAprMayJunJulAug
  • Matched on click ID
  • Matched on hashed email or phone
  • New identities with a click ID (%)
Monthly conversion uploads, Jan to Aug 2026. Source: BigQuery warehouse and the Google Ads upload log.

FindingClick-ID matches grew alongside total uploads. The same rebuild that fixed identity also fixed what Smart Bidding could see.

04 · Unit economics

Each lead cost more. Each customer cost less.

Cost per lead went up 32%, and that was the point. Feeding Google real sold jobs instead of raw form fills moved bidding toward more expensive, better-qualified demand. Lead-to-won rose 58%, so each more expensive lead bought a materially cheaper customer.

MetricBaselineLearningRampRamp vs. baseline
Cost per won job10013083−16.7%
Average booked value per won job10076107+6.8%
Marketing efficiency ratio5.07×2.95×6.50×+28.2%
Cost per lead10096132+31.9%
Lead to won job3.54%2.60%5.60%+58.2%

Baseline runs from the first day media spend lands in the warehouse to the day before the signal changed. Ramp runs April 1 to August 31. Ratios use period totals.

05 · Robustness

Does the ramp survive a different clock?

The obvious objection: if revenue is booked on the install date, a ramp could be crews catching up on a backlog rather than marketing improving. So we recut the same revenue on the date each deal entered a won stage, using CRM stage-transition history instead of install dates. The ramp holds on both clocks.

The honest part

It got worse for four weeks first, and we said it would.

Changing what a campaign optimizes toward resets what it has learned. For roughly four weeks in March, cost per won job got worse while campaigns that had spent two years bidding toward form fills re-learned against sold jobs. We flagged the dip as expected before it happened, and it reversed on schedule.

Your Next Step

Want numbers like these you can check?

In a free 30-minute Insight Session, we’ll get to know your business, where you want to take it, and the challenges you’re working through. We’ll talk through your tools, your questions, and what success looks like to you, so you leave with a clear picture of the right next step.

Your vision, goals, and challenges understoodYour tools and current setup reviewed togetherStraight answers to the questions on your mind
Book Your Insight Session