By rachel davey

GA Insights Revenue Plateau Investigation

By rachel davey · Created Mar 5, 2026 public

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 abandoned

Impact 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" : 1

FINDING 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:#fce4ec

The 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:#fce4ec

The 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 back

This 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:

  1. The bug was already happening for an unknown period before September
  2. They couldn't reproduce it easily
  3. 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, 1d

The 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:#fce4ec

Each 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:#fff3e0

The 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

  1. Check Google Cloud Console OAuth settings — Was app.ga-insights.com added as an authorized redirect URI? When?
  2. Check new user signups by day — Plot signups around August 11-13. A sudden drop to zero would confirm Finding 3.
  3. Check Stripe/ChargeBee data — Compare LTD redemptions vs. organic signups by month to confirm the LTD thesis.
  4. Check trial-to-paid conversion rates — A drop in Jul-Sep 2021 would confirm product stability issues drove churn.
  5. Check support tickets — Bug reports about "reports not loading" or "data disappeared" would confirm the silent bugs.
  6. Check Facebook/Console user count — How many users relied on these integrations before June 17?
  7. Check churn reasons — Look for spikes in "doesn't work" or "missing features" in ChargeBee cancellation data.
  8. 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.