CLICK_NOT_FOUND
Common Causes
| # | Cause | Likelihood | Details |
|---|---|---|---|
| 1 | Non-Google traffic | Very Common | The click ID on this row is not a Google ad click Google can find. A common case is a GCLID cut off by a short CRM field, or a click ID from a different account. If the lead has an email or phone, hash it and upload the job anyway. A row with a bad click ID and a good hash can still match on the hash. CLICK_NOT_FOUND is telling you the click ID failed. It is not telling you to delete the job. |
| 2 | GCLID expired (90-day limit) | Common | 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. A hashed email or phone matches for 63 days after the click, and from day 64 through day 90 only the GCLID still matches. |
| 3 | Click too recent (processing lag) | Common | 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. |
| 4 | Incorrect PII normalization | Moderate | For Enhanced Conversions: email must be lowercase + trimmed + SHA-256 hashed. Phone must be E.164 format + SHA-256. If the normalization differs from what Google captured at click time, no match. |
| 5 | Account/ownership mismatch | Less Common | The conversion action must be owned by (or shared with) the account where the click occurred. MCC cross-account tracking must be enabled. |
What It Means (Plain English)
Google couldn’t match the conversion you uploaded to any known ad click. The GCLID, GBRAID/WBRAID, or hashed user identifiers you provided don’t correspond to a recorded Google Ads click in the account.
This is one of the most common errors in offline conversion tracking — and importantly, it’s not always a problem. Understanding your error rate is key.
How to Fix It
Step 1: Check Your Error Rate
If less than 20% of your uploads get this error, it’s likely normal non-Google traffic. This is especially true if you’re using Enhanced Conversions for Leads, which uploads all conversions regardless of source.
Healthy ranges:
- < 10% — Excellent. Nearly all conversions are from Google traffic.
- 10-30% — Normal for businesses with mixed traffic sources.
- > 50% — Investigate further. Something may be misconfigured.
Step 2: Verify GCLID Age
Conversions must be uploaded within 90 days of the original click. Check your data pipeline for records with GCLIDs older than 90 days — these should be filtered out before upload.
# Check GCLID age before uploading
click_date = parse_gclid_date(gclid)
if (today - click_date) > 90 days:
skip_record("GCLID expired")
Step 3: Add a Processing Delay
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.
A relay can still run every hour. It should hold any click that is not yet 6 hours old.
Step 4: Audit PII Hashing
If using Enhanced Conversions, verify your hashing matches Google’s expectations:
- Email: lowercase → trim whitespace → SHA-256 hash
- Phone: convert to E.164 format (e.g.,
+15551234567) → SHA-256 hash - Name: lowercase → trim → SHA-256 hash (first and last separately)
Use the TUOCA SHA-256 Hasher to verify your hashing output matches Google’s expected format.
Step 5: Read the per-record result
Open the upload result and read the row that failed. It will name the click ID Google could not find. If your script is new, it should be calling the Data Manager API. Looking for a debug flag on UploadClickConversions will not help. That request is the old upload, and a token that was not already using it is rejected.
How TUOCA Prevents This
The Upload Offline Conversions App has built-in safeguards against CLICK_NOT_FOUND:
- Automatic 6-hour processing delay buffer on scheduled relays — conversions are held until Google’s systems have time to register the click
- Built-in PII normalization — automatic lowercasing, E.164 formatting, and SHA-256 hashing before upload
- GCLID age validation — expired GCLIDs are flagged in the activity log and excluded from upload
- Error rate monitoring — the dashboard shows your CLICK_NOT_FOUND rate so you can distinguish normal traffic mix from actual problems