Most projects that come to us already have GA4 markup, but the data in reports does not match reality. Conversions are doubled, micro-conversions are not tracked, and attribution spreads the budget thin. The reason is incorrect event design and lack of custom parameters. We have set up analytics for 50+ projects over 5 years and know how to avoid these errors. After implementing properly designed events, data accuracy reaches 95%, and cost per lead drops by 20% due to correct attribution.
How GA4 Differs from Universal Analytics and Why It Matters
In UA, a goal was a page visit or a specific condition. GA4 treats conversions as events. Each event can be marked as a conversion and immediately participates in attribution. However, there is a nuance: GA4 counts multiple conversions of the same type in a session. If you need to count only the first registration, you'll need an additional parameter or filtering.
| Characteristic | Universal Analytics | Google Analytics 4 |
|---|---|---|
| Conversion entity | Goal | Event |
| Repeated conversions | Default 1 per session | Multiple by default |
| Attribution model | Last Click | Data-Driven or Last Click |
| Custom parameters | Limited | Up to 50 custom dimensions |
Why Data-Driven Attribution Is More Accurate Than Last Click and When to Use It
The default attribution model in GA4 is Data-Driven (when 1000+ conversions per month). It distributes credit among touchpoints rather than giving it all to the last click. Tests show DDA improves attribution accuracy by 30% compared to Last Click. If data is insufficient, GA4 automatically switches to Last Click. We recommend switching to DDA when you have enough volume — it provides a more realistic picture.
How to Properly Design Conversions
We start with a funnel audit: identify which user actions are truly significant — form submission, phone number click, order placement. Then for each action, create a separate event with a unique name. For example, generate_lead for a lead, purchase for a purchase. Use snake_case without spaces. A typical mistake is mixing multiple actions into one event, causing duplication and blurred attribution.
Basic Markup of Conversion Events
Conversions are sent via gtag.js or GTM. Example — form submission:
gtag('event', 'generate_lead', { event_category: 'lead', event_label: 'contact_form', value: 1, currency: 'RUB', form_name: 'main_contact', page_section: 'footer', }); Purchase:
gtag('event', 'purchase', { transaction_id: 'ORDER-789', value: 14500, currency: 'RUB', items: [{ item_id: 'SKU-001', name: 'Pro Plan', price: 14500, quantity: 1 }], }); It is important to pass the value in the value parameter and the currency.
Custom Conversions via GTM and Data Layer
If the site uses GTM, setup is easier. Create a trigger, e.g., for form submission or thank-you page visit. Then a tag of type "Google Analytics: GA4 Event". Test via Preview and DebugView. This way, you can mark any conversion in minutes. To pass dynamic data (user ID, order amount), use the dataLayer. Always clear ecommerce: null before the next event to prevent data overlap.
window.dataLayer.push({ event: 'purchase', ecommerce: { transaction_id: orderId, value: totalAmount, currency: 'RUB', items: cartItems, }, user_id: currentUser?.id, }); window.dataLayer.push({ ecommerce: null }); | Parameter | GTM | gtag.js |
|---|---|---|
| Time to set up one event | 10–15 min | 15–30 min |
| Requires code changes | No (if dataLayer) | Yes |
| Flexibility | High (triggers, variables) | Medium |
Setup in GA4 Interface and Attribution
Events that have started coming in need to be marked as conversions: Admin → Events → Mark as conversion. Register event parameters in Custom Definitions. The limit is 50 custom dimensions per property. For attribution, GA4 uses Data-Driven Attribution by default (if enough data). The model can be changed in Attribution Settings. To import into Google Ads, link the accounts and select the desired conversions. After that, conversions are available for Target CPA strategies. Note: when changing the attribution model, past data is recalculated automatically, which may cause temporary discrepancies.
Debugging and Verification
Use DebugView in GA4 for real-time data. In the browser console, check dataLayer and gtag. The Tag Assistant extension helps see all hits.
More about Tag Assistant
Tag Assistant is a Chrome extension by Google that shows all active tags (GA4, GTM, Google Ads) on the page. It highlights errors, such as duplicate tags or missing required parameters. We recommend running a check through it after each change in GTM.
What Our Work Includes
- Audit of current GA4 markup and error identification
- Event design aligned with business funnel
- GTM or gtag.js setup for sending conversions
- Registration of custom parameters and dimensions
- Attribution setup and Google Ads import
- Token (client_id, session_id) transfer to CRM if needed
- Training of the client's team on report usage
- Documentation of all configured events
We guarantee data accuracy: after delivery, you will receive reports where numbers match real user actions. Request an audit of your current markup — we will assess and propose a revision plan. Get a consultation on conversion setup.
Timelines
Markup of 3–5 key conversions in code + GTM tags — 1 day. Setup of custom parameters and Data Layer — 4–6 hours. Attribution setup and linking to Google Ads — 2–3 hours.







