GA4 ↔ Google Ads Split-Conversions for Multilingual Israeli SMB
If you sell to Russian-speaking AND English-speaking AND Hebrew-speaking customers in Israel from one website — and you run Google Ads campaigns in those languages — and you measure success with one lead conversion in GA4 — your CPA is lying to you.
The blended CPA that GA4 reports tells you that “this campaign costs ₪50 per lead.” But the RU-yacht audience might cost ₪30, and the EN-yacht audience ₪90, and you have no way to know unless you split conversions per language.
This article is the step-by-step setup we run in production at Holyland Adventures — three parallel campaigns (RU yacht, RU skipper school, EN yacht), each with independent CPA optimization. No agency we’ve benchmarked offers this explicitly.
Why the standard GA4↔Ads setup fails for multilingual SMB
The default Google Ads setup is:
- Define one conversion goal in GA4:
lead - Import that goal into Google Ads
- Run all campaigns optimizing for
lead
This works fine if all your campaigns serve the same audience with the same economics. It breaks the moment you have audiences with different AOV, different sales cycles, or different language preferences.
Concrete example from Holyland Adventures:
- RU yacht charter — local audience in Israel. AOV ₪3,000-5,000. Sales cycle 1-7 days. Sees ad on a Sunday, books for next weekend.
- RU skipper school — niche (Russian speakers training for Mashit 30 exam). AOV ₪8,000-15,000. Sales cycle 14-60 days. Multi-touch decision.
- EN yacht charter — international tourists. AOV ₪2,500-4,000. Sales cycle 0-3 days (often book on arrival day in Israel).
If we optimize a single Google Ads bid strategy on a blended lead conversion:
- Bidding system thinks the average CPA is the target
- It pushes too hard on EN yacht (low AOV, high competition) and overspends
- It under-bids on RU skipper (long cycle = appears as “no immediate conversion”)
- Net result: blended CPA looks fine in monthly report, but per-audience economics are upside-down
The split-conversion architecture
Step-by-step:
Step 1. Add a custom dimension audience_language in GA4
In GA4 Admin → Custom Definitions → Custom Dimensions:
- Dimension name:
audience_language - Scope:
User(orEventif user-level isn’t critical) - Event parameter:
audience_language
This dimension is set client-side via gtag config when the user lands on a localized page:
// In your localized page template (Astro example):
gtag('set', 'user_properties', {
audience_language: locale, // "ru" | "en" | "he"
campaign_segment: campaignSegment, // "yacht" | "skipper" | "general"
});
Step 2. Define separate conversion events per audience
Instead of one lead event, create three (or N) explicit events:
// On form submit / WhatsApp click / phone call:
gtag('event', `lead_${audienceSegment}_${locale}`, {
value: estimatedAOV,
currency: 'ILS',
// ...other event-level data
});
Where audienceSegment and locale give you events like:
lead_yacht_rulead_skipper_rulead_yacht_en
In GA4 → Configure → Events → mark each as a Conversion.
Step 3. Import each conversion separately into Google Ads
In Google Ads → Tools → Conversions → Add new conversion → Import from Google Analytics 4:
- Import
lead_yacht_ruasLead — RU Yacht - Import
lead_skipper_ruasLead — RU Skipper - Import
lead_yacht_enasLead — EN Yacht
For each, set:
- Category: Lead
- Value: Use a different value for each conversion (per AOV)
- Count: Once per click (for one-purchase audiences)
- Attribution model: Data-driven
Step 4. Run separate Google Ads campaigns per audience
Critically: each campaign optimizes for its OWN conversion only.
- Campaign: RU Yacht → Conversions =
Lead — RU Yacht(only) - Campaign: RU Skipper → Conversions =
Lead — RU Skipper(only) - Campaign: EN Yacht → Conversions =
Lead — EN Yacht(only)
In each campaign settings → Conversion goals → Override account-level conversions → check only the relevant goal.
This is what makes it “split” — each campaign’s bidding is influenced ONLY by its specific audience’s conversion data.
Step 5. Close the loop with offline conversions (the critical step)
Most multilingual SMB businesses lose 30-50% of attribution because the actual conversion happens after the GA4 event:
- WhatsApp message → 2 days of dialog → booking confirmed
- Phone call → 1 week → contract signed
- Form submission → 3 weeks → deal closed
GA4 sees the initial event (lead_yacht_ru) but not the actual revenue. Bidding optimizes for “events” not “revenue.”
Solution: offline conversion upload to Google Ads.
When your CRM (or Takli’s CRM connector) marks a lead as “won”:
- Pull the original
gclidfrom the lead record - Pull the actual revenue
- Upload to Google Ads via the Offline Conversions API
Python example using google-ads-python SDK v30:
from google.ads.googleads.client import GoogleAdsClient
def upload_offline_conversion(client, customer_id, gclid, conversion_action_id,
conversion_value, conversion_date_time, currency_code='ILS'):
conversion_upload_service = client.get_service("ConversionUploadService")
click_conversion = client.get_type("ClickConversion")
click_conversion.gclid = gclid
click_conversion.conversion_action = client.get_service(
"ConversionActionService"
).conversion_action_path(customer_id, conversion_action_id)
click_conversion.conversion_value = conversion_value
click_conversion.conversion_date_time = conversion_date_time
click_conversion.currency_code = currency_code
request = client.get_type("UploadClickConversionsRequest")
request.customer_id = customer_id
request.conversions.append(click_conversion)
request.partial_failure = True
response = conversion_upload_service.upload_click_conversions(request=request)
return response
Run this nightly (or webhook-triggered from CRM “deal-won” events).
Result: honest, per-audience CPA
After the full setup:
- Google Ads dashboard shows three separate CPAs, one per audience
- Each is computed on actual revenue (via offline conversion upload), not on form-fill events
- Bidding strategies optimize each campaign independently
- You can confidently shift budget between campaigns based on real economics
This is what we mean by “honest CPA” at Marketing Engineering Studio. It’s not a marketing slogan — it’s a specific technical setup that takes ~8-16 hours to implement once, and replaces the lie of blended CPA with measurable ground truth.
Common pitfalls
-
Setting up the dimension but not the conversion events. You need both. The dimension lets you slice reports; the per-event conversions let bidding optimize separately.
-
Forgetting that GA4 user_properties are sticky. If a user visited the RU page first, then EN — their
audience_languageis still RU unless you re-set it. Set it on every page load. -
Not closing the offline loop. Without offline conversion upload, you’re optimizing for “form submits” not “won deals.” For long sales cycles, this is the difference between profitability and burning money.
-
Importing all conversions into all campaigns. This defeats the purpose. Use Google Ads campaign-level conversion goals to isolate each campaign’s signal.
Want help implementing this?
This is exactly what we set up during implementation engagements (from USD 2,500). For ongoing optimization — Google Ads retainer (from USD 600/mo). For the WhatsApp/CRM loop — Takli platform.
Or if you want a single deliverable that audits your current setup and gives you a roadmap — SEO audit at ₪1,490.