How-To Guide 8 min read

How to Upload Offline Conversions to Google Ads: Step-by-Step Guide

A step-by-step guide to uploading offline conversions to Google Ads — from creating an Import conversion action and enabling auto-tagging to preparing your CSV file and verifying uploads. The Upload Offline Conversions App walks through both manual and automated methods.

Last verified: 2026-11-07

Uploading offline conversions to Google Ads connects the revenue your ads generate — booked jobs, signed contracts, completed sales — to the clicks that produced them. This step-by-step guide from The Upload Offline Conversions App (TUOCA) walks through the entire process, from initial setup to verification.

Prerequisites Checklist

Before uploading offline conversions, confirm you have:

  • Google Ads account with admin or standard access
  • Auto-tagging enabled (Settings → Account settings → Auto-tagging)
  • GCLID capture — Your CRM, call tracking tool, or forms store the GCLID from ad clicks
  • Conversion data — A list of conversions with GCLIDs, dates, and values
  • 6 hours since the click. Wait 6 hours after the click before you upload it: a click at 9:00 a.m. is too recent at noon and is ready at 3:00 p.m., and if you upload sooner the error asks you to try again in 12 hours.

If you don’t have GCLIDs captured, you can use Enhanced Conversions for Leads with hashed PII (email, phone) instead.

Step 1: Create an Import Conversion Action

The conversion action defines what type of offline conversion you’re tracking. It must be type “Import” — other types (Website, App) won’t accept uploaded data.

In Google Ads:

  1. Navigate to Goals → Conversions → Summary
  2. Click + New conversion action
  3. Select Import
  4. Choose CRM, files, or other data sources
  5. Select your conversion type:
    • Track conversions from clicks — if you have GCLIDs
    • Track conversions from leads (Enhanced Conversions for Leads) — if you’re using hashed PII

Configure the action:

SettingRecommended ValueNotes
NameDescriptive (e.g., “Booked Job”)Use different actions for different funnel stages
GoalPurchase/Sale, Lead, or customChoose the most appropriate goal category
Value“Use different values for each conversion”Enables value-based bidding
Default valueYour average conversion valueFallback if value not provided in upload
Count“One”For lead/booking conversions (one per GCLID)
Click-through windowMatch your sales cycle30, 60, or 90 days
Include in “Conversions”Yes (Primary)Required for Smart Bidding
Attribution modelData-drivenGoogle’s recommended default
  1. Click Create and Continue
  2. Note the conversion action name — you’ll need it for your CSV upload

Step 2: Enable Auto-Tagging

Auto-tagging is what appends the GCLID to your ad URLs. Without it, there’s no click identifier to match conversions against.

  1. Go to Settings → Account settings
  2. Under Auto-tagging, check “Tag the URL that people click through from my ad”
  3. Save

Auto-tagging is enabled by default, but verify — especially if someone on your team or a previous agency may have disabled it. Auto-tagging works alongside manual UTM tagging; you don’t need to choose one or the other.

Step 3: Capture and Store GCLIDs

Your system must capture the GCLID at click time and store it alongside the lead record. Common methods:

CallRail, CallTrackingMetrics, and similar tools automatically capture the GCLID from the referring URL when a tracked call occurs. This is the easiest path for businesses where phone calls are the primary lead source.

Hidden Form Fields

For form submissions, add a hidden field that captures the GCLID from the URL:

<input type="hidden" name="gclid" id="gclid" value="">
<script>
  // Capture GCLID from URL on page load
  const params = new URLSearchParams(window.location.search);
  const gclid = params.get('gclid');
  if (gclid) {
    document.getElementById('gclid').value = gclid;
    // Also store in cookie for multi-page visits
    document.cookie = `gclid=${gclid};max-age=7776000;path=/`;
  }
</script>

CRM Native Capture

Some CRMs (HubSpot, Salesforce) can capture the GCLID natively if configured. Check your CRM’s documentation for “GCLID” or “Google Click ID” field settings.

Step 4: Prepare Your Upload File

Google Ads accepts CSV files with a specific format.

CSV Format

