Metric Discrepancies & Attribution

Offline Conversion Imports: Teaching Google and Meta What Money Looks Like

By Chinmay Raibagkar·September 6, 2026·10 min read·Some SQL

The 60-second version

The pixel sees the lead; the CRM sees the money ninety days later. What to send back, how matching works, and the mistakes that make imports harmful.

  • What happened, in one line
  • What to do about it this week
  • What you can safely ignore

Your pixel fires the instant a lead form is submitted. Your CRM knows, ninety days later, which of those leads actually paid. Between those two moments sits the most expensive attribution gap in lead-gen, high-ticket e-commerce, and COD-heavy D2C: the ad platform optimised its bidding on the promise, and never learned about the outcome.

Offline conversion imports close that loop. You send the real outcome — qualified, closed-won, refunded — back into Google and Meta, matched to the original click. Bidding stops chasing form-fills and starts chasing revenue. This post covers what to send, how matching works, and the mistakes that make imports actively harmful.

The short version: teach the algorithm what money looks like

Closing the Loop With Offline Imports

Data Journey
Stage 1What the pixel sees
Online signal

A form submit, a COD order placed, a trial started. Fast, plentiful, and only weakly correlated with money.

1,000 leads at $4 each
Stage 2What the CRM knows
Offline outcome

Sales qualifies 200, closes 60, refunds 4. Ninety days of reality the platform never observed.

60 payers worth $96,000
Stage 3What bidding learns
Import back

Closed-won events matched to original clicks retrain Smart Bidding and Advantage+ toward buyers, not browsers.

CPA rises, revenue per lead 3x

An offline conversion is any conversion the platform could not observe itself: a closed-won deal, a COD order confirmed on delivery, an in-store purchase, a subscription renewal. Importing means uploading these outcomes with enough identity (click ID, hashed email/phone, timestamp) for the platform to join them to the click that started the journey.

The Golden Rule of imports: bid on the outcome closest to money that still has enough volume to optimise on. Platforms need roughly 30 conversions per 30 days per campaign to exit learning. Closed-won with 12 events a month will thrash; qualified-with-value (200 events, revenue-weighted) usually beats both extremes.


What to send: the event hierarchy

Not every CRM stage deserves an import. Send too little and bidding learns nothing; send everything and it learns noise.

CRM stageSend it?Why
Raw lead / form submitAlready have it (pixel)Useful as a micro-conversion for volume, never as the primary goal
Marketing-qualified (fit + intent verified)Yes — primary goal for mostFirst stage correlated with money that still has volume
Sales-qualified / opportunity createdYes, with valueFewer events, higher signal; attach expected deal value
Closed-won / delivered-and-paidYes — the money eventGround truth; also send value corrections when deals expand
Refunded / churned-in-30-daysYes — as a retractionSubtracts the revenue so bidding stops finding refund-prone buyers
Disqualified / junk / duplicateNo — neverTraining the algorithm on your spam filter's rejects teaches it to find more of them

Bidding on form-fills vs bidding on closed-won

Same budget, different students
Optimised on leads$38 CPA, 4% close rateCheap leads, sales drowning in students and job-seekers
Optimised on qualified$121 CPA, 31% close rate3x the CPA, 8x the close rate
Cost per closed deal$950 → $390The only CPA that ever mattered fell 59%
Volume caveatNeeds 30+ qualified/monthBelow that, stay on leads and import value instead
The campaign that 'got expensive' got cheaper where it counts. Leadership judging on cost-per-lead would have killed the winner in week two — another reason the money event must be visible in reporting, not just in bidding.

How matching works: the three keys, in order of strength

  1. Click ID (gclid, fbclid, wbraid) — the strongest key. If you stored the click ID on the lead or order row, matching is near-deterministic. This alone justifies the click-ID plumbing from the companion post.
  2. Hashed contact identity (email, phone) — SHA-256 hashed on your side before upload; the platform matches against hashed logged-in users. Match rates of 50–70% are typical with clean data, far lower with role-based or typo-ridden emails.
  3. Event timestamp + value — the weakest signal, used to disambiguate. Keep clocks honest: the conversion timestamp should be the outcome moment (deal closed, order delivered), not the upload moment, or window attribution misfires.

Never upload plaintext PII. Hash emails and phone numbers with SHA-256 before they leave your systems, normalise first (lowercase, strip spaces and country-code inconsistencies) — a hash of +91 98XXX XXXXX and 9198XXXXXXX are different strings and will silently fail to match. Most failed imports are normalisation bugs, not platform bugs.


Timing rules that quietly break imports

  • Upload fast, not eventually. Same-day or next-day uploads let the conversion land inside the campaign's attribution window. A closed-won uploaded 90 days late may fall outside the window entirely and train nothing.
  • Respect the platform's lookback. As a rule of thumb, Google accepts conversions up to ~90 days after the click for import goals and Meta considerably less for some objectives — verify current limits in the platform docs before designing a 120-day enterprise cycle around imports.
  • Send value corrections, not just events. When a deal expands, upload an adjustment with the same transaction ID. When an order is refunded, upload the retraction. Bidding trained on gross revenue systematically overbids on refund-prone segments.

The production SQL pattern: a CRM export ready to upload

Closed-Won Export With Click ID and Hashed Identity

Show query

Standing Up Offline Imports, In Order

Process Flow
1

Store click IDs on leads and orders first

Without stored gclid/fbclid you are matching on email alone, and match rates roughly halve. Plumbing before uploads.

2

Pick one money-adjacent primary goal

Qualified-with-value for most teams. Verify 30+ events per month per campaign before switching bidding to it.

3

Normalise, hash, and upload daily

Lowercase, E.164 phones, SHA-256, outcome timestamps. Automate the export; manual CSVs die within a quarter.

4

Add refunds and value adjustments

Retractions keep bidding honest. Review match rates monthly — a falling match rate is a data bug, not a platform change.


Frequently Asked Questions

Will importing offline conversions double-count against my pixel?

Only if you let the same event exist in both systems under different identities. Use consistent transaction IDs and, where the platform supports it, matching event IDs so the import merges with rather than duplicates the online signal. Reconcile weekly: imported revenue in the platform vs closed revenue in the CRM should track within the match-rate gap.

Our sales cycle is 6 months. Can imports still work?

Partially. Import the earliest money-correlated milestone (qualification) as the bidding goal, keep closed-won as an observed secondary goal for reporting, and shorten the feedback loop with value-weighting. A 6-month-delayed signal cannot steer this month's auctions no matter how pure it is.

Does this apply to COD e-commerce, not just B2B leads?

Directly. A COD order placed is a lead; a COD order delivered and paid is the outcome. Importing delivered-paid (and retracting RTO) is the single highest-ROI measurement project for COD-heavy stores — see RTO for why order-time revenue overstates reality by the RTO rate.


Summary & Next Steps

The pixel measures interest; the CRM measures money; imports are the bridge. Store the click, pick one money-adjacent goal with enough volume, hash and normalise rigorously, upload daily, and retract refunds.

  • Use click IDs as the primary match key wherever you can store them.
  • Use channel CAC on imported revenue to judge channels honestly.
  • Use ROAS targets derived from breakeven, not from pixel fantasy.
Free tool

Breakeven ROAS Calculator

Enter your gross margin to find the minimum ROAS at which a campaign stops losing money — and the target ROAS at a chosen profit goal.

CR

Chinmay Raibagkar

About author →

Founder of DataLens AI. He helps non-technical teams read their ad and database numbers with confidence — which number to trust, what to do next, and what to ignore.

Glossary terms referenced