Back to Blog
Substack
8 min read

Substack Analytics vs Google Analytics: Why the Numbers Don’t Match

Substack Analytics and Google Analytics 4 rarely match because they do not measure the same universe. Substack combines activity across publication pages...

By Ian Kiprono

Substack Analytics and Google Analytics 4 rarely match because they do not measure the same universe. Substack combines activity across publication pages, email, the Substack app, subscribers, and payments. GA4 records events when its tag loads on your publication pages, then organizes those events into users, sessions, and attribution reports. A gap between the dashboards is therefore expected. Use Substack for native views, opens, subscriptions, and revenue; use GA4 for web acquisition and on-site behavior. Compare one named metric, page, source, and date range at a time instead of forcing the headline totals to agree.

Narrareach’s Substack analytics workflow can place native publication data and supported GA4 referral evidence in the same review, while keeping their different scopes visible.

The short answer: each dashboard sees a different part of the reader journey

The fastest way to understand a mismatch is to ask what produced each number.

Question Use Substack Use GA4
How many times was a post viewed across web, email, and the Substack app? Total views Not comparable to GA4 web views
How many intended recipients opened a sent post? Recipients, opens, and open rate GA4 does not measure the native email/app open rate
Which pages attracted browser traffic? Post and Traffic reports Pages and screens, landing pages, and events
Where did a web session begin? Native source categories give useful but different evidence Traffic acquisition and Session source/medium
Where did a person first arrive from? Native subscriber and source reporting User acquisition and First user source/medium
How many people subscribed or paid? Native free and paid subscriber records Only the corresponding events GA4 received
Which search or AI referrals reached imported articles? Limited native source context GA4 referral data, which Narrareach can surface for supported sources

Neither system is automatically “right” for every question. The correct source depends on the event you are trying to understand.

A 2,400-view example that explains the gap

Imagine a post shows 2,400 total views in Substack over seven days. For this constructed example, the underlying activity consists of:

  • 1,100 email views
  • 700 Substack app views
  • 600 web views
  • 2,400 total views

GA4 reports 520 views for the same post and date range. Comparing 2,400 with 520 creates an apparent gap of 1,880 views, or 78.3%. That comparison is invalid because 1,800 of the Substack views occurred in email or the app, outside the web-page slice you are examining in GA4.

The useful comparison is 600 Substack web views against 520 GA4 views. The remaining difference is 80 views, or 13.3% of the Substack web figure. Even that is not automatically an error. The systems can differ in when the page view is counted, whether the GA tag loaded, whether browser or consent settings allowed collection, how repeated activity is handled, and which time zone or reporting window is active.

The numbers do not tell you which explanation accounts for each of the 80 views. They tell you where to investigate. First remove the 1,800 views that were never part of the comparable web scope. Then check configuration and definitions before judging the smaller remaining gap.

Seven reasons Substack and GA4 report different numbers

1. Substack includes surfaces that your GA4 web stream does not

Substack defines total post views as views across web, email, and the Substack app. Repeat views count: if one person views the post five times, the total rises by five.

Substack’s current Analytics settings load an outside measurement tool on the publication’s pages. That makes GA4 useful for page views, traffic sources, and conversions on those pages. It does not turn your web stream into a complete record of native email and Substack app activity.

This scope difference is usually the largest reason a Substack total exceeds a GA4 page figure. It is also why installing GA4 does not replace Substack’s post, audience, retention, and revenue reports.

2. A view, a user, and a session are different units

A Substack total view is an occurrence. GA4 can show views, users, active users, sessions, engaged sessions, and event counts. Each answers a different question.

Suppose one reader opens the same article three times across two browser visits. The activity might contribute three page-view events, two sessions, and one user in GA4, subject to its reporting identity and collection. It can also contribute multiple views in Substack. Comparing one system’s views with the other system’s users will produce a gap even if both observed the same browser activity.

Write down the unit before copying a number into a spreadsheet. “520” is not useful until it becomes “520 GA4 views,” “520 sessions,” or “520 active users.”

3. GA4’s acquisition reports use different scopes

GA4 itself can give different source totals for the same audience. Google’s comparison of User acquisition and Traffic acquisition explains why:

  • User acquisition uses dimensions such as First user source. It asks where a new user first came from.
  • Traffic acquisition uses dimensions such as Session source. It asks where a particular session began.

If a reader first discovers your publication through Google, then returns through an email and later types the URL, First user source can remain Google while the session-level report describes later visits differently. Google explicitly warns against comparing values across these scopes as though they were the same report.

Choose the report from the question. Use First user source when you care about initial discovery. Use Session source when you care about the visit that happened during the selected period.

4. Substack source labels and GA4 channels classify different evidence

Substack may credit a subscription to a recommendation, Note, post, or another network surface. GA4 may show a social, referral, organic, or direct web session near the same conversion. Both labels can be valid because they describe different parts of the path.

Consider a reader who sees a recommendation inside Substack, visits your profile, leaves, then returns from a link shared on LinkedIn and subscribes. A native subscriber report may preserve the network relationship, while GA4 records the web session’s source according to its own scope and attribution rules. The labels do not have to converge on one winner.

This distinction also explains why Substack can show strong network-driven subscriber growth while GA4 shows substantial social or direct traffic. One report is describing native acquisition evidence. The other is describing tagged website activity.

5. Not every subscription produces a GA4 event

Suppose Substack records 48 new subscriptions in a week while GA4 shows 31 corresponding key events. The 17-event difference is 35.4% of the Substack total.

Do not describe those 17 people as “missing subscribers.” The subscribers exist in Substack. What is missing is a matching GA4 event. Some subscriptions may have occurred through a native app or platform path rather than a tagged page. In other cases, the page loaded but the analytics event did not reach GA4, the event was not configured as expected, or the date and attribution settings differ.

