Conversion tracking with Google Tag Manager
If you run paid ads, this is how your online estimator tells Google Ads and Meta that a quote turned into a lead — so your campaigns can optimize toward that outcome, not clicks alone.
What your online estimator broadcasts
Section titled “What your online estimator broadcasts”As a homeowner moves through the core quote flow of your online estimator, it broadcasts a series of browser events, each carrying a small amount of detail about the step that triggered it:
treequote:address_selected— an address was chosentreequote:tree_pinned— a tree was dropped on the maptreequote:quote_revealed— prices were showntreequote:cta_clicked— the homeowner clicked a button on the revealtreequote:lead_submitted— the homeowner submitted their contact details
These happen in the visitor’s browser; nothing about them is sent anywhere on its own. A tag manager container you add is what listens for them and turns them into the tags your ad platforms read.
The one that matters for conversion tracking is treequote:lead_submitted. It carries the homeowner’s contact details and, when you have value sending turned on, an estimated dollar value for the lead.
If you offer the Virtual Estimate walkthrough
Section titled “If you offer the Virtual Estimate walkthrough”Three more events fire around the guided photo walkthrough some homeowners are offered after the price reveal:
treequote:virtual_estimate_started— the homeowner entered the walkthroughtreequote:virtual_estimate_media_uploaded— a photo or video finished uploadingtreequote:virtual_estimate_completed— the homeowner reached the end of the walkthrough
These are engagement events, not conversion events — unlike treequote:lead_submitted, none of them carry a dollar value. The conversion already fired when the homeowner submitted their contact details; these three let you see how many homeowners who got a price went on to share photos, and where they dropped off. Don’t configure any of them as a paid-media conversion action — doing so would report the same lead as two conversions instead of one.
Adding a tag manager container
Section titled “Adding a tag manager container”You add your Google Tag Manager container under Settings → Integrations, in the same place as your webhook addresses. Inside that container, you build a small listener that catches the events above and pushes them into the container’s data layer — from there, standard Google Ads and Meta tags can read them and fire.
This isn’t a drag-and-drop toggle — it’s a real container build, closer to what a marketing person or a developer sets up once per contractor than something you configure from a settings screen. If that’s not you, this is worth handing to whoever manages your ad accounts.
The value that rides along
Section titled “The value that rides along”When Send conversion value to ad platforms is turned on (Settings → Integrations, on by default) and you set an assumed close rate, treequote:lead_submitted also carries these fields:
| Field | What it holds |
|---|---|
currency |
Always USD |
quoteMidValue |
The midpoint of the Complete-tier price — the raw quoted value |
quoteLowValue / quoteHighValue |
That same tier’s low and high range |
quoteMidByTier |
The midpoint for all three tiers, in case you’d rather key value off a different one |
closeRatePct |
Your configured close rate, along for reference |
conversionValue |
The quoted midpoint times your close rate — this is the field to send as the conversion value |
That’s what lets Google Ads and Meta optimize for revenue instead of treating every lead as equal.
This value is always an estimate — quoted price times an assumed close rate — never a report of what a job actually sold for. Turning value sending off doesn’t stop leads from being tracked — it only stops these fields from riding along. They don’t appear as zeros; they’re absent entirely, since a platform that receives a zero-value conversion treats it as real and reports it as working tracking, which is worse than no value at all.
Where the full reference lives
Section titled “Where the full reference lives”Which trigger fires which tag, how the container itself should be wired, and every field on every event beyond the ones above are more than belongs in this article. If you’re building or troubleshooting a container, ask support for the current setup reference to work from directly.
What to watch out for
Section titled “What to watch out for”Cookie consent gates all of this. If your estimator has the cookie consent banner turned on (Settings → Legal), none of your tracking scripts load — and none of these events can reach them — until the homeowner accepts. A homeowner who declines, or who hasn’t yet answered, never gets tracked for that visit. If your reported conversions look lower than the leads you’re actually receiving, check whether consent mode is on before assuming your container is broken.
This is browser-side tracking only. Nothing here — or anywhere else in the product — reports a job’s actual sale price, or a lead’s outcome, back to Google or Meta after the fact. Marking a lead Won and entering what it actually sold for is for your own records; it never gets sent to your ad accounts. If you want your ad platforms to reflect what a job actually sold for rather than an estimated lead value, that is something you would need to arrange separately — nothing described in this wiki does it.
A settings change doesn’t apply to an already-open page. Your container reads its settings once, when the page loads. If you change the close rate or toggle value sending, a homeowner already partway through the flow in another tab is still using the old settings for that visit.