Google Analytics alternatives for WordPress
A WordPress analytics plugin records visits into your own database instead of sending them to Google, which removes the sampling quota and the retention ceiling and puts the raw rows on your server. You give up Google's ecosystem: Looker Studio, Ads attribution, and BigQuery at Google's scale.
| Dimension | Google Analytics 4 | A self-hosted WordPress plugin |
|---|---|---|
| Where visits are collected | Google's data collection centres | Your own web server |
| Where the rows are stored | Google's infrastructure | A table in your WordPress database |
| Sampling | Possible above 10 million events | None — reports are SQL over your rows |
| Event-level history | 2 or 14 months, selectable | As long as you keep the rows |
| Account needed | A Google account and a GA4 property | None |
| Price | Free at the standard tier | Free to $119 a year, depending on the plugin |
What actually changes, in Google's own words
Three documented behaviours account for most of why WordPress site owners go looking. Each is quoted below from Google's help centre rather than from a comparison article, including the ones that are less damning than the internet believes.
Reports can be sampled, and the threshold is published
Google states the limit plainly: "The quota limit for event level queries is 10 million events for standard Google Analytics properties and up to 1 billion events for Google Analytics 360 properties." Sampling happens "when the number of events used to create a report, exploration, or request exceeds the quota limit for your property", and Google's own surface comparison marks sampling as "Possible" for Reports, Explorations and the Data API. A plugin querying your own database has no equivalent: the report is a SQL query over every row you have kept.
One nuance worth knowing before you switch on this argument: even unsampled, Google uses "HyperLogLog++ (HLL++) to estimate exact distinct counts for most frequently used metrics such as users and sessions count". Your user and session numbers are estimates by design, not only when sampling triggers.
Event-level history is capped, but not in the way most articles claim
On a standard property, user-level and event-level data can be retained for "2 months" or "14 months"; the longer options, "26 months", "38 months" and "50 months", are marked "360 only". Age, gender and interest data is always held for two months regardless of the setting, and a property that grows into Google's Large or XL categories is "limited to 2 months" automatically.
Here is the part that comparison pages routinely get wrong, and that a GA4 user will challenge you on: the cap does not delete your reporting. Google is explicit that "the data retention setting does not affect standard aggregated reports" and "only affects explorations and funnel reports". So the honest statement is narrower than the popular one — after 14 months you lose the ability to explore the raw events, not the trend line.
Collection and processing happen on Google's servers
Google describes the path: "When Analytics establishes a connection with the closest available Google data collection center, measurement data is sent to Analytics over an encrypted HTTPS connection", after which "the data is further encrypted before it's forwarded to Analytics processing servers". Google names its own role too: "Google operates as a data processor for Google Analytics", with customers as "data controllers who retain full rights over the collection, access, retention, and deletion of their data at any time."
You can pull raw event rows back out — the free tier includes a BigQuery export documented at "Daily export: 1 M events" per day, and BigQuery is the one surface Google marks as never sampled. What no tier offers is keeping the data on your own server at the point of collection: Google Analytics is a hosted service, and Google publishes no self-hosted or on-premise deployment option. That single architectural fact is what every plugin on the shortlist below changes.
The shortlist
Four plugins worth a serious look, with install counts and ratings read from wordpress.org and prices from each vendor's own pricing page on August 31, 2026. Three store visits in your WordPress database. One does not, and is on the list because it solves a different problem honestly.
| Plugin | Installs | Rating | Data lives in | Paid entry price | Best for |
|---|---|---|---|---|---|
| SlimStat Analytics | 70,000+ | 4.8 | Your WordPress database | $39/yr for Pro, 1 site | The owner-operator who wants the visit record itself |
| WP Statistics | 600,000+ | 4.1 | Your WordPress database | $119/yr for Premium, 1 site | Content and marketing teams reporting on posts and campaigns |
| MonsterInsights | 2,000,000+ | 4.5 | Google Analytics — a GA4 property is required | $99.50 first year, then $199 | Staying on GA4 but reading it inside wp-admin |
| Matomo for WordPress | 100,000+ | 4.6 | Your WordPress database | Free, self-hosted | Segments, attribution and multi-site reporting depth |
MonsterInsights is on the list because a great many people who search for a Google Analytics alternative do not actually want to leave GA4 — they want to stop opening a second website to read it. MonsterInsights is a connector for exactly that: its own documentation lists "You've created a Google Analytics property" as a prerequisite, and its data still lives in Google's infrastructure. If that is what you want, it is the mature answer, and its published price is $99.50 for the first year against a regular $199, with the vendor's own footnote reading "all renewals are at full price."
What you give up by leaving
A page selling you a plugin owes you this section. Four things get worse, and for some sites one of them is disqualifying:
- Advertising attribution. GA4 links to Google Ads natively. If you buy traffic through Google and optimise on conversions, nothing self-hosted replaces that loop.
- Looker Studio and the wider Google stack. Dashboards, Search Console joins and BigQuery at Google's scale all assume GA4 as the source.
- Cross-device and cross-platform journeys. A first-party plugin sees your WordPress site. It does not see your app, and it does not follow one person across devices.
- Your server carries the load. Analytics that lives in your database grows your database. One row per pageview is the trade for owning the rows, which is why retention and auto-purge is a setting worth configuring on day one rather than a year in.
Where SlimStat fits
SlimStat has been on wordpress.org since 2010 and runs on 70,000+ sites, rated 4.8 out of 5 across 817 reviews — more reviews than most of the newer privacy-focused plugins have between them. It is built for one reader in particular: the person who wants the visit record itself, not a summary of it.
Every pageview lands as a row in wp_slim_stats in your own database, with the
page, the referrer, the browser, the country and the outbound links that visitor followed.
The reports in wp-admin are SQL queries over that table, so nothing is sampled and nothing
is estimated. Geolocation runs from a local database — DB-IP by default, MaxMind with a
free licence key, or Cloudflare's own headers if your site
is already proxied.
Two settings matter more than the rest when you arrive from GA4. Tracking Mode chooses between recording during the PHP request and recording from the browser, which is the setting a cached site has to get right. And the Ad-Blocker Bypass transport recovers visits that a blocker would otherwise drop before they reach the server — the share of traffic GA4 never sees at all. Both are in the free plugin; the full free feature list has the rest.
What the free plugin gives you, and what Pro adds
| Capability | Free | Pro |
|---|---|---|
| Real-Time Report | Blurred preview | Live chart, minute by minute |
| Admin Bar Widget | Placeholder figures, blurred | Your real numbers, every screen |
| Email Reports | Not available | Daily, weekly or monthly |
| Goals & Funnels | 1 goal, no funnels | 5 goals and 3 funnels |
| Heatmaps | Not available | Overlay on any page |
| Custom Database | WordPress database only | Any MySQL-compatible database |
| Data Export | Button prompts an upgrade | CSV download, tab-delimited option |
| User Overview | Report does not exist | Every registered user, with history |
| Advanced Whois | Links out to a third-party lookup | Detail panel inside your admin |
| Network Analytics | One site at a time | Aggregated across the network |
Pro is a one-year licence for updates and support, on top of the free plugin. The free plugin keeps working when it lapses. See Pro pricing.
How to switch without losing the year you already have
- Install SlimStat from the plugin directory and leave Google Analytics running. The two do not conflict, and a fortnight of overlap tells you how far apart the numbers are before you rely on either.
- Export what you need out of GA4 first. Explorations only reach back as far as your retention setting allows, so this is the step that is genuinely irreversible.
- Set Tracking Mode to Client if any page cache sits in front of your site, then clear the cache so the tracking code reaches newly cached pages.
- Exclude your own team at Settings, so your editors do not become your best-performing audience segment. The exclusion settings cover logged-in users, IP ranges, bots and whole countries.
- Set a retention window that matches what you actually review. Analytics you never look at past 90 days does not need three years of rows.
- Once the two sets of numbers stop surprising you, remove the GA4 tag. If you keep it, keep it deliberately — the consent obligations of running both are the obligations of the stricter one.
Common questions
Will the numbers match Google Analytics?
No, and any plugin promising they will is not being straight with you. A server-side or first-party tracker records visits that ad blockers stop GA4 from ever seeing, so the totals usually come out higher. Sessions are defined differently as well. Compare direction and proportion between the two, not absolute figures.
Does a self-hosted plugin remove the need for a cookie banner?
That depends on your configuration and your jurisdiction, and this is not legal advice. What is a matter of fact is that SlimStat can be configured to anonymise or hash IP addresses, to honour Do Not Track, and to require consent before tracking at all through the WP Consent API or its own banner. What obligations follow from a given configuration is a question for someone qualified to answer it.
How much will my database grow?
One row per pageview, so it scales with traffic rather than with time. A site taking 100,000 pageviews a month writes 100,000 rows a month, and the auto-purge setting is what keeps that bounded — see retention and auto-purge for the settings and what each one does to old records.
Is the free plugin enough?
For most single sites, yes. The access log, real-time report, geolocation, outbound-link tracking, exclusion filters and one conversion goal are all free. $39 a year for Pro buys five goals, three funnels, heatmaps, scheduled email reports, the registered-user report and CSV export.
Own the record, not a summary of it
SlimStat Pro is $39 billed annually for one site, with all ten Pro features included. 817 reviews on wordpress.org, rated 4.8 out of 5.
See SlimStat Pro pricingWant to try it against your current setup first? Install the free plugin and run both for a fortnight.