Substack should remain the source of truth for the number of native free and paid subscriptions. GA4 adds evidence about the web journey for events it received.

6. Collection depends on the page and the tag loading

Substack says that after you save a Google Measurement ID, it loads the tool on publication pages. A GA4 ID must begin with G-; an old Universal Analytics UA- property ID will not work. Google can begin showing activity within minutes after a visitor loads a page, although Substack advises allowing 24 to 48 hours before expecting meaningful outside-tool data.

Collection can still vary by visit. A browser may prevent the request, a visitor’s consent choice may stop it, a page may close before the tag completes, or the Measurement ID may have been added after part of the comparison period. GA4 cannot reconstruct events it never received.

Check installation before interpreting a gap. Open the publication in a clean browser session, confirm that the correct web stream receives the visit, and verify that the post URL appears in Realtime or the relevant debugging view. Then wait for standard reports to process before comparing a full period.

7. Time zones, date boundaries, and processing change the comparison

A seven-day range must mean the same seven days in both tools. If one property uses Toronto time and another uses UTC, activity near midnight can land on different dates. A report viewed during the current day may also contain incomplete activity.

Use completed days, align the date range, record the property time zone, and wait for processing. If you are comparing a campaign launched at 11:30 p.m., inspect the adjacent dates rather than assuming the calendar boundary is identical.

Why Substack says “network” while GA4 says “social” or “direct”

The mismatch becomes easier to read when you separate traffic from subscriptions. If Direct, Direct to App, trackbacks, onboarding, or Substack other are unfamiliar, use this plain-English guide to Substack traffic sources before comparing the systems.

Suppose a 30-day report contains 1,200 GA4 sessions: 360 social, 300 direct, 240 organic search, 180 referral, and 120 email. Substack attributes 40 new subscriptions during the same period: 16 to its network, nine to Google, six to email, four to named outside sources, and five to Direct or another ambiguous category.

The GA4 table describes sessions. The Substack table describes subscriptions and their native source categories. Dividing 16 network subscriptions by 1,200 total GA4 sessions would create a 1.3% figure, but it would not be a defensible “network conversion rate.” The numerator includes a native acquisition category while the denominator excludes app and email activity and mixes unrelated web sources.

A safer analysis makes two separate statements:

  1. Social produced the largest share of measured web sessions: 360 ÷ 1,200 = 30%.
  2. The Substack network received the most native subscription credit: 16 ÷ 40 = 40%.

Those facts can coexist. To calculate a channel conversion rate, you need a numerator and denominator from a comparable path, scope, and observation window.

A reliable way to reconcile Substack and Google Analytics

Use a small reconciliation sheet instead of placing the two dashboard totals side by side.

Step 1: Write one question

Good questions are narrow:

  • How many tagged web views did this article receive?
  • Which source began sessions on this landing page?
  • How many native subscriptions did this post drive?
  • Which Google or AI referrals reached imported articles?

“How much traffic did I get?” is too broad because traffic can mean views, people, sessions, email opens, or app activity.

Step 2: Record the metric definition

For each number, record the system, exact metric, surface, page, and date range. A useful row reads: “GA4 Views, article URL, web stream, September 1–7, completed days.” Another reads: “Substack total views, same article, web/email/app, September 1–7.”

The labels expose mismatched scope before you start calculating.

Step 3: Match the closest available units

Compare web-page activity with web-page activity. Compare sessions with sessions. Compare native subscriber totals with native subscriber totals. Do not compare Substack total views with GA4 users or Substack opens with GA4 sessions.

If no equivalent exists, keep both figures and explain the difference. A clear non-comparison is more useful than a precise-looking ratio built from incompatible numbers.

Step 4: Calculate the gap without assigning a cause

For the 600-versus-520 web-view example:

(600 - 520) ÷ 600 × 100 = 13.3%

Record a 13.3% collection or definition gap for that comparison. Do not immediately label it “ad blockers,” “bots,” or “Substack inflation.” Test configuration, timing, filters, and repeat behavior first.

If the precise totals never converge but both systems rise after the same article and fall the following week, the direction can still support a decision. Compare four complete seven-day periods using the same definitions. A stable gap is easier to work with than a gap that suddenly doubles, which may indicate a setup or publishing change worth investigating.

How Narrareach fits without pretending the dashboards are identical

Narrareach brings available Substack article metrics, Notes performance, traffic sources, subscriber movement, and publishing history into one review workflow. Its current GA4 connection can also retrieve supported search and AI referral traffic to matched imported articles, including sources such as Google and supported AI assistants.

That creates a practical sequence:

  1. Start with Substack’s native subscriber, post, traffic, and revenue evidence.
  2. Use GA4 referral visits and views to understand the browser traffic reaching specific articles.
  3. Keep direct attribution, source labels, and timing correlations separate.
  4. Choose the topic, source, or article pattern that deserves another test.
  5. Turn that decision into an original or adapted draft, review it, schedule it, and measure the next equal period.

Narrareach does not make Substack and GA4 totals identical. It cannot recover events that neither platform recorded or identify a person behind an ambiguous Direct visit. Its value is keeping the evidence close to the content decision without collapsing unlike metrics into one score.

Open one post that has at least seven completed days of data. Write down its Substack total views, its web-only activity if available, GA4 views for the exact URL, GA4 sessions, and Substack-attributed subscriptions. Label every number with its surface and unit. The first mismatch you remove by correcting the labels is more valuable than hours spent trying to make the headline totals equal.

Related Posts

Ready to scale your content?

Write once, publish everywhere with Narrareach