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

Roofing, HVAC, Solar, PlumbingBooked, Completed, SignedHighLevel App
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, Google Ads and your other ad platforms, 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

From a 9pm click to a signed job

How a home services lead gets back to the ad that found it.

  1. Step 01
    Saved on yourdomain.com
    fbclid from Meta Kept
    gclid from Google Ads Kept
    ttclid from TikTok Kept
    Kept for up to 90 days

    The script on your own domain keeps the ad click when the homeowner first lands.

  2. Step 02
    Stages your CRM reports
    Booked call Reported
    Showed up Reported
    Won, with value Reported

    Your office books the estimate, then signs the job, in HighLevel or your CRM.

  3. Step 03
    Finding the ad click again
    Won dealby email or phone
    Ad click, 23 days earlierMatched

    DataCops matches each stage to the click, by click ID or the email from the form.

  4. Step 04
    Won deal sent
    Meta Sent once
    Google Ads Sent once
    TikTok Sent once
    LinkedIn Sent once

    Duplicates and consent are checked, then the stage goes to every ad platform you connected.

Every stage is logged per platform with its status and reason. Nothing is silent.

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 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 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 leads that turned into jobs.

Which stages to send, and which to leave out

You do not need to send everything. Send the stage that is early enough to happen often and late enough to mean something. This order works for most trades.

  • Qualified, in your service area. The lead is real, has the problem you fix and lives where you work. Most small shops should send this first.
  • 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 stood in the house. In HighLevel this is the showed stage. It removes the people who booked and vanished.
  • Signed job, with value. The won stage, sent with the contract value, so campaigns can optimize toward revenue once you have the volume.
  • Paid. Useful for reporting, less useful for optimizing, because it arrives so late.

Cancelled, no-show and lost are best left unsent. Sending "lost" as a conversion would only teach the platform to find more of the people you lose.

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 booked or completed estimates become the main signal, and signed jobs with value go along for reporting and for value-based bidding later.

How DataCops keeps the click until the job is signed

The DataCops script loads from a subdomain of your own site, such as datacops.yourroofing.com, set up with one DNS record. Browsers treat it as part of your site, so ad blockers that match known tracking hosts do not stop it. It keeps the Google, Meta, TikTok, Microsoft, LinkedIn and X click IDs with each visitor for up to 90 days.

When the homeowner types their email into your form, DataCops links it to their visit and their ad click. Two weeks later, when your CRM reports the signed job with that email, the click is found. If the homeowner comes back on their phone and uses the same email, the earlier click can still be credited. For returning visitors on the same browser, a first-party server cookie can keep them recognised for up to 400 days, even on Safari. It is a per-site switch and starts off.

Two ways in: the HighLevel app, or a webhook

HighLevel

Many home services businesses and their agencies run on HighLevel. The DataCops app is free in the HighLevel Marketplace. Once connected, booked, showed and won in HighLevel go back to your ad platforms as real conversions, as the contact moves. There is no automation to build. Agencies link sub-accounts on the DataCops Agency plan and see every client on one board.

Any other CRM

Jobber, Housecall Pro, ServiceTitan, Salesforce, Pipedrive and the rest use the private sales webhook, directly or through Zapier, Make or n8n. Each post carries an event name and an email or phone, and optionally a value, currency, order ID and click IDs. Send the test flag while you set it up, and the post is logged without being sent. Every post shows in the log in plain words: sent, not sent, duplicate, ignored or rejected.

Eight ad platforms from one setup

Each stage goes server-side to every ad platform you connect: Meta, Google Ads, TikTok, LinkedIn, Microsoft Ads, Reddit, Pinterest and X. Meta, Google Ads, TikTok, LinkedIn and X connect with one-click sign-in. Microsoft Ads, Reddit and Pinterest connect with an API key. Microsoft uses its UET Conversions API, which is a Microsoft pilot: ask your Microsoft account manager to enable it, and events must reach it within 7 days. You choose per event which platforms get it, so booked estimates can go to Google while signed jobs go everywhere.

Email, phone and names are cleaned and SHA-256 hashed before they leave our servers. DataCops shows a match score out of 10 for the details you send, so you can see when adding a phone number would help. The score is our estimate, not the platform's own rating.

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 the form. Your CRM creates a contact from the call, another from the form, and sometimes a third when a spouse rings back from another number. Left alone, the same job could be counted two or three times.

DataCops keeps a sale ledger per ad platform. A sale with an order ID is sent once per order per platform and remembered for 400 days. A lead with an email is sent once per platform in a 30-minute window. Repeats show in the log as duplicates. On your side, merge contacts by phone in your CRM, and make sure whoever answers the phone moves the lead to a stage, because a stage only exists once a person or a workflow sets it.

Keep spam, bots and fake leads out

Home services ads attract junk: bot form fills, competitors, and lead sellers on VPNs. DataCops gives you three layers. Real people only, set per ad platform, stops conversions from bots and datacenter traffic reaching that platform, with VPN, proxy and Tor as an option. LeadCops forms, the DataCops lead forms, keep the ad click with every lead and can block disposable emails, free email addresses, domains that cannot receive mail and VPN submissions. And you can hold leads until your office qualifies them: held leads keep their click IDs, are sent when your CRM posts a release, and expire after 14 days. All three are off until you switch them on.

