How to Track Offline Conversions in Google Ads: Step-by-Step Guide
A detailed, step-by-step guide to implementing offline conversion tracking in Google Ads — covering auto-tagging, GCLID capture, conversion action setup, and automated uploads with The Upload Offline Conversions App.
This guide walks you through implementing offline conversion tracking specifically for Google Ads, from initial setup to ongoing automation. Every step is actionable and includes verification checks.
Overview
Google Ads offline conversion tracking has three phases:
Phase 1: Setup (one-time)
→ Enable auto-tagging → Capture GCLIDs → Create conversion action
Phase 2: Upload (ongoing)
→ Export conversion data → Format for Google → Upload via CSV or API
Phase 3: Optimize (continuous)
→ Monitor match rates → Enable VBB → Refine bidding strategies
Phase 1: Setup
1.1 Verify Auto-Tagging
Auto-tagging appends the GCLID to your ad URLs. Check if it’s enabled:
- Google Ads → Admin → Account settings
- Look for Auto-tagging
- Verify it’s enabled (checked)
- If disabled, enable it and Save
Verification: Click one of your ads in the search results. The landing page URL should contain ?gclid= or &gclid=.
1.2 Set Up GCLID Capture
Choose the method that matches your lead generation model:
Phone Calls (CallRail / CTM)
If you use CallRail or CallTrackingMetrics:
- ✅ GCLIDs are captured automatically from the referring URL
- ✅ No website changes needed
- ✅ Verify in CallRail → Activity → click a call → “Google Click ID” field
Website Forms
Add a hidden field to every form on your website:
<!-- Add inside your <form> tag -->
<input type="hidden" name="gclid" id="gclid_field" value="">
// Add before the closing </body> tag
<script>
(function() {
var params = new URLSearchParams(window.location.search);
var gclid = params.get('gclid');
if (gclid) {
// Store in hidden fields
var fields = document.querySelectorAll('input[name="gclid"]');
fields.forEach(function(f) { f.value = gclid; });
// Store in cookie for multi-page sessions
document.cookie = 'gclid=' + gclid + ';max-age=7776000;path=/;SameSite=Lax';
} else {
// Check cookie
var match = document.cookie.match(/gclid=([^;]+)/);
if (match) {
var fields = document.querySelectorAll('input[name="gclid"]');
fields.forEach(function(f) { f.value = match[1]; });
}
}
})();
</script>
Verification: Submit a test form after clicking a test ad. Check that the GCLID appears in your form submission data. Use the Click ID Tester for real-time verification.
1.3 Create an Import Conversion Action
- Google Ads → Goals → Conversions → Summary → + New conversion action
- Select Import
- Choose CRM, files, or other data sources
- Select Track conversions from clicks (or “from leads” for ECL)
Configure:
| Setting | Value |
|---|---|
| Name | Booked Job (or your conversion name) |
| Goal | Purchase/Sale |
| Value | “Use different values for each conversion” |
| Default value | Your average job value |
| Count | “One” |
| Click-through window | 30 days (or match your sales cycle) |
| Attribution model | Data-driven |
| Include in Conversions | Primary |
- Click Create and continue
- Copy the exact name — you’ll need it for uploads
1.4 Turn on enhanced conversions
In Goals → Conversions → Settings, turn enhanced conversions on and accept the customer data terms. You do this once. The screen has one switch, not a second menu where you pick “for leads.”
When you upload a booked job, put the GCLID and a hashed email or phone on that same row. A walk-through with a filled-in example is on enhanced conversions for leads.
Phase 2: Upload
2.1 Manual Upload (First Test)
Prepare a test CSV with 2-3 conversions:
Google Click ID,Conversion Name,Conversion Time,Conversion Value,Conversion Currency
EAIaIQobChMI...,Booked Job,2026-04-10 14:30:00-05:00,4500.00,USD
CjwKCAjw...,Booked Job,2026-04-11 09:15:00-05:00,1200.00,USD
Upload steps:
- Goals → Conversions → Uploads
- Click + (upload button)
- Select your CSV file
- Review the preview (check for yellow/red warnings)
- Click Apply
2.2 Wait for Processing
After a successful upload, imported conversions usually show in reports in about 3 hours. Processing is typically under 12 hours, and a row keyed by a GBRAID or WBRAID can take up to 72 hours. After processing:
- Check the upload report: Uploads → your upload → View details
- Review the status of each row
- Common results:
- Successful — Conversion matched and recorded
- Click not found — GCLID not recognized (data issue)
- Expired — Google keeps a GCLID for 90 days after the click, so a job closed on day 75 can still be uploaded and the same job closed on day 91 cannot.
2.3 Verify in Reports
- Go to Campaigns view
- Set the date range to the click dates of your uploaded conversions
- Add columns: Conversions, Conv. value, All conv.
- Verify conversions and values appear
Important: Conversions appear on the click date, not the upload date. If the click was April 1 and you uploaded on April 10, the conversion shows on April 1.
2.4 Automate with TUOCA
After verifying the manual process works:
- Connect your data source in TUOCA (CallRail, CRM, webhook)
- Connect Google Ads via OAuth
- Select the conversion action you created
- Map fields — click ID, timestamp, value
- Set the schedule — daily for most businesses
- Activate — TUOCA handles all subsequent uploads
Phase 3: Optimize
3.1 Monitor Regularly
Check weekly:
- Failed rows — Read the upload report and fix the rows that failed for a reason you can correct, such as a cut-off GCLID or a conversion time before the click. A click-not-found on a lead that never clicked a Google ad is expected. There is no published success-rate target.
- Conversion volume — Is the upload count reasonable given your lead volume?
- Diagnostics card — Google does not publish a match-rate target. If the card is low, check that you lowercased the email and formatted the phone as E.164 before hashing.
- Conversion lag — Use the Conversion Lag Calculator
3.2 Transition to Value-Based Bidding
Google’s Smart Bidding help says you can turn it on with no conversion history, and that you should judge results over a period with at least 30 conversions, such as a month, and over 50 conversions before you judge Target ROAS. Once you are judging a period that has those conversions:
- Switch your bidding strategy to Maximize Conversion Value
- Run for 2-4 weeks to establish a ROAS baseline
- Add a Target ROAS constraint (set 10-20% below observed ROAS)
- Monitor and adjust
See What Is Value-Based Bidding? for detailed guidance.
3.3 Add Multi-Stage Tracking
For more sophisticated optimization, upload multiple funnel stages:
"Qualified Lead" (Secondary, $0 value) — Day 3
"Proposal Sent" (Secondary, estimated value) — Day 10
"Booked Job" (Primary, actual revenue) — Day 14
"Job Completed" (Primary, final invoice) — Day 28
Troubleshooting
| Problem | Likely Cause | Solution |
|---|---|---|
| No conversions appearing | Looking at upload date, not click date | Check click date range |
| CLICK_NOT_FOUND errors | GCLID corrupted or from different account | Verify GCLID capture |
| Conversions in “All conv.” not “Conversions” | Action set to Secondary | Change to Primary |
| Low match rates (ECL) | PII not normalized before hashing | Fix normalization |
| Smart Bidding not changing | Not enough conversions yet to judge the result | Google’s Smart Bidding help says you can turn it on with no conversion history, and that you should judge results over a period with at least 30 conversions, such as a month, and over 50 conversions before you judge Target ROAS. |
For error-specific guidance, see the Error Reference.