GA4 is the analytics platform every marketing team complains about. Three years after Universal Analytics sunset, most teams still report data they don't trust + miss data they would have caught with UA. The platform isn't the problem. The setup almost always is.
This is the practical setup guide for getting GA4 to a place where marketing actually trusts it. Doable in 6-10 hours of focused work if you have admin access. It assumes you have a Shopify (or similar ecommerce) site + run Google Ads + Meta Ads.
What's actually different about GA4 (and why teams trip)
GA4 is not UA with a new interface. It's a different data model. Five differences that matter:
| Concept | Universal Analytics | GA4 |
|---|---|---|
| Hit type | Pageview, event, transaction (separate) | Everything is an event |
| Session definition | 30-minute timeout by default | 30-minute default, configurable |
| Identity model | Cookie-based | Cross-device via Google Signals + User-ID + cookie |
| Sample limits | High (rows > 500K = sampled by default) | Lower (unsampled in standard reports for most volumes) |
| Reporting model | Pre-aggregated reports | Flexible explorations + BigQuery export |
Teams that try to recreate UA reports in GA4 fight the model. Teams that learn the new event-centric model use it.
Step 1: create the property properly
Most setup failures happen in the first 15 minutes of property creation.
Create the property
- In admin.google.com/analytics, click Admin → Create Property.
- Set the Industry Category correctly (drives benchmarks).
- Set the Reporting Time Zone to your business's primary time zone (IST for India). Once set + data flowing, this is hard to change without losing data.
- Set the Currency to your primary reporting currency.
- Click Create.
Add the data stream
- Click Data Streams → Add stream → Web.
- Enter your website URL + stream name (just the domain is fine).
- Toggle Enhanced Measurement ON for: page views, scrolls, outbound clicks, site search, video engagement, file downloads. You can disable specific signals later if they pollute your data.
- Save. You'll get a Measurement ID (looks like
G-XXXXXXXXXX). Copy it.
Install the tag
Three options:
- Native Shopify integration (Online Store → Preferences → GA4 Measurement ID field). Simplest. Sends standard ecommerce events.
- Google Tag Manager (recommended for any non-trivial site). Lets you customize what fires + when.
- Hardcoded gtag.js in your theme. Most control, most maintenance.
For Shopify D2C, GTM + the GA4 Configuration tag is the right default.
Step 2: configure events + conversions
The events that should fire by default
GA4 Enhanced Measurement covers the basics. For ecommerce, you also need:
| Event | When it fires | Required parameters |
|---|---|---|
| view_item_list | User views a collection page | items array (with item_id, item_name, item_category, price) |
| view_item | User views a product page | items array |
| add_to_cart | User adds to cart | items + currency + value |
| begin_checkout | User starts checkout | items + currency + value |
| add_payment_info | User adds payment | items + currency + value + payment_type |
| add_shipping_info | User adds shipping address | items + currency + value + shipping_tier |
| purchase | Order complete | items + currency + value + transaction_id |
| refund | Refund processed | transaction_id + items + currency + value |
| sign_up | User creates account | method (email / Google / Facebook) |
| login | User logs in | method |
For Shopify, the native integration sends most of these. For headless setups, you wire them via GTM.
Mark conversions
In Configure → Conversions, mark these as conversions:
purchase(the primary conversion)begin_checkout(secondary, useful for funnel)sign_up(lead conversion)- Custom events as relevant ("contact_form_submit", "demo_request", "newsletter_signup")
GA4 allows 30 conversions per property. Use them wisely.
Custom dimensions + metrics
In Configure → Custom Definitions, set up:
- Customer Type (new vs returning). dimension
- Logged-In State (yes / no). dimension
- Product Category (already covered by item_category). usually not needed as custom
- Order Margin (if you have margin data). metric
- First-purchase value. metric
Custom dimensions hit a soft limit of 50 per property; metrics hit 50. Most teams use 5-15 of each.
Step 3: link Google Ads + Search Console + BigQuery
Google Ads linking
In Admin → Product Links → Google Ads → Link:
- Pick your Ads account
- Enable "Personalized advertising" (for remarketing audience export)
- Enable "Auto-tagging" (in Ads side; preserves the gclid for attribution)
Without this link, Ads-attributed sessions in GA4 won't get full campaign + ad-group data.
Search Console linking
In Admin → Product Links → Search Console → Link:
- Pick your verified Search Console property
- Choose which web data stream to associate
Once linked, GA4 surfaces organic search queries + landing-page performance in the Search Console reports.
BigQuery export (the most important step)
GA4's free BigQuery export is the platform's killer feature + the most under-used.
- Admin → Product Links → BigQuery → Link
- Pick or create a Google Cloud project (free tier available)
- Choose Streaming (recommended for ad-hoc analysis) OR Daily (cheaper, lags by ~12-36 hours)
- Enable Include advertising identifiers
- Save
After 24-48 hours, GA4 starts writing event-level data to a BigQuery dataset. This finds:
- Unsampled queries
- Custom attribution modelling
- Joining GA4 data with your warehouse (orders, customer LTV, margin)
- Long-term data retention (GA4 default retention is 14 months; BigQuery is forever)
- Cross-channel attribution that doesn't depend on GA4's UI
For any team that wants to be data-serious, BigQuery export is non-negotiable.
Step 4: configure attribution + data retention
Attribution model
In Admin → Attribution Settings:
- Reporting attribution model: Data-Driven (default, recommended)
- Lookback window: 90 days for acquisition, 30 days for engagement (defaults are fine for most cases; longer windows fit B2B / high-consideration purchases)
Data retention
In Admin → Data Settings → Data Retention:
- Event data retention: 14 months (max). Set this to 14 months immediately; default is 2 months.
- Reset user data on new activity: ON (default).
GA4 deletes detailed event data after the retention period. Aggregated reports persist forever, but explorations + custom analysis cannot reach beyond the retention window. BigQuery export bypasses this; another reason to wire it.
Google Signals
In Admin → Data Settings → Data Collection, enable Google Signals. This finds cross-device tracking + demographic + interest reports for users logged into Google.
For DPDP / GDPR compliance, ensure your consent banner gates Google Signals on opt-in (default state should be NOT enabled).
Step 5: build the reports marketing actually needs
GA4's default reports are okay but not great. The real value is in custom Explorations.
Build these 5 explorations
1. Channel performance over time. free-form exploration, dimensions: Session source/medium + Month, metric: Conversions + Conversion value, sliced weekly.
2. Top landing pages by conversion rate. table, dimensions: Landing page, metrics: Sessions + Conversions + Conversion rate, filtered to high-traffic pages.
3. Funnel: home → product → cart → purchase. funnel exploration with appropriate event sequence + drop-off analysis.
4. Path exploration: paths after key event. what users do after view_item, add_to_cart, etc.
5. Cohort retention: by acquisition month. cohort exploration showing returning visitor rate over time per cohort.
Pin these 5 to the team's reports + review weekly. Most teams build 25 reports + look at 3; the discipline is to identify the 5 that actually drive decisions.
Common mistakes that mute your data
1. Multiple GA4 properties for the same site. Often happens when a vendor installs their own GA4 tag without coordinating with the team's tag. Result: data fragmented across properties; reports incomplete in both. Fix: audit installed tags + consolidate to one Measurement ID.
2. Filters set too narrow. Excluding internal traffic via IP filter sometimes kills legitimate office WiFi traffic from staff who ARE also customers. Configure carefully; review excluded traffic monthly.
3. Missing user_id on logged-in sessions. Without user_id, GA4 can't stitch a user's behaviour across devices. For sites with login, set user_id in every page view + event.
4. Currency not set or set wrong. GA4 multi-currency support is incomplete. If you sell in INR + AED + GBP, configure currency per data stream OR send all values normalised to one currency.
5. Conversion value not set on purchase events. A purchase event without a value parameter loses the revenue signal. Always pass value: order.total + currency: order.currency.
6. Bot filtering off. GA4 auto-filters known bots by default but doesn't catch sophisticated bot traffic. Combine with Cloudflare or similar edge bot detection for clean data.
7. Time zone changed after data collection started. Don't do this. Set the time zone correctly at property creation; changing it later causes day-boundary drift in historical reports.
What does a clean GA4 setup look like in production?
A real-world snapshot of a Shopify D2C at Rs 30 crore ARR:
- 1 GA4 property for the primary domain
- GTM container managing all tag firing
- 15 events firing per session on a typical user journey (Enhanced Measurement + ecommerce + 2-3 custom events)
- 8 conversions marked
- 12 custom dimensions (customer type, logged-in, region, cohort, ad source, etc.)
- 3 audiences for ad-platform remarketing (engaged-30d, cart-abandoner-7d, customer-30d)
- BigQuery streaming export active
- Google Ads + Search Console linked
- 14-month data retention set
- 5 pinned explorations reviewed weekly
Total setup time: 8-12 hours. Total quarterly maintenance: 4-6 hours.
Production checklist
For a GA4 setup that marketing trusts:
- One GA4 property per domain; properly configured at creation (time zone, currency, industry)
- GTM-driven tag firing with documented event taxonomy
- Ecommerce events firing correctly (view_item → add_to_cart → purchase chain)
- Conversions marked (8-12 is realistic; not 30)
- Google Ads + Search Console + BigQuery linked
- BigQuery streaming or daily export active
- 14-month data retention set
- Google Signals enabled with proper consent gating
- Custom dimensions + metrics defined (5-15 each)
- 3-5 audiences built for ad-platform remarketing
- 5 pinned explorations reviewed weekly by marketing
- Quarterly health check: tag firing, event completeness, conversion rate sanity, BigQuery export integrity
References + linked context
- Dcrayons glossary: conversions-api, smart-bidding, mta
- Dcrayons reference architectures: Server-side tracking for Shopify D2C, Enterprise Google Ads
- Related tutorials: Set Up sGTM on Vercel, Set Up Meta CAPI on Shopify
If your GA4 reports look strange + the team has lost trust in the data, the fix is almost always in the setup, not in the reporting. Reach out via the contact form for a 30-minute audit of your current setup.



