CONNECTIONS / Snowflake / Snowflake to Google OCI
Snowflake's reconciled GCLID table, uploaded to Google as OCI.
A GCLID is only useful if something keeps it attached to the deal it started. Signals reads the table your warehouse team already reconciles click IDs against closed revenue in, and uploads the matching conversion the moment that row lands.
- ● snowflake → google.oci :: live
- > sync table GCLID_RECONCILED rows=15,840
- hash sha256(email,phone) gclid=carried
- route google.oci upload batch=nightly
- ✓ delivered · click conversion recorded
WHAT THIS ENABLES
Snowflake to Google Offline Conversion Import
Snowflake to Google Offline Conversion Import reads a warehouse table where GCLID capture has already been reconciled against closed revenue, then uploads the click-based conversion to Google Ads so Smart Bidding sees deals that closed away from the browser.
- Closed revenue in Snowflake attributed back to the exact click that opened the deal.
- Smart Bidding trained on outcomes your warehouse already reconciles, not a spreadsheet export.
- A scheduled upload standing in for whatever manual OCI process existed before it.
The click, the conversion, and the credit.
The conversion happens off Google, away from any pixel. Here is how Snowflake closes the loop.
Built for the teams that own the number.
Data teams tired of exporting a reconciled table to format an OCI upload by hand.
From kickoff to verified events.
-
Connect
A read-only Snowflake role scoped to the table holding the reconciled GCLID and revenue columns.
-
Map
The GCLID column and the field marking a closed deal agreed in the visual mapper.
-
Deliver
Google Ads API upload on the reconciliation table's own refresh schedule, with an accepted count returned for every batch.
What changes when the CSV goes away.
| Capability | Manual CSV upload | Datahash |
|---|---|---|
| Reporting | Offline sales sit in a separate export, reconciled by hand. | Revenue counted in the same OCI reporting as web conversions. |
| Deduplication | A re-uploaded file risks counting the same conversion twice. | Deduped delivery, so a resent record never counts as a second conversion. |
| Match visibility | Match quality is a guess until the numbers look off. | Match rate reported per upload, tied to the source event set that produced it. |
| Effort and latency | An analyst exports and uploads on a manual cadence. | Server-side and automatic the moment Snowflake records the event. |
What OCI actually receives.
- ● signals :: event payload
- > POST /offline_conversion_import source=snowflake.GCLID_RECONCILED
- gclid "Cj0KCQjw…" · conversion_action "closed_won"
- conversion_date_time "2026-07-06T11:20:00"
- conversion_value 31200 · currency_code AED
- ✓ accepted · batch=nightly
Adjacent moves on the same stack.
from Snowflake
Snowflake to Google Store Sales
Snowflake to Google Store Sales reads in-store transactions directly from your Snowflake…
Learn morefrom Snowflake
Snowflake to Meta Offline CAPI
Snowflake to Meta Offline CAPI points Signals at the Snowflake table where your offline…
Learn moresame use case
ActiveCampaign to Google OCI
ActiveCampaign to Google Offline Conversions: Signals reads your ActiveCampaign contacts…
Learn moregeneric
Google Offline Conversion Import
Datahash automates GCLID-based OCI uploads to Google Ads so click-based offline conversions…
Learn moreAsked on almost every call.
Is a Snowflake row missing a GCLID recoverable for OCI?
Not through OCI itself, since that upload keys strictly off the click ID and has no fallback identifier to lean on. Because the join between clicks and revenue lives in your own warehouse job, the fix is tightening whatever step populates GCLID before the read runs, and pairing OCI with Enhanced Conversions for Leads on the same table catches the rows that still arrive without one.
How long after the reconciliation job runs does the conversion appear in Google Ads?
Uploads run on whatever schedule the reconciled table refreshes, commonly nightly, and Google generally processes an OCI batch within a few hours of receiving it. A row written to Snowflake tonight is usually visible in Google Ads reporting by the next business day.
Does Datahash run the reconciliation logic that joins GCLID to closed revenue?
No. That join is assumed to already exist as a table or dbt model in your warehouse, and Signals reads its output rather than building the reconciliation itself. If no such table exists yet, we help scope what it needs to contain before the read role is granted.
NEXT STEP