Your GA4 retention report says 18% repeat purchase rate. Your actual figure might be 30%, 40%, or higher. The gap isn’t rounding error—it’s structural. Safari’s ITP limits GA4’s identifying cookies to just 7 days for classified tracking domains (Apple WebKit, 2025). A customer who buys on the 1st of the month has a completely new identity in GA4 by the 9th. When she buys again on the 31st, GA4 records a new first-time buyer.
This happens to every Safari user. It happens to anyone who clears cookies. It happens across every device switch. Your most loyal customers are being counted as perpetual new visitors—and every retention strategy built on that data is built on fiction.
The Math That Breaks Your Retention Reports
Take a simple example. A customer orders every month on Safari—twelve times a year. Safari’s 7-day cookie limit means her GA4 client_id expires between every purchase. GA4 sees twelve separate first-time buyers. Your repeat purchase rate appears lower. Your new customer acquisition metric appears inflated. Every retention decision made from that data is wrong.
Scale that to your full customer base. 31.5% of global internet users run ad blockers (Statista, 2024), which interfere with GA4 user identification entirely—those users may never be recognized across sessions at all. Add customers who shop from both phone and laptop. Add guest checkouts. Each scenario creates a new client_id, fragmenting one real customer into multiple anonymous sessions.
A WooCommerce store with predominantly mobile Safari traffic and significant guest checkout can see GA4 repeat purchase rate running 30-50% below what’s actually happening in the database. You’re not measuring retention. You’re measuring cookie survival.
You may be interested in: Your WooCommerce CLV Is Fiction Because GA4 Only Sees 60% of Customers
Why GA4’s Identity System Was Never Built for WooCommerce
GA4 has a User-ID feature designed for logged-in users. In theory, it creates persistent identity across devices and sessions. In practice, it solves part of the problem for WooCommerce stores—and leaves the most important parts unresolved.
Here’s where it falls short. First, User-ID only fires when a customer is actively logged in. Enabling guest checkout can reduce cart abandonment by up to 24% (Baymard Institute, 2025)—and most WooCommerce stores enable it for exactly this reason. Every guest checkout bypasses User-ID entirely. That purchase gets no persistent identity. That customer appears as an anonymous new visitor forever.
Second, User-ID requires deliberate implementation. Most WooCommerce stores running standard analytics plugins have never configured it. The default setup pushes events with only the anonymous client_id.
Third—and this is the part most stores don’t know—even with User-ID active, GA4 cohort analysis ignores it. Google’s documentation explicitly states that cohort analysis groups users by first-visit date using client_id, not User-ID. A returning customer who received a new client_id enters a new cohort as a first-time user. Your cohort retention reports are built on the same broken cookie foundation, regardless of User-ID setup.
The Cascade: One Broken Identity, Every Metric Corrupted
Identity fragmentation doesn’t just affect repeat purchase rate. It corrupts the entire retention analytics stack in sequence.
Cohort analysis groups customers by acquisition date using client_id. When repeat customers appear as new users due to cookie expiry or device switches, they enter new cohorts. You can’t measure whether month-three retention is improving if your month-three repeat buyers are being counted as new month-three acquisitions.
Customer lifetime value calculations in GA4 are based on revenue attributed to each client_id. A customer generating $2,400 per year across twelve monthly purchases looks like twelve customers generating $200 each. Average order value appears accurate. Actual CLV is invisible.
Audience building suffers downstream. GA4 data-driven attribution requires 400+ monthly conversions to function (Google Analytics Help, 2025)—most WooCommerce SMBs never hit that threshold. The audiences GA4 builds from fragmented retention data feed directly into your ad platforms. You’re building lookalike audiences from a sample that systematically underrepresents your best customers.
The business consequence is predictable: you allocate more budget toward new customer acquisition because retention appears weaker than it is. Meanwhile your actual loyal customers—already buying repeatedly—get missed in retention campaigns because GA4 can’t identify them consistently across sessions.
You may be interested in: GA4 Behavioral Modeling Never Activates for Most WooCommerce Stores
Your WooCommerce Database Already Has the Real Answer
Here’s the thing—WooCommerce stores the information GA4 can’t figure out. The wp_wc_customer_lookup table links every order to a customer email address. That email persists across devices, across browsers, across years of purchasing. When a customer buys on Safari in January and on Chrome in March, WooCommerce knows it’s the same person. GA4 doesn’t.
Your real repeat purchase rate lives in your own database. The problem is that standard tracking never sends WooCommerce’s customer identity to your analytics layer. GA4 receives anonymous cookie-based events. BigQuery receives nothing. The most important data point for your retention strategy sits in a WordPress table, never reaching the tools where you make decisions.
Fast-growing companies generate 40% more revenue from personalization compared to slower-growing counterparts (McKinsey, 2024). Personalization at that level requires knowing who your actual repeat customers are—not GA4’s fragmented cookie approximation of them.
Identity-Resolved Tracking: How It Actually Works
The fix is server-side tracking that attaches WooCommerce’s customer identity data—hashed email, WooCommerce customer ID—to every event before it reaches analytics. When a purchase fires, the server enriches the event with the customer’s identifying information and routes it to GA4 and BigQuery simultaneously. GA4 receives a User-ID with every event, not just logged-in sessions. BigQuery receives the hashed email for cross-session matching that’s independent of cookies entirely.
In BigQuery, repeat purchase rate is calculated from actual email matching across all orders. A customer who bought twelve times shows as twelve purchases by one customer—not twelve anonymous first-time buyers. Cohort retention, CLV, and audience data all improve from the same underlying fix.
Transmute Engine™ is a dedicated Node.js server that runs first-party on your subdomain (e.g., data.yourstore.com)—not a WordPress plugin. The inPIPE WordPress plugin captures WooCommerce purchase events and sends them via API to your Transmute Engine server, which hashes the customer email (SHA256), attaches the WooCommerce customer ID, and routes the enriched event simultaneously to GA4, BigQuery, Facebook CAPI, and your other destinations. Your retention metrics in BigQuery reflect actual customer behavior: device-independent, cookie-independent, accurate.
Key Takeaways
- Safari ITP limits GA4 cookies to 7 days—customers buying monthly are registered as new users every purchase cycle.
- Guest checkout disables User-ID entirely—the feature most stores enable to reduce abandonment is the same one that breaks cross-session identity tracking.
- GA4 cohort analysis uses client_id, not User-ID—even correctly configured User-ID doesn’t fix cohort retention reports.
- Your WooCommerce database has the real answer—the wp_wc_customer_lookup table identifies customers by email, persistent across every device and browser.
- BigQuery + hashed email fixes it at the source—server-side tracking with identity-resolved events gives you retention data GA4 structurally cannot provide.
GA4 uses client_id cookies to identify users. Safari’s ITP limits these cookies to 7 days, and they’re reset when customers switch devices or clear their browser. Each expiry creates a new identity in GA4—the same customer buying monthly may appear as 12 different first-time buyers per year. Your WooCommerce database identifies customers by email, which persists across every device and session, giving a far more accurate repeat purchase count.
Partially. User-ID helps for logged-in purchases, but doesn’t cover guest checkouts (which reduce cart abandonment by 24% and are widely enabled), cross-device journeys where customers aren’t logged in, or GA4 cohort analysis—which explicitly uses client_id rather than User-ID regardless of setup. Server-side tracking with WooCommerce customer ID and hashed email provides more complete identity resolution across all purchase types.
Stores with significant Safari traffic, mobile shopping, and guest checkout enabled can see GA4 repeat purchase rates running 30-50% below actual WooCommerce database figures. The structural undercounting exists in every WooCommerce GA4 setup using standard client-side tracking—the size of the gap depends on your customer profile, not on your setup quality.
The wp_wc_customer_lookup table is WooCommerce’s internal customer database, which links every order to a customer email address. Unlike GA4’s cookie-based identification, this email-based lookup persists across devices, browsers, and years of purchasing. It’s the source of truth for your actual repeat purchase rate—and server-side tracking that sends this customer data to BigQuery makes it actionable in your analytics layer.
Your WooCommerce database has been tracking real customer behavior all along. Learn how Transmute Engine routes identity-resolved events to BigQuery for accurate WooCommerce retention analytics.