Google Click ID,Hashed Email,Order ID,Conversion Name,Conversion Time,Conversion Value,Conversion Currency
EAIaIQobChMI8dml_ePi9gIV...,a8b14f04b2be6c5f...,job-1842,Booked Job,2026-04-10 14:30:00-05:00,4500.00,USD
EAIaIQobChMIxNqP7vTi9gIV...,9c1e77aa01d04424...,job-1843,Booked Job,2026-04-11 09:15:00-05:00,1200.00,USD

The first row is job 1842: a click ID, the hash of the customer’s email, your job number, the name of the conversion action, 2:30 p.m. Central on April 10, and $4,500. The -05:00 is the offset for that clock time. If you leave the offset off and only write America/Chicago on a header line, Google may treat 14:30 as UTC.

Column Definitions

ColumnRequiredFormatNotes
Google Click IDWhen the visit had oneFull click IDIf the URL had a GBRAID or WBRAID, give that its own column. Keep the GCLID column for the GCLID.
Hashed Email / Hashed Phone NumberWhen the lead has oneSHA-256 hexLowercase and trim the email, or format the phone as E.164, then hash. Put the hash on the same row as the click ID.
Order IDRecommendedYour job or invoice IDStops the same job from counting twice
Conversion NameYesTextMust match the conversion action name exactly
Conversion TimeYesyyyy-MM-dd HH:mm:ss±HH:mmThe time the job closed, with an offset, not the upload time
Conversion ValueRecommendedDecimal numberRevenue amount (e.g., 4500.00)
Conversion CurrencyRecommendedISO 4217USD, CAD, GBP, etc.

A visit can leave you with both a GCLID and a GBRAID. Put both on the row, plus the hashed email if you have it. If the only click ID you saved is a GBRAID or WBRAID, open that conversion action and set the count to Every. A count of One can reject the row.

Hash before the address goes in the file. Jane@Example.com becomes jane@example.com, then a 64-character SHA-256 hex string. A phone becomes +15125550100, then the hash. The spreadsheet should contain the hash, not jane@example.com.

Upload the jobs that never touched a Google ad, too, when you have an email or phone to hash. A direct call that becomes a $4,500 replacement can still match a signed-in Google user. A row with no click ID and no hash has nothing for Google to match, so leave that one out.

Common CSV Mistakes

MistakeImpactFix
Wrong date formatUpload rejectedUse yyyy-MM-dd HH:mm:ss-05:00, with the offset on that time
Conversion Name doesn’t match actionConversion not countedCopy the exact name from Google Ads
Timezone only in a headerClock time shiftedPut the offset on each conversion time
Extra whitespace in GCLIDCLICK_NOT_FOUND errorTrim all GCLID values
Empty rowsParsing errorsRemove any blank lines
BOM charactersParsing errorsSave as UTF-8 without BOM

Step 5: Upload via Google Ads UI

  1. Go to Goals → Conversions → Uploads
  2. Click the + upload button (blue plus icon)
  3. Click Choose file and select your CSV
  4. Google will preview the data — review for errors
  5. Click Apply
  6. Monitor the upload status — it will show “Processing” then “Done”

Reading the Upload Report

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. The upload report shows per-record status:

StatusMeaning
SuccessfulConversion matched and recorded
CLICK_NOT_FOUNDGCLID not recognized (see troubleshooting)
EXPIRED_GCLIDGoogle 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
INVALID_CONVERSION_ACTIONConversion action not found or wrong type
UNPARSEABLE_GCLIDGCLID format is malformed
DUPLICATEAlready uploaded (order_id match)

A small number of CLICK_NOT_FOUND errors is normal, especially with Enhanced Conversions for Leads (which upload all conversions, including non-Google traffic).

Step 6: Verify in Reports

After processing, verify the conversions appear in your reports:

  1. Go to Campaigns (or Ad Groups, Keywords)
  2. Set the date range to include the click dates of the uploaded conversions (not today’s date — see click date vs. conversion date)
  3. Check the Conversions column — you should see the uploaded values
  4. Check the Conv. value column — revenue amounts should appear
  5. If conversions appear in “All conversions” but not “Conversions,” the action is set to Secondary

