SFR Analytics Hub

Plugin Banner

SFR Analytics Hub

by SupportFromRichard

Download
Description

SFR Analytics Hub brings analytics data from all your WordPress sites together in a single, easy-to-read dashboard. It works with the free SFR Analytics plugin, which tracks pageviews, visitors, sessions, traffic sources, geographic data, and more on each individual site.

The Hub pulls that data into its own local database and presents aggregated views, trend comparisons, and breakdowns — so you can monitor every site from one place without logging in to each one separately.

Free for up to 3 sites. It works directly with the free SFR Analytics plugin on each tracked site.

You can also check live online visitors across all connected sites from the Hub dashboard, including per-site online counts and a quick “Active Sites Now” summary.

Key Features

  • Central dashboard — total views, visitors, sessions, and human traffic percentage across all connected sites
  • Local data storage — analytics snapshots are stored in the Hub’s own database for fast dashboard loading
  • Automatic hourly sync — new data is fetched from all sites in the background via WP-Cron
  • Historical backfill — when you add a new site, the Hub pulls up to 90 days of past data automatically
  • Traffic over time chart — line chart showing daily views across your sites for the selected date range
  • Traffic sources — see where visitors are coming from: Direct, Search Engines, Social Media, Referral Sites
  • Top referring sites — individual domains sending traffic, aggregated across all sites
  • Top content — most viewed pages across all your sites
  • Online Now (cross-site) — check current live visitors across all connected sites with per-site counts
  • Active Sites Now panel — quick summary of which connected sites currently have live visitors
  • Online-only auto-refresh — optional 15s/30s/60s refresh for live checks (off by default)
  • Site categories — label sites as Personal (P) or Client (C), with quick toggle filters
  • Email report groups — create multiple report groups, each with its own site selection, recipients, and weekly or monthly schedule. Digests include Today, 7-day, and 30-day summaries with trend comparisons
  • Export and print — download CSV reports or print/save as PDF
  • Date presets — Today, Last 24 Hours, 7 Days, 30 Days, 90 Days, or custom date range
  • Per-site toggle — show or hide individual sites on the dashboard without removing them
  • Refresh on demand — sync button fetches latest data then reloads the dashboard
  • Encrypted credentials — API passwords are encrypted using Sodium (with fallback)
  • Data retention — configurable retention period (default 1 year, up to 5 years)
  • Simple limits — this free edition supports up to 3 connected sites

How It Works

  1. Install the free SFR Analytics plugin on each site you want to track
  2. Install SFR Analytics Hub on the site where you want the central dashboard
  3. Connect each tracking site using its WordPress Application Password
  4. The Hub syncs analytics data automatically every hour and stores it locally
  5. View everything from one dashboard — no external services, no tracking scripts on the Hub site

Requirements

  • The free SFR Analytics plugin must be installed on each tracking site
  • WordPress Application Passwords must be enabled on each tracking site
  • PHP 7.4 or higher (PHP Sodium extension recommended for credential encryption)

On each site you want to track (feeder sites):

  1. Install and activate the SFR Analytics plugin
  2. Go to SFR Analytics > Settings and click “Generate Password” to create an Application Password, or go to Users > Profile and create one under “Application Passwords”
  3. Note down the username and Application Password

On the site where you want the central dashboard (Hub site):

  1. Upload sfr-analytics-hub to /wp-content/plugins/ or install via WordPress admin
  2. Activate the plugin through the Plugins menu
  3. Go to Analytics Hub > Sites and click Add Site
  4. Enter the site name, URL, WordPress username, and Application Password from the feeder site
  5. Click Test Connection to verify, then Add Site
  6. Go to Analytics Hub > Dashboard to see your aggregated data
  1. Central dashboard with aggregated views, visitors, and sessions across all connected sites

    Central dashboard with aggregated views, visitors, and sessions across all connected sites

  2. Traffic over time chart showing daily trends for the selected date range

    Traffic over time chart showing daily trends for the selected date range

  3. Site management page where you add, edit, and test connections to tracking sites

    Site management page where you add, edit, and test connections to tracking sites

  4. Settings page with data retention and maintenance tools

    Settings page with data retention and maintenance tools

  5. Email report with Today, 7-day, and 30-day summaries including trend comparisons

    Email report with Today, 7-day, and 30-day summaries including trend comparisons

  6. Traffic sources breakdown showing Direct, Search, Social, and Referral traffic

    Traffic sources breakdown showing Direct, Search, Social, and Referral traffic

How do I get an Application Password?

Go to Users > Profile on the tracking site, scroll down to “Application Passwords”, enter a name (e.g. “Analytics Hub”), and click “Add New Application Password”. Copy the generated password and use it when adding the site to the Hub.

Alternatively, SFR Analytics includes a “Generate Password” button in its Settings page for convenience.

Test Connection fails with “You must be logged in” (401)?

Some login security or authentication plugins block WordPress Application Passwords. Common culprits:

  • FluentAuth — go to its settings and ensure “Disable app login (REST API) for remote access” is turned OFF
  • Two-factor authentication plugins — check for an option to allow Application Passwords
  • Security plugins — check for REST API restriction settings

“No route was found” (404) or “Could not load time-series” for all sites?

This means the SFR Analytics plugin on the tracking site is an older version that does not include the required REST endpoints. Update SFR Analytics to the latest version on each tracking site, then refresh the Hub dashboard.

How often is data synced?

The Hub runs an automatic background sync every hour via WP-Cron. You can also click the Refresh button on the dashboard to trigger an immediate sync.