On the Organization plan you can also block bots at your Cloudflare edge, and export refund evidence for Google Ads click fraud: a CSV of the last 60 days for Google's click quality form. Google decides on any refund. DataCops checks visitors against more than 360 billion IP records and 350+ monitoring points.

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, too few for a platform to learn from.

Two habits help. Send an earlier stage in the quiet months so there are enough events, and move to later stages when volume is high. And keep sending through the off-season rather than switching everything off. Before the spring rush, Ads Warmup can send your past customers from a CSV, up to 20,000 rows, as real conversions with a match score per person. Preview is free; sending needs Business or Organization.

Refunds and cancelled jobs after payment

If a paid job is refunded, post the refund through the conversions API. DataCops retracts the conversion in Google Ads for a full refund and lowers its value for a partial one. Meta and TikTok have no correction call, so nothing is sent to them.

A Monday review by campaign

Once stages are flowing, the most valuable habit is a weekly review, and it takes fifteen minutes. Every Monday, look at each campaign against the stage you optimize for, not against form fills. Ask: how many qualified leads 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 bookings. Give budget to the one with fewer leads and more booked estimates.

The delivery report shows, per platform, what was sent, skipped or failed and why, for up to 400 days. Email alerts warn you when deliveries start failing or an ad connection is about to expire, and a new-lead email tells the office the moment a form lead lands, so the call goes out fast.

Consent

The built-in cookie banner is built to the IAB TCF v2.2 standard, shows in Europe by default and turns on Google Consent Mode v2. The server re-checks consent before every send. For EU, UK and Swiss visitors, nothing goes to an ad platform until they opt in.

Good to know before you start

  • Booked or completed estimates are the best main signal for most small trades.
  • Ask for email on your forms, so later CRM stages can find the ad click.
  • Send an order ID with each job, so repeats count once.
  • Send each stage when it happens: Meta takes events up to 7 days old, Google Ads up to 90 days after the click.

Everything behind each booked estimate

Capture Background

One first-party script, served from your own domain

  • Runs first-party from datacops.yourdomain, not a blockable third-party host
  • One script, one CNAME, live in about 5 minutes, no container to host
  • Server-side collection on Cloudflare's edge, close to every visitor
  • Captures click IDs at the network level, so fbclid and gclid still reach your CAPI feed after browsers strip them
  • Recovers 15 to 25% of the sessions other setups lose

Traffic Visibility

10%
20%
30%
40%
50%
60%
70%
80%
90%
100%

First-Party Script

~78%

Blockers and ITP cut your sessions

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
    One-click sign-in for Meta, Google Ads, TikTok and LinkedIn. An API key for Microsoft Ads, Reddit and Pinterest.

  3. Step 3
    hub

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

In short

Home services offline conversions with DataCops, in short

DataCops is a tool that sends the qualified lead, booked estimate, completed estimate and signed job from HighLevel or any CRM back to Meta, Google Ads and your other ad platforms, matched to the ad click, so home services campaigns learn from real jobs.

How DataCops does it

1

Keep the click for the weeks it takes

Roofing, HVAC, solar and plumbing leads take days or weeks to become jobs. DataCops keeps the click on your own domain for up to 90 days, with a signed server-set cookie up to 400 days where enabled, and with your DNS on Cloudflare the free Worker reads the click at the edge.

2

The stages that match your trade

HighLevel natively: lead, booked, showed, won with value, paid. A booked estimate, a completed estimate and a signed job map to booked, showed and won. Any other CRM posts to the private webhook. Cancelled, no-show and lost send nothing.

3

Choose the first signal

For most small trades a booked or completed estimate is the best main signal, because signed jobs are too few for the ads to learn from quickly. Add the signed job once volume is steady.

4

Send in time, count once

Meta takes events up to 7 days old and Google Ads up to 90 days after the click. Send an order ID with each job so repeats count once.

5

Keep fake leads out

Every visit gets a bot verdict against 360+ billion IPs and 350+ monitoring points, with a Real people only switch per platform, off by default. CRM posts carry no bot flags, so the check applies to the site visit. Every form email is checked for disposable providers, domains with no mail server and an email risk score, and LeadCops can hold a lead.

6

Warm up, and see every send

Ads Warmup sends your past customers (up to 20,000, with a 0 to 10 match score) to Meta, Google Ads and TikTok, dated when you send, so a new campaign starts warm. A delivery log row shows each send as sent, held, skipped or failed with the reason.

Best for: roofers, HVAC, solar, plumbing and other home services firms, and agencies running their ads, where the money is made on a booked estimate and a signed job.

Free to start. See pricing.

When not to use DataCops

You need call recording or number swapping

DataCops does not track calls. It sends the outcomes your CRM holds.

Jobs are not on a contact

Without an email or phone on a contact, a job cannot be matched to its click.

You need refunds sent back to Meta or TikTok

Refunds do not reach Meta or TikTok. Google Ads is corrected: a full refund retracts the conversion and a partial one lowers its value.

You need bot checks on CRM stages

CRM posts carry no browser bot check. Qualify leads before the stage you send.

Sources

Platform rules checked October 2026. Rules change; check the platform's own page before you build.

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, Google Ads and your other ad platforms so campaigns learn 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