# Upload Offline Conversions to Google Ads, Step by Step

_How to upload offline conversions to Google Ads in 2026: the DIY Google Sheets route, the June 15 API-to-Data-Manager change, and why to upload profit._

Canonical: https://jamesdnichols.com/guides/upload-offline-conversions-google-ads/ · by James Nichols · published 2026-07-18

Uploading offline conversions sends Google the sale it never saw: the order
that closes after the click, the value that lands days later. **The DIY route
is a scheduled Google Sheet keyed to the Google Click ID (GCLID), and it still
works in 2026 — only the Google Ads *API* upload path was cut off on June 15.**
The lever most stores miss is the number in that sheet. Upload profit, not
revenue, and bidding optimizes for margin.

## What offline conversions are, and why upload them

Smart Bidding learns from the conversions it can see. For a store that only
fires a purchase tag on-site, that means revenue at checkout: it never sees
the refund three weeks later, the shipping that ate the margin, or the fact
that "it does not know your COGS." Offline conversion import is how you send
the real outcome back to Google after the fact, so the algorithm bids on what
happened, not on what the pixel guessed.

The mechanic is a match. You captured a GCLID when the visitor clicked; you
attach that GCLID to the order; later you send Google a row that says "this
click became this conversion, worth this much, at this time." Google credits
the click and Smart Bidding folds the value into its model.

## How to upload offline conversions, step by step

This is the no-new-tool route: a Google Sheet and the Google Ads interface,
nothing bought. One r/PPC operator's line on this whole topic was that
"there isn't much information on this anywhere," so here is the whole loop.

- [ ] In Google Ads, create an offline conversion action: Goals → Conversions
      → New → Import → then the manual Google Sheets or file route.
- [ ] Capture the GCLID on every order. Google appends it to your landing-page
      URL; store it in a hidden checkout field and save it on the order record.
- [ ] Build a sheet with the columns below, one row per order.
- [ ] Set the conversion value to profit, not revenue (the formula is under
      "Where your numbers live").
- [ ] Upload it, or schedule the sheet to upload daily.
- [ ] Confirm it landed: Google Ads → Goals → Conversions → Uploads shows the
      row count and any errors.

The sheet is the copyable artifact. These are the columns Google expects:

:::example{caption="The offline-conversion upload sheet"}
| Column | What goes in it |
|---|---|
| Google Click ID | The `gclid` you captured at checkout |
| Conversion Name | The exact name of your offline conversion action |
| Conversion Time | When the order closed, in your account time zone |
| Conversion Value | The order's **profit**, not its revenue |
| Conversion Currency | USD |
:::

## What changed on June 15, 2026

The headline scared a lot of people into thinking offline conversions were
going away. They are not. What changed is one specific pipe: the Google Ads
**API** stopped accepting new advertisers for its `UploadClickConversions`
request, and that work is migrating to the Data Manager API. If you upload
through the interface, none of this touches you. Here is the whole decision in
one table.

:::example{caption="Which route you're on, and what June 15 did to it"}
| Upload route | Cut off June 15? | What to do |
|---|---|---|
| Google Sheet / CSV (Google Ads UI) | No | Keep using it. It is the route in this guide. |
| Google Ads API (your script or a connector) | New setups only | Importing before the cutoff kept you allowlisted to migrate; new starts get a "not allowlisted" error. Move to the Data Manager API. |
| Data Manager | No; it is the destination | Google's go-forward hub. Pair the GCLID with first-party data; GCLID-only is now the legacy path. |
:::

So the DIY sheet above is the durable route: it did not change, and it is the
one you control end to end.

## Where your numbers live

The GCLID and the timestamp are plumbing. The value is the decision. Don't
send revenue — send what the order was actually worth to you:

:::sources
- GCLID | Appended to your landing URL as `?gclid=…`; capture it to a hidden field and save it on the order
- Conversion time | Your order record's paid/fulfilled timestamp, in the account time zone
- Order revenue | Your store's order export
- COGS, shipping, fees, refunds | Product cost, the carrier invoice (not the rate you charged), your processor statement, your refund rate
:::

The conversion value you upload is one line of arithmetic:
**contribution margin = revenue − COGS − shipping − payment fees − expected
refunds.** That per-order margin is what belongs in the Conversion Value
column. If you're not sure the margin number is right, derive it first: your
[break-even ROAS](/guides/break-even-roas/) is built from the same ratio, and
the calculator there shows you the figure to feed Google. Pulling these four
cost lines cleanly is where most stores stall, and that difficulty is the
finding, not a failure — it is exactly what the scan does for you.

## Upload profit, not revenue

Here is the turn most tutorials never take. Everything above works whether you
upload revenue or margin. If you upload revenue, you have taught Google to buy
more revenue, and it will, including the orders that lose you money on
shipping and fees. You are uploading revenue. Upload profit instead: feed
Smart Bidding the contribution margin per order and it starts optimizing for
the money you keep, not the money that passes through.

That is a bigger build than one sheet, and it is the real system under this
whole page. If you want the short version of whether it is worth it for your
account, the clean test is the first thing I run: <a href="/#offers" data-cta="guide_cta" data-cta-detail="pivot">see how the scan works</a>.

## Quick answers

**Can I still upload offline conversions with a Google Sheet in 2026?**

Yes. The June 15, 2026 change blocked new adopters of the Google Ads API upload request; it did not touch the manual or scheduled Google Sheets and CSV uploads in the Google Ads interface. If you upload through the UI, nothing changed for you.

**What changed with Google Ads offline conversion import on June 15, 2026?**

The Google Ads API stopped accepting new advertisers for the UploadClickConversions request; accounts that were actively importing in the months before the cutoff keep access to migrate, and everything moves to the Data Manager API. Uploads through the Google Ads UI were not affected.

**Do I need a GCLID or an order ID to upload offline conversions?**

You match each conversion to a click with the Google Click ID (GCLID) you captured at checkout, or with first-party data through enhanced conversions. GCLID still works and Google still recommends sending it, but GCLID-only (no first-party data alongside it) is now treated as the legacy path. To change a value already uploaded, you restate it against the same order ID.

**Should I upload revenue or profit as the conversion value?**

Upload profit: revenue minus COGS, shipping, fees, and expected refunds, if you want bidding to chase margin. Google bids on the number you feed it. Feed it revenue and it will happily buy more high-revenue, low-margin orders; feed it contribution margin and it optimizes for the money you actually keep.

## Where these numbers come from

I ran a daily gross-profit conversion upload — Report Pundit export → Google Sheet → Google Ads — on my own store in 2025. Operator experience, past tense: the same pipeline this guide describes, run on real orders.

The margin-blindness is arithmetic, not a claim: in that catalog, the lead product was 90% of revenue but only 75% of gross profit, so the values Smart Bidding saw overvalued it about 3x relative to its real contribution. Stated as fact; no lift number is claimed.

Platform mechanics (the June 15, 2026 API cutoff, the Data Manager migration, GCLID-plus-first-party guidance) read from the Google Ads Developer Blog and Google Ads Help on 2026-07-18. Re-check against Google's current docs at publish — deadlines move.

Run it or hand it off. Everything above is the method, free. Prefer it done for you? The scan is read-only keys in, a dollar figure on every leak out, in a week: https://jamesdnichols.com/#offers. Or score your margin visibility first: https://jamesdnichols.com/assessment/.
