GA4 measures your website. It can tell you which pages people landed on, where they came from, and whether they tapped your number, sent a request form or finished an online booking. It can't tell you whether that visit became a job, what the job paid, or whether the customer called back a week later from a number on your van. Set GA4 up for the three actions that matter, read four reports a month, and stop expecting it to answer "which marketing makes us money." That answer lives in your booked and completed jobs.
This guide is for the owner or office manager who has a GA4 property somebody created years ago and isn't sure it's counting anything useful. It's part of our marketing attribution guides.
What GA4 can and can't tell a contractor
GA4 is good at the website half of the story: which channel brought a visitor (search, ads, a referral site, an email), which page they entered on, and what they did there. For a trade business that's useful for three decisions: which service pages pull their weight (the HVAC SEO guide and plumbing SEO guide cover building them), whether your Google Business Profile link is sending people, and whether a site change broke your request form.
It's weak on everything that happens after the visit. A few limits worth knowing before you trust a number:
| GA4 limit | What it means for a contractor |
|---|---|
| It sees browsers, not people | A homeowner who reads your water heater page on a phone and books from a laptop can look like two visitors |
| It can't hear calls | A tap on your number is recorded; the call, its length and whether it booked are not |
| Data thresholds | Reports with demographics or search query data can withhold rows when too few users are involved, so small shops see gaps1 |
| Consent and blockers | Visitors who decline tracking or block scripts don't show up at all |
| No revenue from your invoices | GA4 never sees the heat pump replacement (say, a $9,800 job) the form fill turned into |
None of that makes GA4 wrong. It makes it a website tool. Treat it like one.
Set the property up right
Most contractor GA4 properties were created by a web designer and never touched again. Run through these six checks once. They take about an hour with Admin access to GA4 and your Google Ads account.
- 1
Check the property and web data stream
In Admin, confirm there's one property for the business and one web data stream for your website domain. Two properties for the same site splits your data.
- 2
Turn on enhanced measurement
In the web data stream, leave enhanced measurement on. It collects page views, scrolls, outbound clicks, site search and form interactions (form_start and form_submit) without extra code.
- 3
Set data retention to 14 months
Admin, Data Settings, Data Retention. Standard properties can choose 2 or 14 months. Pick 14 so explorations can compare this cooling season with last year's.
- 4
Filter out office traffic
Define internal traffic by your office IP address in the data stream's tag settings, then create an Internal Traffic data filter. Leave it in Testing for a week before you make it Active, because an active filter changes data permanently.
- 5
Link Search Console and Google Ads
Admin, Product links. Link the Search Console property you're a verified owner of, and link Google Ads with auto-tagging on so ad clicks carry a click id.
- 6
Mark your key events
Admin, Key events. Mark the three events in the next section. Leave everything else as a plain event.
A few details behind those steps. Enhanced measurement's form events fire on the first form interaction in a session and on submit, and Google requires that no personally identifiable information is collected in them, so don't pass a customer's name or phone number into an event parameter.2 The retention setting only affects explorations and funnel reports; standard reports keep their aggregated numbers either way, and increasing the period applies to data you've already collected.3 Internal traffic filters have Testing, Active and Inactive states, and Google warns that once a filter is applied the effect on the data is permanent.4
The Search Console link needs the Editor role in GA4 and verified ownership in Search Console, and each web data stream can link to only one Search Console property.5 The reports it adds are unpublished by default; find them under Library and publish the collection. Linking Google Ads lets you create Ads conversions from GA4 key events and shows Ads data in Analytics within about 48 hours.6
The key events to mark
GA4 now calls the actions that matter to your business key events. What used to be called a conversion in Analytics is a key event; a "conversion" is the Google Ads version you build from a key event in a linked Ads account.7 For a contractor, three key events cover nearly every lead a website produces.
| Key event | What it means | How it's collected | What it can't tell you |
|---|---|---|---|
Tap to call (for example phone_click) | Someone tapped your number on the site | A Tag Manager trigger on links whose Click URL starts with tel: | Whether they connected, or booked |
Request form submitted (form_submit or generate_lead) | A service request or estimate form was sent | Enhanced measurement, or your form's thank-you page | Whether it was a real job or a sales pitch |
| Online booking confirmed | A customer picked a time and confirmed | Your booking tool's confirmation page or event | Whether the job was completed and paid |
| Quote request (optional) | A replacement or install estimate was asked for | Same as a form, on a separate form | Months of lag before a sale |
Google's own list of recommended lead events includes generate_lead for a submitted form, and later-stage events such as qualify_lead and close_convert_lead for when a lead becomes a paying customer.8 Those later events exist, but sending them means pushing data from your job system into GA4, which most shops don't need. Your job records already hold that answer.
The tap-to-call event usually needs Google Tag Manager. In Tag Manager, a Just Links click trigger set to fire on some clicks, with a condition on Click URL, catches taps on tel: links.9 Attach it to a GA4 event tag, test it in Preview, and publish. Then mark the event as a key event in GA4.
Tag your offline marketing with UTMs
GA4 assigns every visit to a channel using rules built mostly on source, medium and campaign.10 A QR code on a mailer, the website link on your Google Business Profile, and the link in an email all arrive as Direct or Referral unless you tag them. Tag them, and GA4 can sort them.
Google says to always set utm_source, utm_medium and utm_campaign, warns that values are case sensitive (google and Google are two different sources), and recommends a strict lowercase naming convention.11 Some contractor examples:
| Where the link lives | utm_source | utm_medium | utm_campaign |
|---|---|---|---|
| Google Business Profile website link | organic | gbp-main | |
| Fall tune-up postcard QR code | postcard | fall-tuneup-2026 | |
| Truck wrap short URL | truck | offline | wrap-2025-vans |
| Maintenance reminder email | newsletter | maintenance-due-oct |
The medium matters: GA4's Email channel picks up a medium of email, and an unrecognized medium can land in Unassigned. Pick your mediums once, write them on one sheet, and use nothing else.
Four reports to check monthly
Thirty minutes a month is enough. Read these four, in this order, and write one sentence about each. For the search side in more depth, see Google Search Console for contractors.
The monthly GA4 read
- Traffic acquisition by default channel group: is any channel up or down more than you'd expect for the season?
- Landing pages: which service pages bring visitors who then call, send a form or book?
- Key events by session source and medium: which sources produce the three key events, not just visits?
- Search Console queries (once published): which searches show your site, and which pages they land on?
Where GA4 stops: from key event to booked job
This is the handoff that matters, and it happens outside GA4. A form submission is a key event in GA4 and a lead in your office. For the two to stay connected, the lead itself has to carry where it came from. That habit has a name, lead source attribution, and it's the whole game.
That means two things. First, the website form must save the UTM tags and the Google click id (gclid) on the lead record, not just in GA4. When the lead books a job, the job keeps that source, and when the job is invoiced, the revenue rolls up to the campaign. That's also what lets you send booked jobs back to Google Ads later; our guide to offline conversion tracking covers that step. Second, phone leads need tracking numbers. GA4 records a tap; only a tracking number tied to a campaign can say which ad or mailer rang the phone and what the call booked.
Online booking deserves its own note. If customers book through a tool that shows real arrival windows, the booking is the strongest web signal you have, because it's already a job on the schedule. Whether GA4 sees that confirmation depends on your booking tool sending an event or loading a confirmation page your tag can see. The job record sees it regardless. Our online booking feature page explains how windows are offered.
Marketing platforms such as TradesForce work from the job side as well, reading booked jobs and revenue from TradesWork instead of relying on GA4 alone. Whatever runs your marketing, the principle is the same: GA4 for the website, job records for the money.
How to measure it from your jobs
Three numbers tie GA4 to your schedule. Pull them on the first Monday of the month, next to the four reports above.
Metric
Web lead match rate
How many of GA4's lead key events show up as real leads in your office. A big gap means spam forms, double-counted events or leads typed in by hand without a source.
Website leads in your lead inbox ÷ (form_submit + booking key events in GA4) × 100
Where the numbers come from: GA4 key events report for the count; your lead inbox filtered to the website channel for the leads
Metric
Web lead to booked job rate
The share of website leads the office turned into a scheduled job. This is where GA4's numbers become money.
Jobs booked from website leads ÷ website leads × 100
Where the numbers come from: Jobs whose lead source is your website, for the same month
Metric
Completed revenue per website lead
What an average website lead was worth in invoiced work. Use it to compare the site against paid channels.
Completed job revenue from website-sourced jobs ÷ website leads
Where the numbers come from: Revenue by marketing channel for completed jobs; leave the month blank, not zero, if there were no website leads
Worked example: say GA4 shows 52 form submissions and 18 online bookings in October, 70 in total. Your inbox has 61 website leads, a match rate of about 87%, with the difference mostly spam forms. The office booked 44 of the 61, a 72% booking rate, and those jobs produced $31,400 in completed revenue, about $515 per website lead. Those numbers are illustrative, not benchmarks. GA4 alone could only have told you "70 key events."
Footnotes
-
Google Analytics Help, "[GA4] Data thresholds." https://support.google.com/analytics/answer/9383630 ↩
-
Google Analytics Help, "[GA4] Enhanced measurement events." https://support.google.com/analytics/answer/9216061 ↩
-
Google Analytics Help, "[GA4] Data retention." https://support.google.com/analytics/answer/7667196 ↩
-
Google Analytics Help, "[GA4] Filter out internal traffic." https://support.google.com/analytics/answer/10104470 ↩
-
Google Analytics Help, "[GA4] Search Console integration." https://support.google.com/analytics/answer/10737381 ↩
-
Google Analytics Help, "[GA4] Link Google Ads and Analytics." https://support.google.com/analytics/answer/9379420 ↩
-
Google Analytics Help, "[GA4] About key events." https://support.google.com/analytics/answer/13965727 ↩
-
Google Analytics Help, "[GA4] Recommended events," lead generation section. https://support.google.com/analytics/answer/9267735 ↩
-
Google Tag Manager Help, "Click trigger." https://support.google.com/tagmanager/answer/7679320 ↩
-
Google Analytics Help, "[GA4] Default channel group." https://support.google.com/analytics/answer/9756891 ↩
-
Google Analytics Help, "[GA4] Collect campaign data with custom URLs." https://support.google.com/analytics/answer/10917952 ↩