Dilshat Rakhimov
May 2026 · 6 min read
Marketing often lives in an illusion: clicks get cheaper, lead conversion goes up, CPL falls. It looks like the campaigns are working great. But when you walk over to the sales team, it turns out those cheap leads do not convert into real deals. In B2B, real estate, the auto business, and complex B2C services, the final sale almost always happens offline — over the phone or in the office. And that creates a huge blind spot: ad algorithms see the leads but they do not see the money.
To start optimizing ads against real revenue, you have to build a bridge between your site and the CRM (Online-to-Offline, or O2O). Here is how it works in practice.

Context: the cost of the blind spot
If your analytics ends at "submitted a form on the site", the Google Ads or Meta algorithms are training themselves to bring you users who are most likely to fill out a form. They do not know whether that person will buy your product.
As a result, the budget flows to placements with cheap but junky traffic. The winners are the teams that send the signal of a successful offline deal back into the ad account.
Your job is to move algorithms from CPL (Cost Per Lead) optimization to ROAS (Return On Ad Spend) optimization.
Stage 1: capturing the data (the Data Bridge)
All the O2O magic rests on one rule: we must tag every visitor and store that tag together with their contact details in the CRM (for example, in amoCRM or Bitrix24).
When a user clicks an ad, Google appends a special parameter to the link — GCLID (Google Click ID). At the same time, the Google Analytics 4 (GA4) tag assigns the user's browser a unique identifier — Client ID.

How to implement this technically:
- Collecting the identifiers: when a user lands on the site, a small JavaScript snippet has to pull GCLID and Client ID from cookies or the URL.
- Hidden fields: in the capture forms on your site (name, phone), the developer adds hidden fields. The user does not see them, but the collected identifiers are filled into them automatically.
- Sending to the CRM: when the form is submitted, a new deal is created in amoCRM or Bitrix24. Alongside the phone and name, the deal stores technical fields:
Google Client IDandGCLID.
Now we do not just know "Ivan submitted a form", we know "Ivan, who came from this specific click on campaign X, submitted a form".
Stage 2: closing the loop (returning the conversion)
The second part of the process is telling the ad platform that the deal closed successfully. Say a sales manager in amoCRM moves the deal to "Won" and enters the amount — KZT 500,000.
We have to send this information back.

How the postback flow works:
- Webhooks: your CRM is set up so that when a deal moves to "Won", it sends a webhook (HTTP request) to your server or to an intermediary service (for example, Make/Integromat).
- GA4 Measurement Protocol: the server takes the deal amount and the previously saved
Client ID, then sends a server-side request to Google Analytics 4. GA4 recognizes theClient IDand ties those KZT 500,000 back to the exact session that happened on the site a month ago.¹ - Google Ads Offline Conversions: in parallel (or via the GA4 import), data is sent to Google Ads. The platform takes the
GCLIDand pinpoints which keyword and which ad brought in that sale.
At this moment the ad algorithm receives the most important signal of all: "These are the users who bring real money. Find more like them".
O2O specifics by industry
The basic logic of the bridge "Click -> Identifier -> CRM -> Postback" is universal, but in practice the architecture depends heavily on the business model. A few real examples.
1. Fintech & Banking (case studies of BCC.kz and SK Halyk)
In fintech, the primary user identifier is not just a cookie but the IIN (national ID) and phone number.
For example, in our work with BCC.kz (Bank CenterCredit), a user clicks an ad, lands on the site, and the tracker saves their click_id. Then the client submits an application by entering their IIN. When the same person walks into a physical branch and scans a QR code for the electronic queue, they enter their IIN again. Nightly batch jobs join this data: if the IIN from the offline branch matches the IIN that clicked on an ad in the last 7 days, we send a successful conversion to Google Ads.
With SK Halyk (insurance) the complication is WebView. Around 85% of policies are issued inside the Halyk SuperApp mobile app. In that environment you cannot rely on standard browser UTM tags. Attribution has to be pushed deep into the bank's core system, tying every issued policy (motor third-party liability, hull insurance) and its actual premium back to the original traffic source.
2. E-commerce & Retail
In classic retail the user does not fill in a CRM form before visiting the store. Here the bridge is the loyalty program. The customer sees an ad, signs up in the store's app (getting a Client ID), and at the physical till shows the barcode from the app. The store's POS records the purchase and sends data to a server, which then fires a Measurement Protocol request to GA4. An alternative path is unique offline promo codes handed out online.
3. FMCG (consumer packaged goods) The toughest O2O scenario, because brands (for example, Coca-Cola or Procter & Gamble) do not own the supermarket shelves and do not have access to their POS systems. Here attribution rests on the customer themselves: receipt scanning of promo products via cashback apps (Promo/Loyalty Apps) or scanning unique QR codes printed inside the packaging. That lets the brand close the loop between watching a video ad and buying a can of soda at the corner store.
What to do next
For marketers:
- Stop running your contractors purely on "cheap leads". Add a CPO (Cost Per Order) or ROAS metric.
- Make sure the deal cycle lets the algorithms learn properly. If it takes more than 90 days from lead to sale, the data in Google Ads can go stale. In that case, send the intermediate stages too (for example, "Contract sent").
For analysts:
- Set up deduplication. If a user submitted a form and then also called, the CRM should not contain two different successful deals with different identifiers.
- Watch data quality. Regularly reconcile the number of webhooks sent against the number of conversions recorded in GA4.
For developers:
- When sending data through the Measurement Protocol, double-check the formatting of the
client_id(for example,GA1.2.123456789.123456789) and the session parameters, otherwise GA4 will not be able to stitch the offline event to the web session.² - Handle personal data responsibly. If you use Enhanced Conversions, hash (SHA-256) emails and phone numbers before sending them to Google.
Building O2O analytics is a complex technical project, but it is the only way to make ads work for business growth instead of for pretty reports in the ad account.
Dilshat Rakhimov
Growth Analytics & Digital Architecture
¹ GA4 Measurement Protocol Documentation
² Google Ads Offline Conversion Tracking
FAQ
What is wrong with judging ads on cost per lead?
CPL optimization finds people who fill in forms — that is all it optimizes for. The job is to move algorithms from CPL to ROAS by returning the real sale to the platform.
What are the two stages of an O2O pipeline?
Capture, then close the loop. First save the click context — click IDs and UTM — with the lead as it enters the CRM. Then, once the sale is confirmed, push it back through Google Ads offline conversion import or the GA4 Measurement Protocol so the algorithm can see which users brought money.
Does O2O attribution work the same way in every industry?
No — it depends on who owns the point of sale. In fintech the bridge is a national ID and a phone number. In retail it is the loyalty programme and the POS. In FMCG the brand owns neither the shelf nor the POS, so attribution runs on receipt scans and in-pack QR codes.