Is my data secure?

Yes. API credentials are encrypted using PHP Sodium (with a fallback for servers without Sodium). All communication between the Hub and tracking sites uses the WordPress REST API over HTTPS. No data is sent to any third-party service.

How many sites can I connect?

This free edition supports up to 3 connected sites.

How do I track more than 3 sites?

If you need the same Hub features for more sites, use SFR Analytics Hub Pro. The Pro build extends the site limit while keeping the same core dashboard and reporting workflow.

Can I use the Hub with sites on different domains?

Yes. The Hub can connect to any WordPress site running SFR Analytics, regardless of domain or hosting provider.

How much data is stored?

The Hub stores one row per site per day. Even with 50 sites over 5 years, this is a very small amount of data. You can configure the data retention period in Settings (default: 365 days).

Can I send reports to clients?

Yes. You can create multiple email report groups, each targeting specific sites with their own recipient list and schedule. For example, send a weekly report for Client A’s sites to their email, and a monthly summary of all sites to yourself. Set up report groups in the Reports tab of the Analytics Hub dashboard.

1.8.2

  • Fixed: Hub “Traffic by Source” chart now supports older feeder data where pageviews were stored as views instead of visits.

1.8.1

  • Fixed: Traffic Sources % now correctly represents % of visitors (not visits/views)
  • Updated: Email/print templates header to match the new % Visitors meaning
  • Updated: Online Now label + review prompt UX improvements for admins

1.8.0

  • Added: Online Now controls as a dedicated dashboard row for cleaner UX
  • Added: Online-only auto-refresh toggle (off by default) with 15s/30s/60s intervals
  • Added: Active Sites Now mini-panel showing which connected sites currently have live visitors
  • Improved: Hub dashboard readme/docs wording to clarify live online visibility across all connected sites

1.7.0

  • New: Email Report Groups — create multiple report groups with different site selections, recipients, and schedules
  • New: Each group can target specific sites or all sites
  • New: Independent weekly/monthly schedule per group
  • New: Test email per group from the Reports tab
  • Improved: Cron runs daily and checks each group’s frequency, avoiding missed sends
  • Migration: Existing single-report settings automatically converted to a report group
  • Compliance: moved dashboard/sites JavaScript and print CSS to proper WordPress enqueue hooks
  • Compliance: updated bundled Chart.js to current stable release
  • Compliance: WordPress.org package is free-only with a fixed 3-site limit (no licence-key unlock flow)

1.6.1

  • Fixed: Tested up to updated to WordPress 6.9
  • Fixed: prepare() placeholder unpacking for dynamic IN() queries
  • Fixed: added wp_unslash() before sanitizing site IDs during sync
  • Added: phpcs annotations for Application Password inputs and display-only GET parameters

1.6.0

  • Changed: free tier now includes 3 sites (previously 2)
  • Changed: admin menu position adjusted to sit alongside SFR Analytics
  • Changed: site-limit messaging simplified in the admin UI
  • Fixed: added translators comments for all translatable strings with placeholders
  • Fixed: all number output now properly escaped for security compliance
  • Fixed: phpcs annotations for legitimate fclose() calls on php://output
  • Updated: Plugin URI and all links point to supportfromrichard.co.uk/sfr-analytics/
  • Updated: readme.txt rewritten for WordPress.org submission

1.5.4

  • Redesigned email reports: both weekly and monthly digests now include Today, 7-day, and 30-day summaries with trend comparisons
  • Added trend lines showing delta and percentage change vs previous period
  • Email reports now include Top Content and Top Traffic Sources tables
  • Added “View Full Dashboard” button and settings link in email footer
  • Print report template updated to match new email layout
  • Frequency setting now controls only send schedule — report content is always the same

1.5.3

  • Fix: Email reports now correctly display data (extract fix for template variables)

1.5.2

  • Added: Category toggle buttons (All, None, All Private, All Client) for quick site filtering on dashboard
  • Added: Site category labels (P/C) shown next to each site checkbox for quick identification
  • Improved: Date and site filter selections now persist in browser URL — survives page refresh
  • Improved: Manual date input changes now auto-reload the dashboard

1.5.1

  • Fix: Refresh button now correctly triggers data sync before reloading dashboard
  • Fix: Auto-sync on first dashboard visit when local data table is empty (e.g. after upgrade)

1.5.0

  • Major: Permanent local data storage — Hub now stores daily analytics snapshots in its own database
  • Dashboard loads instantly from local data; no HTTP requests to feeder sites during rendering
  • Automatic hourly background sync fetches new data from all connected sites
  • Initial 90-day historical backfill runs automatically when a new site is added
  • Refresh button triggers an on-demand sync (fetches missing days + today) then reloads dashboard
  • Data Retention setting controls how many days of data to keep (default 1 year, max 5 years)
  • Per-site sync status visible on the Settings page (days stored, date range)
  • Site deletion now cleans up stored daily data
  • Reset Hub Data now clears permanent daily data alongside cache and audit log

1.4.0

  • Dashboard now loads instantly with a spinner; data is fetched via AJAX in the background
  • Changing dates, site filters, or clicking Refresh no longer triggers a full page reload
  • Added “Last 24 Hours” date preset button
  • Charts reinitialise cleanly after AJAX content injection
  • Error handling: timeout and failure display a retry button instead of a blank page
  • Improved overall dashboard responsiveness, especially with many connected sites

1.0.0

  • Initial release
  • Multi-site aggregation
  • Secure API integration
  • Caching and rate limiting
  • Audit logging
Back to top