EP Analytics
EP Analytics gives you a real analytics dashboard for your PageMotor site with none of the privacy baggage. No cookies, no JavaScript tracking pixel, no third-party scripts, no data leaving your server. Your visitors don’t need to click a consent banner because there is nothing to consent to.
Published by ElmsPark Studio.
Overview
Section titled “Overview”Page views are recorded server-side during register_shutdown_function(), which runs after the response has already been sent to the browser. Tracking adds zero latency to your pages.
Data storage:
- Hourly granularity for the last 7 days. Drill into any day’s 24-hour breakdown.
- Daily aggregates for anything older. Auto-rollup runs nightly.
- Configurable retention from 30 days to forever.
What you see in the dashboard:
- Bar chart with Today, 7 Days, 30 Days, 90 Days tabs
- Top 10 pages with real page titles (resolved from the content database)
- Top 10 referrers (self-referrals filtered out)
- All-time, period, and today’s view count cards
- AJAX tab switching so nothing reloads
What EP Analytics does NOT do:
- No user identification. No unique visitor count. It is a counter, not a behaviour tracker.
- No session tracking. A visitor viewing five pages counts as five views, not one session.
- No event tracking. No click maps, no scroll depth, no form analytics.
- No geography. No IP-to-country lookup.
If any of those matter to you, EP Analytics is not enough. If none of them matter (and for most sites they don’t), EP Analytics is all you need.
Requirements
Section titled “Requirements”- PageMotor 0.8.2b or later
That’s it. No external service accounts, no JavaScript SDK, no Google tag manager.
Installation
Section titled “Installation”- Download
ep-analytics.zipfrom the EP Suite downloads page. - Upload via Plugins → Manage Plugins.
- Activate. Tracking starts immediately.
Open the settings page to confirm. You should see status cards with zero counts and a prompt to revisit once data accumulates.
Settings
Section titled “Settings”Tracking
Section titled “Tracking”- Enable tracking. On by default. Turn off temporarily if you need.
- IP exclusion list. Comma-separated IP addresses to never record. Use this to exclude your own IP and any known bot sources. Supports CIDR (
192.168.1.0/24).
Data retention
Section titled “Data retention”- Keep data for: 30, 60, 90, 180, 365 days, or Forever. Expired data is deleted during the nightly cleanup.
- Hourly-level data is kept for the most recent 7 days regardless of this setting. After 7 days, hourly rows are rolled up into a single daily row to keep the database lean.
Bot filtering
Section titled “Bot filtering”EP Analytics automatically ignores page views from user-agents that look like bots. The blocklist covers 40+ patterns across:
- Search engine crawlers (Googlebot, Bingbot, DuckDuckBot, Yandex)
- AI scrapers (GPTBot, ClaudeBot, Bytespider, CCBot)
- Social previews (Twitterbot, facebookexternalhit, LinkedInBot, WhatsApp, Slackbot)
- Monitoring tools (UptimeRobot, Pingdom, StatusCake)
- Generic crawlers (
bot,spider,crawler,scraperin the UA)
Legitimate visitors almost never match these patterns. If you spot false positives, log them in your review queue.
Dashboard usage
Section titled “Dashboard usage”The Today tab
Section titled “The Today tab”Bar chart of the last 24 hours, split into hourly buckets. Most recent hour is on the right. Each bar is clickable for that hour’s top pages (if you hover).
The 7 Days tab
Section titled “The 7 Days tab”Daily bars for the last 7 days. Click any bar to drill into that day’s 24-hour breakdown, then use the Back button to return to the overview.
The 30 / 90 Days tab
Section titled “The 30 / 90 Days tab”Daily bars for the period. No hourly drill-down because hourly data is only retained for 7 days.
Top pages
Section titled “Top pages”Table of the 10 most-viewed pages in the selected period. Page titles resolve from PageMotor’s content tables, so you see /about-us/ as “About us” rather than just a URL.
Top referrers
Section titled “Top referrers”Table of the 10 domains that sent the most traffic. Direct visits (no referrer) are not counted. Self-referrals (anyone coming from your own site) are excluded.
How tracking works
Section titled “How tracking works”Every page request triggers a single database write during shutdown:
- Check that tracking is enabled.
- Check that the page is a real page (not an admin page, not an error page, not an asset).
- Check the user-agent against the bot blocklist. Bots get skipped.
- Check the client IP against the exclusion list. Excluded IPs get skipped.
- Increment the hourly counter for this URL path and this hour.
- Record the referrer domain (if present and not self-referral).
The database write happens AFTER flush() has sent the response, so the visitor never waits for it.
Data management
Section titled “Data management”- Automatic cleanup runs nightly (piggybacks on PageMotor’s scheduler).
- Hourly-to-daily rollup during cleanup for rows older than 7 days.
- Manual Clear All button in settings, CSRF-protected. Wipes everything. No undo.
Comparing to Google Analytics
Section titled “Comparing to Google Analytics”| Feature | EP Analytics | GA4 |
|---|---|---|
| Server-side | Yes | No (JS pixel) |
| Cookies | None | Yes |
| Requires consent | No | Yes, everywhere in Europe |
| External service | None | |
| Unique visitor count | No | Yes |
| Session tracking | No | Yes |
| Event tracking | No | Yes |
| Geography | No | Yes |
| Data ownership | Your server | Google’s servers |
| GDPR paperwork | None | Full DPA chain |
EP Analytics is the better choice when you need page view numbers and nothing else. Many sites discover they never needed the rest.
Troubleshooting
Section titled “Troubleshooting”“No data is showing up after I installed”
Section titled ““No data is showing up after I installed””Wait a few minutes and reload. First-load wait is normal. If you still see zeros after an hour:
- Is tracking actually enabled in settings? Toggle it off and on.
- Is your IP in the exclusion list? Check.
- Are you testing from a machine running an ad-blocker that identifies as a bot? Unlikely, but possible.
“My own visits are being counted”
Section titled ““My own visits are being counted””Add your IP to the exclusion list. Find your IP at ifconfig.me.
“I see bot traffic getting through”
Section titled ““I see bot traffic getting through””Some bots are new and not yet in the blocklist. Log the offending user-agent in your review queue; bot patterns can be extended.
“The Today tab shows fewer views than the 7 Days tab for today”
Section titled ““The Today tab shows fewer views than the 7 Days tab for today””This is not a bug. Today data comes from hourly buckets. The 7-day bar for today is the sum of today’s hourly buckets. They should match. If they don’t, check whether your server clock is in the timezone you expect.
“Dashboard loads slowly on a site with millions of page views”
Section titled ““Dashboard loads slowly on a site with millions of page views””Top pages and referrers queries aggregate at read time. On very large datasets this can be slow. Dropping retention from Forever to 180 or 365 days usually fixes it.
Feedback and corrections
Section titled “Feedback and corrections”For a quick question about this plugin, EP Support inside your admin is the fastest option. The chat widget sits on every EP plugin settings page and knows which one you’re on, with starter questions and links preloaded for that exact screen.
For anything bigger — a bug report, a feature request, or a “how do I…” that needs a real reply — open a ticket at help.elmspark.com. A real person, helped by AI, writes the reply. Usually within a few hours. Tickets don’t disappear into the void.
Changelog
Section titled “Changelog”1.2.16
Section titled “1.2.16”- Settings language menu. The language menu in this plugin’s settings now lists only the languages it is actually translated into, plus English, so you can no longer pick a language that changes nothing.
- Danish. Adds a Danish translation.
1.2.15
Section titled “1.2.15”- Fixes a doubled cache-busting tag on its admin scripts. On PageMotor 0.11 and later the page asked for each file with two version tags on the end of its address (
?v=…?v=…), because the core had started adding its own tag and the plugin was still adding one too. The files loaded correctly, so nothing was visibly broken; the addresses were just malformed and every cache saw a longer key than it needed. The plugin now leaves the tag to the core on 0.11 and later, and still adds its own on older cores, where nothing else would. - No change to what these files do.
1.2.14
Section titled “1.2.14”- Stops counting machine traffic as page views. If your site has an AI connector wired to it, or anything else talking to its API, every one of those calls was being recorded as a visit, showing up in your figures as traffic to
/mcp/or/api/. Only real page views are recorded now. OAuth handshakes and.well-knownlookups are excluded for the same reason. - Views already recorded that way stay in your history. They are visible as page paths beginning
/mcp/,/api/or/oauth/and can be deleted by hand if you want the figures clean. - Nothing else changed, and a site with no connector wired sees no difference at all.
1.2.13
Section titled “1.2.13”- Fixes a crash on the first visit to your site after you activate the plugin. Nothing had created the plugin’s tables yet, and the part that records the visit wrote to them anyway, which ended in a fatal error in your site’s error log. The tables are now created on that first visit if they are missing.
- A missing or dropped table now repairs itself instead of failing every time. If a table disappears, the next visit rebuilds it and records the visit.
- Recording a visit can no longer take your site down. The tracking step and the daily tidy-up are now sealed off: if either fails, the failure is written to your error log and the page carries on serving.
- This also carries the current shared EP Suite code. Older copies of this plugin could stop other EP plugins working on the same site, so updating it is worth doing even if you never saw the crash above.
1.2.12
Section titled “1.2.12”- Fixes “Your session has expired. Please reload to ensure your security.” on PageMotor 0.11. The message appeared on this plugin’s admin screens even though you were signed in perfectly normally, and whatever you were doing failed to save.
- Nothing was wrong with your session. PageMotor 0.11 started handling part of the security check that this plugin was already handling itself, and the two together made every save look invalid. The plugin now checks whether PageMotor has already done it.
- Visitors who were not signed in were never affected, on any version.
- There is nothing to reconfigure, and nothing else changed.