All case studies

Managed ChatGPT ads · Roofing

Research themes drew about twice the click rate.

We ran ChatGPT ads for a roofing contractor through its agency. Research and choosing-a-roofer ads drew about twice the click rate of urgent repairs and maintenance. Local reach and lead tracking told a more complicated story.

Client
Roofing contractor
Name kept private
Market
Small Western US metro
Scope
Managed ads in the client’s account
Observation window
About one month
Exported before the scheduled end

One account, mostly nationwide traffic. Local clicks were too few to compare themes. Lead tracking was never verified, so this study reports no leads, cost per lead, sales, or return on ad spend.

What earned clicks

The strongest themes were about research.

Roof research led at 1.63%. Urgent repairs, the client’s priority, was among the weakest at 0.72%. Maintenance was shown most.

Most impressions came during nationwide delivery. Local clicks were too few to judge themes, and all seven were still running when our data ended.

Click-through rate by themeShare of ad impressions that received a click
  1. Roof research1.63%
  2. Choosing a roofer1.57%
  3. Metal roofing1.47%
  4. Paying for a roof1.18%
  5. Roof maintenance0.72%
  6. Urgent repairs0.72%
  7. Roof rejuvenation0.45%

1.19% overall through the last export. Each theme combined its own hints, copy, and landing page, so this comparison does not isolate which element made the difference.

The work

From questions to campaigns to measurement.

  1. Build around buyer questions

    We checked how ChatGPT answered roofing questions, then built seven themes with tailored ad hints, copy, and matched landing pages. Urgent repairs was the client’s priority.

  2. Separate paid visits

    Campaign tracking templates added source, medium, campaign, and ad IDs to each click. Analytics could then identify paid ChatGPT traffic separately.

  3. Tighten the service area

    We moved from nationwide delivery to postal codes, then metro targeting for the main campaign. Postal-code exclusions kept the two campaigns’ areas separate.

  4. Inspect delivery and tracking

    We compared theme click rates, reviewed hourly delivery around bid changes, and traced the website’s lead tags. Those checks exposed what we could and could not measure.

Local delivery

A tighter area meant much less volume.

We launched nationwide with town names in the ad hints. We had missed that metro targeting was already available. Once we tagged paid clicks, analytics showed visits from large cities outside the service area. We never measured the full share of out-of-area traffic.

Postal-code targeting cut daily impressions by 92% in the main campaign and 98% in the second. With metro targeting, the main campaign ran at about 5% of its nationwide daily rate.

Main campaign · Relative daily impressions
Nationwide100%
Metro area~5%

Daily averages across 14 nationwide days versus eight metro days. The metro period includes a hint rewrite. This is a delivery comparison, not a controlled estimate of targeting’s effect.

The second campaign stayed on postal codes and ran at about 1% of its nationwide daily rate. Local clicks were too few to compare click rates with the nationwide weeks.

Bids and delivery

More impressions after a higher bid. No visible rise in clicks.

On ad-group days with clicks, the median cost per click was 97% of the bid cap. Close to the end, we raised both live campaigns’ caps to 2.5 times the original.

The main campaign’s impressions were nearly three times their usual level from 10am to midnight on the day of the bid increase, compared with the same hours over the previous eight days. Clicks did not visibly rise before our data ended the next day.

This suggests the bid constrained delivery. It does not prove it: both campaigns changed together, neither was left unchanged for comparison, and the main campaign’s hints had changed three days earlier. It says nothing about leads.

The measurement gap

We could see paid visits. We could not verify leads.

We built outside our usual launch flow and missed click tags for the first 13 days. Campaign tracking templates then made paid ChatGPT visits visible in analytics.

Lead tracking was a separate problem. We agreed to skip a test lead before launch. No written success measure was agreed, and the client’s form-entry count was never obtained. Phone leads were not tracked.

01

A trigger that could not fire

The lead tag required one URL to match two different thank-you pages at once. One condition was later removed, but we never confirmed the form reached the remaining page.

02

Tags delayed by a speed plugin

Tags waited for a scroll, tap, or mouse movement. A visitor could reach the thank-you page without the tag loading.

03

Tag manager installed twice

The duplicate and the delay were still present three days before the end. We drafted fixes but kept no record of sending them.

We report no leads, sales, cost per lead, or return on ad spend. The lead path was never shown to work while the ads ran.

What we would do differently

The checks that belong before the spend.

Define success before launch

Agree the service area and a written success measure, using the client’s own lead count and billed costs.

Prove the full lead path

Submit a test lead and confirm it reaches the ad account. Check form and phone tracking, tags, and page-speed plugins before spending.

Check the platform, then build

Read the current docs and changelog. Add tracking at build time and use the budget type the chosen bidding strategy requires.

Make changes measurable

Change one thing at a time, keep a comparison campaign unchanged, and judge several complete days. Log requests to the agency and site owner.

About the data: one account in a small market. Rates come from the stored OpenAI ad-insight exports and hourly delivery records, with website checks and analytics used to investigate tracking. The last export was taken about two days before the scheduled end. These are observed results, not a forecast.

Managed ChatGPT ads

Campaigns, tracking, and the engineering behind them.

We handle the work in your ad account, directly or through your agency.

See how we run ChatGPT ads
ChatGPT Ads for a Roofer: Results and Lessons | Canonry