Turf Stats
Self-hosted, cookieless analytics: page views, visitors, clicks, searches, 404s and bots - all stored in your own database, no external services.
Solid choice
Turf Stats is a solid plugin choice in 2026, with a few things worth checking first. It runs on 30+ sites and was last updated 1 month ago, and scores 63/100 on our health check.
- Tested with the latest WordPress (7.1)
- Small user base (30+ active installs)
- Very few reviews so far
How does it stack up?
Side-by-side on installs, updates, ratings & supportDaily downloads
Download spikes usually follow a new release — each site that auto-updates counts as a download.
Rankings
Where Turf Stats stands todayWordPress.org search rankings
Live position in the plugin search, top 100| Keyword | Position |
|---|---|
| analytics | >100 |
| cookieless | #29 |
| page views | >100 |
| privacy | >100 |
| statistics | >100 |
Version adoption
Share of active sites per release.
About Turf Stats
From the official readme · v1.26.0Description
Turf is a self-hosted, cookieless analytics plugin. No Google Analytics, no
Jetpack, no external network calls – everything is measured and stored in your
own WordPress database.
Why Turf
- Cookieless. Visitor deduplication uses a one-way hash of IP + user-agent,
never a cookie and never the raw IP address. - Self-hosted. All data lives in your own database; nothing is sent to any
third party. - Zero configuration. Every public post type and taxonomy is tracked
automatically, including ones you add later.
What it tracks
- Page views (deduplicated and raw), unique visitors, views per visitor, and
average visit duration - Device, browser, operating system, language, and country (via Cloudflare’s
header when available – no GeoIP lookups) - Referrers / traffic sources, UTM campaign parameters, and automatic outbound
link tracking (full destination URL + the page clicked from) - New vs. returning visitors, scroll depth, and reading time
- On-site search terms, including zero-result searches
- Visitor routes (page-to-page transitions), landing pages, and a bounce-rate
proxy – all reconstructed from sessions - Cache offload: how much traffic is served by a page cache (SiteGround,
Cloudflare, …) instead of hitting WordPress - 404 hits, comments per period, editorial content activity, per-author stats
- Bots & LLM crawlers (Googlebot, GPTBot, ClaudeBot, …) – tracked server-side
and kept separate from human visitor numbers - WooCommerce funnel (views, add to cart, checkout) and form submissions
(Contact Form 7, Gravity Forms) when those plugins are active
The admin pages use native WordPress postboxes: collapsible, draggable,
hideable via Screen Options, and styled by your admin color scheme. The
interface is English and ships with a full Dutch (nl_NL) translation.
Installation
- Install and activate the plugin.
- That’s it – views start counting immediately for every public post type and
taxonomy. Find the reports under the “Statistics” menu in wp-admin.
Optional extras (a visible view counter, click tracking on specific elements,
social-share links, importing historical Jetpack/entry-views view counts via
the “Statistics > Import” admin page or WP-CLI) are documented in the plugin’s
README on GitHub.
Frequently asked questions
Does Turf set cookies or require a consent banner?
Turf sets no cookies and sends no data to any external service. Deduplication uses a one-way hash of IP + user-agent; the raw IP is never stored. It is designed to fit a “legitimate interest” basis for first-party, aggregate analytics – but that is not legal advice: check with whoever maintains your privacy policy.
What data does Turf collect, and where does it go?
Per page view Turf stores, in your own database only: a one-way visitor hash, timestamp, the page viewed, device type / browser / OS family (parsed from the user-agent), language, country code (only if Cloudflare provides it), referrer hostname, UTM parameters, scroll depth, and reading time. Raw event rows are pruned automatically after 18 months (filterable); aggregate totals are kept. Nothing is ever transmitted off your server.
Why are Turf’s numbers lower than Jetpack’s or a raw hit counter’s?
“Views” is deduplicated: a repeat view of the same page by the same visitor within 30 minutes doesn’t count again (the same default Google Analytics and Matomo use). The separate “Raw views” number counts every page load, for an apples-to-apples comparison with hit-counting tools.
Does it work with page caching?
Yes. Tracking runs client-side, so cached pages are still counted. Turf even reports how much of your traffic is served from cache.
Where is the country data coming from?
From Cloudflare’s CF-IPCountry request header, if your site is behind Cloudflare. Turf deliberately does not call any geolocation API – that would mean sending visitor IPs to a third party. Without Cloudflare, country stays empty unless you hook up your own local database via the turf_visitor_country filter.
Does uninstalling remove my statistics?
By default, no – analytics history is precious, so the data survives an uninstall/reinstall. To remove everything on uninstall, add define( ‘TURF_REMOVE_DATA_ON_UNINSTALL’, true ); to wp-config.php (or set the turf_remove_data_on_uninstall option to 1) before deleting the plugin.
Where do I suggest a feature or report a bug?
On the plugin’s GitHub repository: https://github.com/fbloemhof/turf-stats/issues
Changelog
Listing/packaging update only (screenshots); no functional changes.
1.26.0
- Added “Load time trend” and “Time/visit trend” daily line charts to the
Analysis page, next to the existing peak-hours heatmap. - Added a “PWA vs. browser” breakdown to the Statistics page: detects
whether a pageview ran inside an installed PWA (Add to Home Screen /
Install app) or a normal browser tab. This is a rough estimate of active
PWA usage, not a hard install count – browsers don’t report installs to
the server.
1.25.2
- Reverted 1.25.1: “mln” for millions reads fine on Dutch sites too, so
the “k”/”M” abbreviation is back to a plain, always-on suffix instead
of going through translation.
1.25.1
- Fixed: the abbreviated view/visitor counts added in 1.25.0 always showed
the Dutch “mln” for millions, even on English (and other) sites. The
“k”/”M” suffixes are now translatable, so non-Dutch locales show “1.2M”
instead of “1,2 mln”.
1.25.0
- Large view/visitor counts are now shown abbreviated (“12,3k”, “1,2 mln”)
in the totals tiles, the [turf_stats] shortcode widget, and the view
count shown to visitors on single posts – so big numbers keep fitting
their fixed-width space. Tables and CSV exports still show exact figures. - Fixed the “Go to date” button showing the Dutch word “Toon” instead of
“Show” for every locale except Dutch.
1.24.0
- The Statistics page now loads noticeably faster: most boxes (device/
browser/OS/country breakdowns, sources, UTM campaigns, top pages/terms,
peak hours, etc.) load their data in the background right after the page
appears, instead of making you wait for every query to finish first. - The heaviest stats queries are now cached for a few minutes, so reloading
the page or switching periods no longer repeats the same slow database
query every time. - Visual refresh of the Statistics page: breakdown lists, the totals tiles,
the daily chart, and report tables (top pages, top search terms, 404s,
clicks, etc.) now share one consistent, more compact look with a hover
highlight per row and a full-width bar behind each breakdown item instead
of a separate small bar – including the Bots page’s breakdown, which now
matches the rest of the plugin instead of using its own older style. - New sortable “Views” column on the posts/pages list (and any other tracked
post type), so you can see view counts without leaving the list. - Fixed the “From/To” (session routes) and outbound-links tables showing
their second column right-aligned instead of left-aligned. - Fixed the “Show more” toggle not working on boxes that load their data in
the background.
1.23.0
- Custom date ranges: pick any start/end date instead of just the fixed
presets, and save frequently-used ranges by name to jump back to them
later. - CSV export for the overview totals, top pages, top referrers,
device/browser/OS breakdown, search terms, and 404s boxes – respects
whatever period (including a custom range) is on screen. - Weekly/monthly email report: a summary of your stats sent to one or more
addresses on a recurring schedule, with a “Send test email now” button to
check formatting/delivery without waiting for the schedule. - Fixed several period-filtered boxes (404s, per-author stats, click and
outbound-link breakdowns, WooCommerce funnel, peak-hours heatmap) silently
including data all the way through “now” instead of stopping at the end
of “Yesterday” or a picked date – only affected those two period choices,
not the day/week/month tabs. - Dutch (nl_NL) translation updated for all new strings.
For developers
Is this your plugin? Show off the numbers.
Add a live badge to your site, docs or GitHub README. It updates on its own — no account needed.
Best Turf Stats alternatives
All analytics plugins →FAQ
Turf Stats: quick answers
Straight answers, pulled from live WordPress.org data.
Live data from WordPress.org · checked Oct 17, 2026
Is Turf Stats free?
Yes. Turf Stats is free to download and use from the official WordPress.org plugin directory.
Is Turf Stats safe to use in 2026?
Turf Stats is a solid plugin choice in 2026, with a few things worth checking first. It runs on 30+ sites and was last updated 1 month ago, and scores 63/100 on our health check.
How many websites use Turf Stats?
Turf Stats is active on 30+ WordPress websites and has been downloaded 1,453 times since it launched in July 2026. It was downloaded 358 times in the last 30 days.
Does Turf Stats work with WordPress 7.1?
Yes. The developer has tested Turf Stats up to WordPress 7.1.3, the latest release. It requires WordPress 6.0 or newer.
What PHP version does Turf Stats need?
Turf Stats requires PHP 7.4 or higher. Most hosts run PHP 8.x today, so it works on any modern WordPress hosting.
When was Turf Stats last updated?
The latest version, 1.26.0, was released on September 9, 2026 (1 month ago).
Who makes Turf Stats?
Turf Stats is developed and maintained by Freek.
What are the best alternatives to Turf Stats?
The most popular alternatives to Turf Stats are Site Kit by Google (5M+ installs), MonsterInsights (2M+ installs) and WP Statistics (500K+ installs).
Powered by PageForge
Want thousands of pages that rank like these? Build them in an afternoon.
This directory runs on the same engine as PageForge. Turn any spreadsheet, CSV or API into thousands of fast, SEO-ready WordPress pages — with schema, internal links and AI-written copy baked in.
- CSV, Google Sheets & API data sources
- AI content, schema & internal links per page
- Works with Elementor, Gutenberg, Yoast & Rank Math
- Free on WordPress.org — no credit card


