Conversion actions (proposed, held)
You want to measure Site survey booked and Contract signed, so I propose one action for each. Lead and Proposal sent are not measured, per your note.
| Stage | Name | Per month (your 3 month average) | Action name | Source | Setting |
|---|---|---|---|---|---|
| S2 | Site survey booked | 95 | Site survey booked | Import from clicks | Secondary for the first 2 to 3 weeks |
| S4 | Contract signed | 22 | Contract signed | Import from clicks | Secondary for the first 2 to 3 weeks |
Match keys
| Key | Collected | Platform facts |
|---|---|---|
| yes (form field) | personal data, required (email or phone) | |
| Phone | yes (form field) | personal data, required (email or phone) |
| GCLID | yes (hidden field, stored on the HubSpot contact) | required |
| Session attributes | not stated | strongly recommended: gap |
| IP address | not stated | strongly recommended: gap |
| Braids | not stated | strongly recommended: gap |
The three strongly recommended keys are not in your input. They are gaps to ask about, not things I assume are missing from your site.
Normalization check
Done by script on your made-up values. Hashing with SHA-256 happens in the tag or upload tool, not by hand, so no hashes are shown.
| Before | After | What changed |
|---|---|---|
| " Jane.Doe@Gmail.com " | janedoe@gmail.com | trimmed, lowercased, dots removed before @ (gmail.com) |
| "Sam.Lee@BrookMail.example" | sam.lee@brookmail.example | trimmed, lowercased; dots kept (not gmail.com) |
| "(512) 555-0187" | +15125550187 | E.164; +1 assumed because your sample has no country code (question 2) |
| "+1 737 555 0123" | +17375550123 | E.164, spaces removed |
Upload route
Your agency plans a nightly script through the Google Ads API. Platform facts say that from June 15, 2026, offline conversion and leads uploads moved to the Data Manager API, and the Google Ads API stopped taking them. That date has passed, so this plan would not work as written. Ask the agency to build on the Data Manager API, or use another route Google supports for your setup. A HubSpot connection is one option you could ask about; how it works is not covered in my saved sources.
Nightly uploads meet the daily cadence in Platform facts. Upload every Site survey booked and Contract signed, including leads that did not come from Google Ads.
Readiness checklist
| Item | Status |
|---|---|
| Customer Data Terms accepted | Unknown |
| Auto-tagging on | Yes |
| User-provided data collection on in the Google tag | Unknown |
| GCLID stored with each lead | Yes |
| Form in an iframe (postMessage needed) | No, native form |
| Conversion actions created per stage | No, proposed above |
| Upload route allowed today | No, see Upload route |
| Upload cadence daily | Yes, nightly is planned |
| All conversions uploaded, including non-Google Ads leads | Unknown |
Customer Data Terms are accepted when you turn on enhanced conversions for leads in Goals, Conversions, Settings. After setup, check the Diagnostics tab under Goals, Conversions, Summary.
Counts
| Item | Count |
|---|---|
| Conversion actions proposed | 2 |
| Match key gaps | 3 |
| Unknown checklist items | 3 |
| Sample values normalized | 4 |
Questions for you
- Is user-provided data collection turned on in your Google tag in Tag Manager?
- Are all your leads US numbers, so +1 is the right country code?
- Will the agency switch the upload to the Data Manager API, or do you want to look at another route?
- Has anyone accepted the Customer Data Terms in Google Ads?
- Do you want to send session attributes or IP address with uploads? Both are strongly recommended.
Needs your decision
- Create the two conversion actions as Secondary: HELD.
- Turn on enhanced conversions for leads (this accepts the Customer Data Terms): HELD.
- Start any upload: HELD until the route is fixed.
