Your landing page has been live for three weeks. Google Analytics says 412 users, term "pricing" trending, average engagement time 47 seconds. You also have 23 waitlist signups sitting in a different tool. GA4 cannot tell you which of those 412 became one of the 23, because the two systems never share an identifier, and by the time you go looking, GA4 may have already deleted the event-level data you needed.
That is the real problem with using Google Analytics on a pre-launch page. Not that it is bad software. It is that GA4 is built to measure an ecommerce funnel at scale, and you are trying to answer one question: did anyone who read this page actually sign up.
GA4 is free in dollars and costs you a cookie consent banner, a 2-month default data retention window, a 24 to 48 hour reporting delay, and a hard wall between traffic data and the people who signed up. OperatorStack gives you cookie-free page views, sources, and custom events from a 13KB script tag, with waitlist signups landing in the same contact list the analytics point at. GA4 still wins for ecommerce, Google Ads attribution, and free unlimited scale.
What GA4 Actually Costs
Free tier pricing is real. Everything below it is the bill.
A consent banner. GA4 writes a persistent _ga first-party cookie to identify returning visitors. Under EU rules that means a cookie consent prompt before it fires, and every visitor who clicks "reject" disappears from your numbers. On a page whose only job is converting a stranger into a waitlist signup, a modal covering the hero section is a conversion tax you are paying for a visitor count.
A retention clock. GA4 standard properties default to 2 months of user and event-level data retention, and 14 months is the longest option available on the free tier. Aggregate reports survive, but the granular event rows do not. Six months after launch, when you finally want to ask "which source produced the signups that converted," the raw data behind that question can already be gone unless you set up a BigQuery export in advance.
A reporting UI you did not ask for. GA4's default reports are organized around acquisition, engagement, monetization, and retention, with an exploration builder for anything custom. That structure earns its complexity when you have a checkout flow. On a single landing page it means clicking through four screens to learn that 412 people showed up.
GA4 also collapses high-cardinality dimensions into a row literally labeled (other) once a report exceeds its cardinality limits. If you are tracking per-campaign or per-URL detail on a busy day, the row you care about can get swept into that bucket, and there is no way to expand it after the fact.
Feature Comparison
| Capability | Google Analytics 4 | OperatorStack |
|---|---|---|
| Page views and sources | Yes | Yes |
| Cookie consent banner required | Yes, for EU traffic | Not for page-view analytics |
| Event-level data retention | 2 months default, 14 months max | Retained on your plan |
| Reporting delay | 24 to 48 hours for full processing | Live |
| Custom events | Yes | Yes, via trackEvent() |
| Waitlist widget | No | Yes |
| Forms | No | Yes |
| Referral tracking and leaderboard | No | Yes |
| AI chat and live chat | No | Yes |
| Ecommerce revenue reporting | Yes | No |
| Google Ads attribution | Yes | No |
| Audience export for remarketing | Yes | No |
Where Google Analytics Wins
Three places, and they are not small.
Scale is genuinely free. GA4 will absorb millions of events a month without a bill. If your site already gets serious traffic and you only need to count it, nothing beats that price.
Google Ads attribution. If you are spending money on Google Ads, GA4 is the native attribution path, and conversion imports flow back into bidding. No independent analytics tool replaces that link.
Ecommerce. Purchase events, revenue by channel, product performance, cart abandonment. GA4 has a fully built ecommerce model. OperatorStack has none of it and is not trying to.
If any of those three describe you, keep GA4. The comparison below is about the case where none of them do.
Where OperatorStack Wins: Signups Live in the Same Place as Traffic
This is the whole argument. In GA4, a waitlist signup is a conversion event with no name attached. In OperatorStack, it is a contact row.
The script tag is the same one that does your analytics:
<script src="https://operatorstack.dev/os.js" data-project="pk_your_key"></script>
The SDK it exposes lets you record the behavior and the person through the same tag. Track the intent signal on the page:
document.querySelector("#pricing-cta").addEventListener("click", () => {
OperatorStack.trackEvent("pricing_cta_click", {
plan: "starter",
placement: "hero",
});
});
Then capture the signup from your own form, so it lands in the same contact list:
const result = await OperatorStack.joinWaitlist({
email: form.email.value,
name: form.name.value,
});
// result includes the contact's referral code
const links = await OperatorStack.getShareLinks();
shareInput.value = links.direct;
Now "who saw pricing and then signed up" is a question about one dataset instead of a join you cannot perform. GA4 has no equivalent, because it deliberately does not store the email address that would make the join possible.
joinWaitlist() picks up a stored ?ref= referral code automatically if the visitor arrived through someone else's share link, so referral attribution works without you passing anything extra. GA4 would count that visit as referral / other-site and stop there.
The Cookie Banner Tax
OperatorStack identifies visitors with a rotating server-side hash rather than a persistent identifier cookie, which is why standard page-view analytics does not need a consent prompt the way _ga does. Campaign attribution does use a first-party os_attribution cookie, but it holds only the UTM labels you put in your own URLs and is not shared with an ad network.
There is a second, quieter version of the same tax: ad blockers. The blocklists shipped by uBlock Origin and Brave block google-analytics.com and googletagmanager.com by default. If your first hundred visitors come from Hacker News, a subreddit, or a developer newsletter, a meaningful slice of them never appear in GA4 at all. That is the exact audience a pre-launch SaaS is usually validating against, so the undercount lands hardest precisely when your sample is smallest.
Why replace Google Analytics if it is free?
GA4 is free in dollars and costs you elsewhere: a cookie consent banner in the EU, a 2-month default data retention window, a reporting UI built for ecommerce teams, and no way to connect a page view to the person who joined your waitlist. For a landing page with 400 visitors a month, that is a lot of overhead for a visitor count.
Does OperatorStack need a cookie consent banner like GA4 does?
Not for page-view analytics. OperatorStack identifies visitors with a rotating server-side hash instead of a persistent identifier cookie, so standard analytics does not require a consent popup the way GA4's _ga cookie does. Campaign attribution uses a first-party os_attribution cookie holding only the UTM labels you put in your own URLs.
How long does Google Analytics keep my data?
GA4 standard properties default to 2 months of user and event-level data retention, and the longest option on the free tier is 14 months. Aggregate reports persist, but the granular event data you would want to re-analyze later is deleted on that schedule unless you export it to BigQuery yourself.
Will ad blockers hide my traffic from Google Analytics?
Often, yes. The common blocklists used by uBlock Origin and Brave block google-analytics.com and googletagmanager.com by default, and a developer-heavy or privacy-conscious audience blocks at a higher rate than the general web. Your GA4 numbers undercount that traffic, which matters most when your first hundred visitors come from Hacker News or a subreddit.
::