Quick Answer: When a Google Ads offline conversion upload shows "successful" but no conversions appear in your account, the cause is almost always one of six things: errors hidden in upload diagnostics, a secondary conversion action you're not looking at correctly, a timezone or time format mismatch, a conversion name that doesn't match exactly, a conversion date before the action's start date, or GCLIDs past the 90-day window. Work through them in that order and you'll find it.
You captured GCLIDs in your CRM. You built the CSV. You uploaded it. Google said 99% of rows matched successfully. Then you opened your campaigns and found nothing. Two days later, still nothing.
This is one of the most maddening failure modes in offline conversion tracking. The platform is picky and it fails silently. "Successful" means Google accepted your file. It does not mean your conversions will show up where you expect them, or at all.
Worse, Google support often gives you a wrong answer when you ask. So here is the debugging checklist, ordered from most common cause to least.
The Debugging Checklist
Step 1: Read the upload diagnostics, row by row
Go to Goals, then Conversions, then Uploads, and open the history for your upload. Don't trust the summary line. A batch can report "mostly successful" while individual rows were rejected with specific error codes buried in the results file.
Download the results file and look at every rejected row. The error codes tell you exactly what Google didn't like. This is the single fastest path to your answer, and most people skip it because the summary said "successful."
Step 2: Check whether your conversion action is secondary
This one catches a huge number of people. If your offline conversion action is set as secondary, it will never appear in the standard Conversions column. It only shows in the All Conversions column.
Add the All Conversions column to your campaign view, then segment by conversion action. If your uploaded conversions exist anywhere in the account, this view will surface them. If you see them here, nothing is broken. You were just looking at the wrong column.
Step 3: Verify timezone and time format
Your CRM logs conversions in its timezone. Google Ads calculates everything from the click timestamp in its own system, using your account timezone. If those don't line up, a conversion can appear to happen before the click it belongs to, and Google rejects it.
Two things to check in your CSV: the timezone offset in your conversion time field, and whether you're using 24-hour time. A 12-hour timestamp without AM/PM markers will shift half your conversions by twelve hours. This mismatch is also the real cause behind most "this click is too old" errors on clicks that are barely a day old. A quick test: add a day to the timestamps on a few rejected rows and reupload. If they import, you've confirmed a time problem.
Step 4: Match the conversion name exactly
The conversion name in your CSV must match the conversion action name in Google Ads character for character. Extra spaces, different capitalization, or a renamed action will cause silent mismatches. Copy the name directly from the conversion action settings and paste it into your upload file. Don't retype it.
Step 5: Check the action's start date, not its creation date
Google support frequently tells advertisers that conversions dated before the conversion action was created can't be imported. That's not quite right. What matters is the conversion action's start date. You can upload conversions for clicks that happened before the action existed, as long as the conversion date falls after the action's start date.
If you're backdating a batch from your CRM, check the start date on the conversion action first. If your conversion dates fall before it, that's your block.
Step 6: Respect the 90-day GCLID window
GCLIDs expire. Any GCLID older than 90 days at upload time simply won't match, no matter how clean your file is. If you're trying to backfill a quarter of historical data, the oldest rows are already gone, and no formatting fix will bring them back.
One honest note here: data older than 30 days has little effect on smart bidding anyway. The algorithm weights recent signals. If your backfill is mostly old data, tighten your forward-looking setup instead of fighting for the past.
Two Edge Cases Worth Knowing
If you get "this conversion belongs to an account that you don't manage," someone else's Google Ads account generated that GCLID. Anyone can run ads pointing at your domain, including affiliates you don't know about. Those clicks land in your server logs with GCLIDs you can never upload.
And if everything checks out and you still see nothing, wait. Processing can take 3 to 7 days for CSV uploads, even when API pushes from the same CRM show up fast. The API handles matching differently. If your live API connection works and your CSV backfill doesn't, keep the API setup and move on.
The real fix is not needing this checklist twice. Most silent upload failures trace back to a setup that was fragile from day one: no GCLID capture validation, no timezone standard, no test conversion before going live. I put together a free OCT Setup Checklist that walks through building offline conversion tracking correctly from the start, so your uploads match the first time. Grab it here.
FAQ
How long should I wait before assuming my upload failed?
Give CSV uploads 3 days minimum, up to 7. If the diagnostics show accepted rows and a week passes with nothing in the All Conversions column, then start debugging. Before that, patience beats panic.
Should I switch my offline conversion action from secondary to primary?
If you want these conversions to feed smart bidding, yes, primary is required. Secondary actions are observation only. But make the switch deliberately, because primary conversions change what the algorithm optimizes toward.
Can I reupload the same conversions after fixing the errors?
Yes. Google deduplicates on GCLID plus conversion name plus conversion time, so fixed rows import cleanly. If you changed the timestamp to fix a timezone issue, the corrected row is treated as new.
Is the Google Sheets upload method more reliable than CSV?
Same matching engine, same failure modes. Sheets is convenient for recurring uploads because you can maintain one connected sheet, but it won't rescue rows that fail for formatting, naming, or expiry reasons.