Alternative: Automate with TUOCA

Manual CSV uploads work for testing and one-time backfills, but they don’t scale. At 20 clients × 4 platforms × weekly uploads = 80 manual uploads per cycle.

TUOCA’s Automated Relays eliminate this entirely:

  1. Connect your source — CallRail, CallTrackingMetrics, ServiceTitan, Jobber, or webhooks
  2. Connect your destination — Google Ads (OAuth authentication)
  3. Map your conversion action — Select which action to upload to
  4. Set filters — Only upload qualified leads, minimum value thresholds, etc.
  5. Set schedule — Hourly, daily, or weekly
  6. Activate — TUOCA handles fetching, transforming, deduplicating, uploading, and logging

For revenue attribution, Fusion Relays combine call tracking data (GCLID) with CRM revenue data (dollar amount) automatically.

TUOCA’s Free tier includes Manual Uploads with a guided wizard that validates your data before upload, catching formatting errors before they reach the Google Ads API.

Upload Schedule Recommendations

Business TypeRecommended FrequencyRationale
Emergency services (plumbing, locksmith)DailyFast conversion cycle, fresh data for Smart Bidding
Home services (HVAC, electrical)Daily1-7 day conversion lag, daily uploads keep data current
Legal, dental2-3x per weekModerate lag, frequent enough for the 90-day window
B2B, enterpriseWeeklyLonger sales cycles, but don’t let GCLIDs expire
Agencies (multi-client)Daily (automated)Multiple clients × platforms = manual uploads are impossible

Next Steps After Your First Upload

  1. Verify data — Check reports on the click dates for uploaded conversions
  2. Monitor errors — Review the upload report for CLICK_NOT_FOUND and other errors
  3. Set up regular uploads — Manual weekly, or automated via TUOCA
  4. Judge Smart Bidding on enough conversions — 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.
  5. Switch to value-based bidding — Once enough data accumulates, switch to Target ROAS or Maximize Conversion Value
  6. Add Fusion Relays — Combine call tracking + CRM for revenue-attributed conversions

Frequently Asked Questions

One row is one job. The columns you need are Google Click ID, Conversion Name, Conversion Time, Conversion Value, and Conversion Currency. Add Hashed Email or Hashed Phone Number, and your invoice or job number, on that same row when you have them. Write the time with its offset, for example 2026-04-10 14:30:00-05:00 for 2:30 p.m. in Chicago. If you only name the timezone on a header line, Google can read the clock time as UTC and shift the job by several hours.

Yes, if you can hash the email or phone from that lead. Someone who clicked on their phone and booked from a desktop often has no usable GCLID on the job record. The hash is what Google can still match. When the landing page did store a GCLID, leave it on the row next to the hash. A $4,500 job with only a hash can match. The same job with the click ID and the hash matches more reliably.

As frequently as possible — ideally daily for most businesses. More frequent uploads give Smart Bidding fresher data to learn from. 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. Meta rejects a Conversions API request when the event happened more than 7 days before you send it, so a booking from Monday has to be uploaded by the next Monday, unless it is a physical-store sale, which Meta asks you to send within 62 days. TUOCA supports hourly, daily, and weekly automated upload schedules.

Create a conversion action with: Type = 'Import', Source = 'CRM, files, or other data sources'. Set the value to 'Use different values for each conversion' if you're uploading revenue data. Set Count to 'One' for lead-based conversions (each GCLID counts once) or 'Every' for transaction-based conversions. Set the click-through window to match your typical sales cycle (30, 60, or 90 days).

Yes. Create a test conversion action marked as 'Secondary' (not included in the 'Conversions' column or Smart Bidding). Upload a small batch to this action, verify the data appears correctly, then switch to your Primary conversion action for production uploads. Alternatively, TUOCA's dry-run mode lets you simulate uploads without actually sending data to Google.

Stop Guessing. Start Proving ROI.

TUOCA connects your CRM and call tracking data directly to your ad platforms. Set up in minutes.