Offline conversion tracking for home services (roofing, HVAC, solar, plumbing)

Roofing, HVAC, Solar, PlumbingBooked, Completed, SignedHighLevel Native
Any CRM by Webhook

Home services leads take days or weeks to become jobs. DataCops sends the qualified lead, booked estimate, completed estimate and signed job back to Meta and Google Ads, matched to the ad click, so campaigns learn from real jobs.

Setup in 5 minutes
No credit card
One lead from a Meta ad
From form fill to won deal in HighLevel
With DataCops
Form fillSent to Meta
Booked callSent to Meta
Showed upSent to Meta
Deal wonSent with its value
Matched to the original ad click by email

Trusted by agencies and brands running paid media

AffilinoBigfishClever DigitalKeetraxLegendListingLogicNumeroStormZealdBurst Digital

Home services leads do not buy on the day they click

A homeowner with a leaking roof searches at 9pm, clicks your ad, fills in the form and then waits. Your office calls the next morning. An estimate is booked for Thursday. The job is signed two weeks later, and the invoice is paid a month after that. Meta and Google saw the form fill. They saw nothing else.

That gap is the whole problem. The ad platforms learn from whatever you tell them. If the only thing you tell them is 'form submitted', they will find you more people who submit forms. In roofing, HVAC, solar and plumbing that includes people who never pick up the phone, people outside your service area and people shopping five quotes for a price. Offline conversion tracking means sending the later steps back, so the platforms learn from the leads that turned into jobs.

Which stages to send, and which to leave out

You do not need to send everything. Home services usually have a short list of stages that matter, and the order below works for most trades. Send the stage that is early enough to happen often and late enough to mean something.

Cancelled, no-show and lost are never sent by DataCops. That is deliberate. Sending 'lost' as an event would only teach the platform to find more of the people you lose.

  • Qualified, in your service area. The lead is real, has the problem you fix and lives where you work. This is the stage most small shops should send first, because it happens for a good share of leads and it filters out the wrong postcodes.
  • Booked estimate. Someone agreed to a time. In HighLevel this is the booked stage. It is the best signal for trades with a few dozen leads a month.
  • Completed estimate. Your estimator actually stood in the house. In HighLevel this is the showed stage. It removes the people who booked and then vanished.
  • Signed job, with value. The won stage, sent with the contract value. Send this once you have enough volume to feed it, and it lets you optimise toward revenue.
  • Paid. Sent when the invoice is paid. Useful for reporting, less useful for optimising, because it arrives so late.

Example, made up

A roofer gets 60 leads a month. Twelve book an estimate, nine are completed, four are signed at an average of $14,000. Four signed jobs a month is too thin for an ad platform to learn from, so send booked or completed estimates as the main signal and keep signed jobs (with value) for reporting and your own review.

Seasonality: why the platform seems to forget you

Home services swing hard with the seasons. Roofing spikes after storms, HVAC after the first cold snap or heatwave, solar when incentives change, plumbing when pipes freeze. In the slow months there may be five or six leads a week, and that is too little for a platform to learn from.

Two habits help. First, send an earlier stage in the quiet months, so there are enough events to learn from, and move to later stages when volume is high. Second, keep sending through the off-season rather than switching everything off. A campaign that has been fed real outcomes all winter starts the spring rush ahead of one that went dark. Compare month against the same month last year, not against last month.

Call handling and duplicate contacts

Most home services leads arrive by phone. Someone clicks the ad, sees a number, and calls instead of filling in a form. Then your CRM creates a contact from the call, another from the form, and sometimes a third when a spouse rings back from a different number. Left alone, the same job can be counted two or three times.

Three things keep this clean. Merge contacts by phone number in your CRM before you rely on any stage. Send an order ID with each sale through the webhook; the same order ID sent twice counts once. And make sure the person who answers the phone moves the lead to a stage, because a stage only exists once a human or a workflow sets it. The delivery log shows each row as sent, held, skipped or failed, with the reason, so a duplicate shows up as a line you can read, not a mystery number.

A Monday review by campaign

Once stages are flowing, the most valuable habit is a weekly review, and it takes fifteen minutes. Every Monday, open the campaign list and look at each campaign against the stage you chose to optimise for, not against form fills.

Ask four questions per campaign: how many qualified leads did it produce last week, how many booked, what did each booked estimate cost, and did any stage fail to send. Pause the campaign with plenty of form fills and no qualified leads. Give more budget to the one with fewer leads and more booked estimates. If the delivery log shows held or failed rows, fix those first, because a missing stage looks exactly like a weak campaign.

Two ways in: HighLevel native, or a webhook

If your business runs on HighLevel, the connection is native. Install DataCops once on the agency, pick the sub-accounts, and the stages lead, booked, showed, won (with value) and paid go to Meta, Google Ads, TikTok and LinkedIn as the contact moves. The result is written back onto the HighLevel contact, so your office can see what was sent.

If you use another CRM such as Salesforce, Pipedrive, Close or Zoho, use the private sales webhook, directly or through Zapier, Make or n8n. Each post carries an event name, plus an email or a phone number, and optionally a value, currency, order ID and the ad click IDs. There is no native Salesforce or Pipedrive app, and Stripe and Paddle are not connected yet, so a payment taken there needs the webhook too.

What DataCops does, and what it does not

It keeps the ad click on your own domain for up to 90 days, matches each stage to that click or to hashed email and phone, sends it to the ad platform and logs the result per row. On Google Ads, conversion actions start as secondary, and booked or showed go only to a conversion action you map.

It does not read your calendar, decide who is in your service area or fix a messy CRM. It does not send cancelled, no-show or lost. It does not reverse refunds on Meta or TikTok, and per-row Google Ads rejections are not read back yet. Microsoft Ads is not supported. Sales that come from your CRM carry no bot check, so qualify them in the CRM first.

Set up offline conversions for a home services business

About 5 minutes per site. Agencies: about 15 minutes per client.

  1. Step 1
    code

    Add the DataCops script
    One script and one DNS record, so every ad click is kept on your own domain.

  2. Step 2
    ads_click

    Connect your ad accounts
    Meta, Google Ads, TikTok and LinkedIn by sign-in. Skip the ones you do not run.

  3. Step 3
    hub

    Connect where jobs are tracked
    HighLevel natively, or any other CRM through the webhook. Pick the stages to send.

Keep reading

FAQ

They are the steps after the form: a qualified lead, a booked estimate, a completed estimate, a signed job or a paid invoice. You send them back to Meta or Google Ads so the campaign learns from leads that became jobs, not only from form fills.

Let your ads learn from signed jobs

Send booked estimates and signed jobs to your ad platforms, logged per send. Start free.

Setup in 5 minutes. No credit card.

Live traffic quality

Updated just now

Visits · last 24h

487
Real users
35873.5%
Bots · auto-filtered
12926.5%

Without filtering, 26.5% of your reported traffic is bot noise inflating dashboards and draining ad spend.

Don't trust your analytics!

Make confident, data-driven decisions withactionable ad spend insights.

Setup in 2 minutes
No credit card