Short answer

Analytics and ad platforms count different things at different moments. Consent refusals, ad blockers, bot filtering, lazy-loaded ad slots, time zones and the definition of a page all change the numbers. Compare trends and ratios (impressions per pageview, revenue per 1,000 pageviews) rather than raw totals.

Every publisher has opened GA4 and AdSense side by side and found numbers that do not match. That is normal. The goal is not to make them equal, but to know why they differ and which one to use for which decision.

The main reasons

CauseEffect
Consent refusalscookie-based analytics misses visitors who refuse; ad tags may still serve non-personalised ads
Ad blockersblock ads and often GA4; a lighter analytics script is blocked less
Bot filteringeach platform filters different bots
Lazy loadingan ad slot below the fold is only requested if the reader scrolls to it
Ad refreshone pageview can produce several impressions on refreshing slots
Time zonesAdSense days may use another time zone than your analytics property
Page definitionsingle-page apps and AMP pages can be counted differently

Pageviews are not ad requests

A pageview is one page loaded. An ad request is one slot asking for an ad. A page with five slots, two of them lazy-loaded, can create anything from three to eight requests depending on how far the reader scrolls. That is why "impressions per pageview" is a more useful number than either total.

Which number to trust for what

  • Revenue and RPM: your ad platform, because that is what you are paid on.
  • Editorial decisions (what to write, which source works): your analytics, because it counts readers, not slots.
  • Traffic trends: cookieless analytics, because it does not lose the visitors who reject consent.

How to compare properly

  1. Set the same time zone in both tools.
  2. Compare one week, not one day, and the same pages.
  3. Calculate impressions per pageview and revenue per 1,000 pageviews each week; watch the trend.
  4. When the ratio moves suddenly, look for a change: a new ad layout, a consent banner update, a template change.

Where PubPulse helps

Because PubPulse counts visitors who reject cookies and filters bots before storing data, its pageviews are usually closer to what your ad server sees than GA4's are. Use them as the denominator for page RPM.

Try PubPulse free for 30 days

Every feature, no pageview limit, no credit card. Paste one line of code and your first visits show up within seconds.

Start your free trial

or click around the live demo first, no sign-up needed