conversion_date_time.
Both need a real gclid (or wbraid / gbraid). Neither invents attribution without it.
Are PixelFly hold & fire OK for Google Ads?
Yes — when you do this:
- Store
gclid(and iOSwbraid/gbraidwhen present) at hold. - Set fire path to sGTM /data (not Receivers-only if you need Google Ads tags).
- On Approve & Fire, PixelFly POSTs purchase JSON to
/datawith click IDs onpage_location. - sGTM Data Client + Google Ads Conversion tag fire (Client Name = Data Client).
- Fire within your conversion window and within ~90 days of the click (Google retains GCLIDs ~90 days).
- Do not also fire a browser Purchase for the same COD order (double counting).
Receivers /e correctly replays Meta / GA4 / TikTok via PixelFly destinations.
It does not run your Google Ads conversion tags inside sGTM — use sGTM /data for Ads.
Side-by-side comparison
| Topic | Google Sheet / offline import | PixelFly hold → fire (sGTM) |
|---|---|---|
| What Google product | Conversion action: Import from clicks | Usually a Website (or GA4) conversion + sGTM Ads tag |
| How data is sent | Upload CSV / Sheet / API with gclid + time + value | Approve & Fire → POST /data → Data Client → Ads tag |
| Conversion time | You set conversion_date_time with timezone (yyyy-mm-dd HH:mm:ss±HH:mm). Must be after the click |
Hit arrives at fire time; gclid links to the original click. PixelFly also stores checkout event_time (critical for Meta) |
| Click ID | gclid / wbraid / gbraid column required for click match | Same IDs held at checkout, replayed on page_location + event fields |
| GCLID age limit | Upload more than ~90 days after click → rejected | Fire outside window / ~90 days → usually not attributed |
| Speed | Batch; often ~3 hours to appear | Near real-time on Approve; UI can still lag hours |
| Meta / TikTok | Google Ads only | Same fire can hit Meta, GA4, TikTok tags |
| Deduping | order_id / unique gclid + name + datetime | transaction_id = Woo order id on the Ads tag |
| Common failure | Wrong timezone (“conversion precedes click”), late upload, wrong conversion action | No gclid at hold, fire path = Receivers only, browser Purchase still fires for COD |
Event time explained (simple)
Day 0 Click ad (gclid created)
Day 0 COD order placed → PixelFly HOLD (store gclid + checkout event_time)
Day 3 Order confirmed → PixelFly FIRE
Sheet: you upload conversion_date_time = Day 0 or Day 3 (your choice; must be after click)
sGTM: Google Ads tag runs on Day 3; attribution still ties back via gclid to Day 0 click
Google Ads campaign reports usually credit the click / impression date, not the upload or fire date. To compare with your order list, add All conv. (by conv. time) in Google Ads (conversion reporting help).
event_time for Meta CAPI (correct for delayed events).
Google Ads website tags primarily need a valid gclid on the fired hit; they are not the same as Sheet’s mandatory conversion_date_time column.
Architecture — PixelFly path for Google Ads
Web GTM: purchase + payment_method + email + phone + gclid → sGTM
→ PixelFly COD Protection tag → POST /cod/hold
→ Held Events (pending)
Confirm order
→ Approve & Fire (fire path = sGTM /data)
→ POST {host}/data (gclid on page_location, transaction_id, value, user_data)
→ Data Client → Google Ads Conversion tag
Architecture — Sheet / offline import
Capture gclid at checkout (cookie / CRM / Sheet row)
Confirm COD order
→ Append row: Google Click ID | Conversion Name | Conversion Time | Value | Currency | Order ID
→ Upload to Google Ads (Import from clicks)
→ Google matches gclid → conversion
When to use which
- Prefer PixelFly hold & fire if you already use server GTM, want Meta + Google from one approve, and want near real-time fire from the dashboard or Woo webhook.
- Prefer Sheet / OCI if you have no sGTM Ads tag path, ops already live in Sheets/CRM, or you need an exact confirm timestamp in an Import from clicks action.
- Do not use both for the same COD purchase into the same “primary” conversion unless you intentionally want two actions and understand double counting.
Checklist — Google Ads with PixelFly
- Web GTM forwards plaintext
email,phone,payment_method, andgclidto sGTM (not hashed phone as the phone field). - sGTM COD tag holds COD only; browser Ads Purchase = prepaid only (
payment_method≠cod). - Dashboard fire path = sGTM /data.
- Data Client accepts
/data; Google Ads tag trigger =purchase+ Client = Data Client. - Pass
transaction_id= order id on the Ads tag. - Confirm Held Event raw payload shows
gclidbefore you rely on Ads attribution. - Fire within the conversion window (and < ~90 days from click).
FAQ
Is hold & fire “as good as” Sheet import?
For attribution quality, both depend on gclid and timing windows.
Sheet gives stricter control of conversion_date_time.
PixelFly is better for automation and multi-platform fire.
Neither works without click IDs (or a strong Enhanced Conversions match on an import action).
Why did my held order have no gclid?
The visitor had no Google click cookie / parameter, or Web GTM did not forward gclid to sGTM.
PixelFly stores what the hold receives — fix mapping, then test a new order from a Google Ads click.
Can I use Receivers /e for Google Ads?
No for sGTM Google Ads tags. Use sGTM /data. Receivers are for PixelFly destinations (Meta CAPI, GA4 MP, etc.).