GA Insights Revenue Plateau Investigation
Revenue peaked around June-August 2021 and began a steady decline from September 2021 onward. After forensic analysis of 252+ commits (May-Sep 2021), 4 parallel deep-dive investigations, and surrounding context, the evidence points to a perfect storm of 10 compounding factors.
timeline
title Revenue Trajectory vs Key Events
section Growth Phase
Feb 2021 : LTD infrastructure built
Mar 2021 : Stack Commerce launches : 67 commits
Apr 2021 : Peak dev velocity : 167 commits : Onboarding + pricing focus
section Peak & Turning Point
May 2021 : Trial extended 10-15 days : Free users get premium access : Downgrade logic tightened
Jun 2021 : REVENUE PEAKS : Facebook + Search Console removed : Agency protections removed
section Decline Phase
Jul 2021 : Weld integration begins : Dev pivots to infrastructure : 55% commit drop
Aug 2021 : Domain redirect www-app : Weld Part 2 rewrites core : 3718-line change
section Firefighting
Sep 2021 : Revenue metrics SERVER ERROR : Data sources clearing silently : Billing jobs DISABLED
Oct 2021 : Self-inflicted DOS : Google Auth broken TWICE : Null exceptions
Nov 2021 : Welcome wizard gutted : Growth playbook abandonedImpact Assessment
pie title Root Cause Contribution to Revenue Decline
"LTD Hangover" : 35
"Product Instability (Weld)" : 20
"Broken Signup (Domain Redirect)" : 15
"Facebook/Console Removal" : 8
"Pricing Self-Sabotage" : 7
"GA4 API Breaking Change" : 5
"Dev Focus Shift" : 4
"Silent Data Clearing Bug" : 3
"Billing Jobs Disabled" : 2
"Wizard Gutted" : 1FINDING 1: Stack Commerce Lifetime Deal Hangover
Impact: HIGH (35%) — The revenue spike was promotion-driven, not organic growth
The revenue spike from March-August 2021 correlates precisely with a Stack Commerce / Lifetime Deal campaign:
| Date | Commit | What Happened |
|---|---|---|
| 2021-02-23 | a99fdc4b0 |
Redemption keys infrastructure built |
| 2021-03-02 | 117038c96 |
Lifetime deal key redemption launched |
| 2021-03-08 | 5d233b62e |
Stack Commerce key redemption merged |
| 2021-04-22 | 6fda18683 |
"hide free ahead of Stack commerce deal" |
| 2021-04-22 | 24f9efb3a |
"remove book a call, improve onboarding, Stack commerce links" |
| 2021-04-29 | 734f70d47 |
"fixes for lifetime deals" |
| 2021-05-10 | 5979ef1bd |
"more fixes to lifetime plans" |
graph LR
subgraph LTD["Stack Commerce LTD Lifecycle"]
direction LR
A["Feb: Build<br/>redemption keys"] --> B["Mar: Launch<br/>deal"]
B --> C["Apr: Peak<br/>deal sales"]
C --> D["May: Deal<br/>winds down"]
D --> E["Jun+: No new<br/>LTD pipeline"]
end
subgraph Revenue["Revenue Effect"]
direction LR
R1["One-time<br/>payments spike"] --> R2["No recurring<br/>conversions"]
R2 --> R3["Pipeline<br/>dries up"]
R3 --> R4["Return to<br/>organic baseline"]
end
LTD --> Revenue
style A fill:#e8f5e9
style B fill:#e8f5e9
style C fill:#fff9c4
style D fill:#fff3e0
style E fill:#fce4ec
style R1 fill:#e8f5e9
style R2 fill:#fff9c4
style R3 fill:#fff3e0
style R4 fill:#fce4ecThe explosive growth was driven by the Stack Commerce / Lifetime Deal promotion. LTD users pay once but never convert to recurring subscriptions, create support burden without ongoing revenue, and artificially inflate metrics during the promotion period. When the deal ends, the new customer pipeline dries up unless organic acquisition compensates.
The revenue "plateau" may actually be the natural baseline after a one-time LTD promotion spike ended.
FINDING 2: Development Focus Shifted Away from Growth
Impact: HIGH (amplifier) — The team stopped investing in the growth engine
graph TD
subgraph growth["Mar-Apr 2021: GROWTH Phase (167 commits/mo)"]
G1["29 pricing/plan commits"]
G2["13 browse page improvements"]
G3["8 onboarding improvements"]
G4["Amplitude + UserFlow analytics"]
G5["Template onboarding + deep linking"]
end
subgraph plateau["Jul-Oct 2021: PLATEAU Phase (37 commits/mo)"]
P1["30 Weld integration commits"]
P2["32 Alert Builder commits"]
P3["91 Report Builder touches"]
P4["0 onboarding commits"]
P5["0 pricing/conversion commits"]
end
growth -->|"Dev focus shifts"| plateau
style growth fill:#e8f5e9
style plateau fill:#fce4ec
style G1 fill:#e8f5e9
style G2 fill:#e8f5e9
style G3 fill:#e8f5e9
style G4 fill:#e8f5e9
style G5 fill:#e8f5e9
style P1 fill:#fce4ec
style P2 fill:#fce4ec
style P3 fill:#fce4ec
style P4 fill:#fce4ec
style P5 fill:#fce4ecThe team stopped investing in the growth engine (onboarding, browse gallery, plan selection, conversion optimization) and shifted to feature development. This is a classic SaaS trap: building features for existing users while neglecting the acquisition funnel.
FINDING 3: Domain Redirect Potentially Broke All Signups
Impact: HIGH (15%) — Possible single smoking gun. OAuth callback changed, potentially killing all new registrations.
August 11-13, 2021: www.ga-insights.com to app.ga-insights.com
| Date | Commit | Change |
|---|---|---|
| 2021-08-11 | 731fb57e9 |
OAuth callback URL changed from www to app subdomain |
| 2021-08-12 | c7363e3fe |
Dashboard redirect: www to app in Global.asax.cs |
| 2021-08-13 | 03506dbfd |
Account page redirect: www to app |
| 2021-08-13 | f842ba236 |
Teams page redirect: www to app |
sequenceDiagram
participant U as New User
participant W as www.ga-insights.com
participant A as app.ga-insights.com
participant G as Google OAuth
Note over U,G: BEFORE August 11 (Working)
U->>W: Visit & click Sign Up
W->>G: OAuth redirect (callback: www)
G->>W: Auth code callback to www
W->>U: Account created
Note over U,G: AFTER August 11 (Potentially Broken)
U->>W: Visit & click Sign Up
W->>G: OAuth redirect (callback: app)
G--xA: REDIRECT_URI_MISMATCH if app not registered in Google Console
Note over G: Google rejects callback
A--xU: User sees error or blank page
Note over U: User leaves, never comes backThis changed the Google OAuth callback URL — the critical path for every new user signup. Google OAuth requires redirect URIs to be pre-registered in the Google Cloud Console. If app.ga-insights.com wasn't added there, all new Google Auth signups would fail with a redirect_uri_mismatch error.
This could be the single most impactful finding. A broken signup flow = zero new customers.
FINDING 4: Facebook and Search Console Removed
Impact: HIGH (8%) — Core data sources deleted from product at revenue peak
Commit 0e0fd22be - June 17, 2021
A massive 32-file, 4,792-line change that deleted Facebook/Meta and Search Console integrations entirely: graphs, reports, report tabs, alerts, and connections.
For a SaaS analytics product, removing data sources is removing core value. Any customer relying on Facebook or Search Console reporting would immediately lose functionality. The timing (June 17) aligns with the revenue peak — effects would compound as affected users discovered their reports were gone.
FINDING 5: Data Sources Clearing Without User Interaction
Impact: MEDIUM-HIGH — Silent bug causing users' reports to go blank
Commit 8daa72fd2 - September 24, 2021
Users' connected data sources were being silently disconnected. The fix added extensive telemetry/logging (stack traces) to track the issue, which means:
- The bug was already happening for an unknown period before September
- They couldn't reproduce it easily
- Users would see their reports go blank with no explanation
The issue was in GoogleAuthorizationService.cs — during token refresh, connection.Account.WebProperties were being cleared. Google Analytics connections would randomly lose their configured properties.
This is the kind of silent bug that causes churn without users complaining — they just leave.
FINDING 6: Weld Integration Catastrophically Destabilized the Product
Impact: MEDIUM-HIGH (20%) — Core report builder rewritten and broken for months
gantt
title Weld Integration Bug Cascade (Aug-Oct 2021)
dateFormat YYYY-MM-DD
axisFormat %b %d
section Weld Rollout
Weld Part 2 - 3718 line rewrite :crit, 2021-08-17, 1d
Legacy report handling (576+644 lines) :crit, 2021-09-08, 1d
section Bugs Discovered
ReferenceError + SyntaxError :active, 2021-08-25, 1d
Metric dropdown broken :active, 2021-09-13, 1d
REVENUE METRICS SERVER ERROR :crit, 2021-09-17, 1d
UI state corruption on clicks :active, 2021-09-20, 1d
Token JSON serialization broken :active, 2021-09-22, 1d
Data sources clearing silently :crit, 2021-09-24, 1d
Google Auth fix 1 :active, 2021-10-09, 1d
Self-inflicted DOS attack :crit, 2021-10-23, 1d
Null exception in metrics :active, 2021-10-28, 1d
Google Auth fix 2 (AGAIN) :active, 2021-10-28, 1dThe Aug 17 Weld Part 2 commit (3,718 lines in one file) was the inflection point. From that date through October, the team was in perpetual firefighting mode. The commit message on September 17 explicitly says: "Revenue ascending isn't loading (server error)". For a reporting product, having revenue metrics return server errors is catastrophic.
Two separate Google Auth fixes 19 days apart show recurring auth failures. The Oct 23 "removing the DOS attack :) :)" commit reveals a self-inflicted performance issue.
FINDING 7: Pricing and Billing Self-Sabotage
Impact: MEDIUM (7%) — 11 changes systematically weakened every conversion mechanism
| Date | Commit | Change | Revenue Impact |
|---|---|---|---|
| 2021-05-05 | e316140f9 |
Trial extended 10 to 15 days | 50% more free time |
| 2021-05-12 | e0c013ea2 |
Marketing/Social tabs hidden from free tier | Reduced perceived value |
| 2021-05-20 | cf2544b23 |
Removed restriction on free users accessing premium reports | Premium content free |
| 2021-05-21 | 4c71c0516 |
Downgrade checks expanded to alert connections | More forced downgrades |
| 2021-05-22 | 9b85dc913 |
Free plan hidden from trial users | Can't find free tier |
| 2021-05-30 | 461913f8c |
Enterprise threshold raised 900K to 1M visitors | Fewer auto-upgrades |
| 2021-05-31 | 9865d2cac |
Trial expiry messaging: every 8 days to every 14 days | 43% less pressure |
| 2021-06-02 | 9532e121f |
Agency plan downgrade protection removed | Auto-downgrades |
| 2021-06-02 | ba1337c84 |
Free users can view premium reports (soft restriction) | Less upgrade motivation |
| 2021-07-22 | 1ded0154b |
Further agency downgrade protection removed | More revenue loss |
| 2021-09-30 | 9e1193be3 |
checkPlans and checkSubs DISABLED | Billing validation stopped |
graph TD
subgraph changes["Cumulative Pricing Changes (May-Sep 2021)"]
T["Trial: 10→15 days<br/>+50% free time"] --> C["Conversion<br/>Weakened"]
M["Messaging: 8→14 day<br/>reminders, owner only<br/>-43% pressure"] --> C
F["Free users access<br/>premium reports"] --> C
A["Agency downgrade<br/>protection removed"] --> C
E["Enterprise threshold<br/>900K→1M visitors"] --> C
B["checkPlans/checkSubs<br/>DISABLED Sep 30"] --> C
end
C --> R["Revenue<br/>Decline"]
style T fill:#fff3e0
style M fill:#fff3e0
style F fill:#fce4ec
style A fill:#fce4ec
style E fill:#fff3e0
style B fill:#fce4ec
style C fill:#fce4ec
style R fill:#fce4ecEach change alone is small. Together, they systematically dismantled every conversion and retention mechanism.
FINDING 8: Google GA4 API Breaking Change
Impact: MEDIUM (5%) — External API change with a 5-month response gap
Commit a538ee54f - September 16, 2021
The only GA4 commit in 5 months. Google changed the GA4 API from v1alpha to v1beta, and the Entity object was deprecated. GA Insights only had 14 GA4-related commits in all of 2021, with a 5-month gap (April to September). During this gap, GA4 was likely broken or degraded for users while the broader industry was rapidly adopting GA4.
FINDING 9: checkPlans and checkSubs Disabled
Impact: MEDIUM — Billing lifecycle fundamentally broken
Two critical daily batch jobs were disabled with [Disable()] attribute on September 30, 2021. CheckPlans (5 AM daily) and CheckSubs (4 AM daily) were responsible for validating user subscriptions and plan states. Whether they were disabled because they were broken or causing problems, this represents a fundamental change to the billing lifecycle.
FINDING 10: Welcome Wizard Gutted
Impact: LOW — Cemented the decline by abandoning the growth playbook
On November 16, 2021 (f7662d42a), the welcome wizard was stripped of browse card selection, website setup, lifetime key redemption, and card-based redirects from Google OAuth. The team gave up on the acquisition/onboarding funnel that drove the growth phase.
The Compounding Cascade
flowchart TD
LTD["LTD Campaign Ends<br/>(May-Jun 2021)"] --> NoNewUsers["New User Pipeline<br/>Dries Up"]
DevShift["Dev Focus Shifts<br/>to Infrastructure<br/>(Jul 2021)"] --> NoGrowth["Zero Growth/<br/>Conversion Work"]
DomainRedirect["Domain Redirect<br/>www→app<br/>(Aug 11-13)"] --> BrokenSignup["OAuth Signup<br/>Potentially Broken"]
WeldRewrite["Weld Integration<br/>3718-line Rewrite<br/>(Aug 17)"] --> Bugs["Cascading Bugs:<br/>Server errors, state<br/>corruption, data loss"]
FBRemoval["Facebook + Console<br/>Removed<br/>(Jun 17)"] --> LostValue["Core Value<br/>Removed"]
PricingChanges["11 Pricing/Billing<br/>Changes<br/>(May-Sep)"] --> WeakerConversion["Conversion<br/>Mechanisms<br/>Weakened"]
NoNewUsers --> Decline["REVENUE<br/>DECLINE"]
NoGrowth --> Decline
BrokenSignup --> Decline
Bugs --> Decline
LostValue --> Decline
WeakerConversion --> Decline
GA4["GA4 API<br/>Breaking Change<br/>(Sep 16)"] --> Bugs
BillingDisabled["checkPlans/Subs<br/>DISABLED<br/>(Sep 30)"] --> WeakerConversion
style LTD fill:#fff3e0
style DevShift fill:#fff3e0
style DomainRedirect fill:#fce4ec
style WeldRewrite fill:#fce4ec
style FBRemoval fill:#fff3e0
style PricingChanges fill:#fff3e0
style GA4 fill:#e1f5fe
style BillingDisabled fill:#fce4ec
style Decline fill:#fce4ec
style NoNewUsers fill:#fff3e0
style NoGrowth fill:#fff3e0
style BrokenSignup fill:#fce4ec
style Bugs fill:#fce4ec
style LostValue fill:#fff3e0
style WeakerConversion fill:#fff3e0The Smoking Gun?
If forced to pick one thing most likely to have caused the sharpest revenue impact, it is Finding 3: The domain redirect on August 11-13, 2021. Changing the Google OAuth callback URL can silently break every new signup without any error visible to the team. Google returns the error to the user, not to the server. Monitoring shows zero errors, but zero users can sign up.
The second most likely smoking gun is Finding 4: Removing Facebook and Search Console on June 17 — right at the peak.
Recommendations for Validation
- Check Google Cloud Console OAuth settings — Was
app.ga-insights.comadded as an authorized redirect URI? When? - Check new user signups by day — Plot signups around August 11-13. A sudden drop to zero would confirm Finding 3.
- Check Stripe/ChargeBee data — Compare LTD redemptions vs. organic signups by month to confirm the LTD thesis.
- Check trial-to-paid conversion rates — A drop in Jul-Sep 2021 would confirm product stability issues drove churn.
- Check support tickets — Bug reports about "reports not loading" or "data disappeared" would confirm the silent bugs.
- Check Facebook/Console user count — How many users relied on these integrations before June 17?
- Check churn reasons — Look for spikes in "doesn't work" or "missing features" in ChargeBee cancellation data.
- Check GA4 property counts — How many users had GA4 properties that stopped working?
Investigation performed via forensic git analysis of 252+ commits across May-September 2021, with 4 parallel deep-dive investigations into pricing/billing, UX/onboarding, breaking bugs, and external API changes.