PBJ Analytics Changelog (v1.6.2): Reports on a Schedule, Charts on the Shared Link
Version 1.7.0 — see the actual search queries
Search engines have hidden keywords from analytics since around 2013 — your site only ever learns that a visitor came from Google, never what they searched. No analytics tool can read those words from traffic. But every engine reports the queries it sent you to verified site owners through its own webmaster API, and PBJ Analytics can now retrieve them: connect Google Search Console, Bing Webmaster Tools, and/or Yandex Webmaster and each engine gets its own “Search queries” card on the dashboard with real keywords, clicks, and impressions — plus a section in the Custom Report tab and in scheduled email reports.
Setup lives under Settings → Search queries from search engines, where each engine has a collapsible step-by-step explainer covering exactly how to connect it and why it works this way. The feature is strictly retrieve-only: the request carries just your property name, the date range, and your credential — nothing about your visitors ever leaves your site. It is off by default, results are cached so page loads never wait on engine APIs, and connection problems are reported in plain English instead of failing silently. No database changes; settings carry over.
Version 1.6.2 — charts on the shared dashboard
The public read-only dashboard (the tokenized link you can hand to a stakeholder) now shows the same graphs as the admin dashboard: a day-by-day pageviews and visitors trend line, plus a channels breakdown chart with whole-number percentages that always add up to 100. Charts are rendered with the plugin’s locally-bundled Chart.js — still no CDNs, no external scripts, no third-party calls.
Version 1.6.1 — two honest fixes
Fixed the public read-only dashboard, which could display a page of escaped text instead of the report — the shared link now renders as a proper HTML page. And “Run report now” stopped assuming success: it now confirms the actual recipients when the email sends, and shows the reason when it doesn’t (usually a site that needs an SMTP plugin), so a silently-dropped report can’t masquerade as a delivered one.
Version 1.6.0 — report processing and custom reports
The fixed weekly digest grew into full report processing: scheduled email reports over an adjustable window and schedule (daily, weekly, monthly), multiple recipients, per-section excludes, and a saved, viewable report history. A new Custom Report tab builds a report over any date range with any sections and per-section CSV export. Dashboard section titles became clickable deep links into the Custom Report tab, and pie charts switched to whole-number percentages. Old digest settings migrate automatically — nothing double-sends, nothing needs re-enabling.
PBJ Analytics is our self-contained, privacy-friendly website analytics plugin. It records pageviews, referrers, unique visitors, custom events, and device/browser/country breakdowns entirely inside your own WordPress database — no Google Analytics, no third-party services, no cookies. Here’s everything that has shipped so far.
Version 1.5.0 — the dashboard that explains itself
Analytics dashboards love to assume you already know what a bounce rate is. 1.5.0 stops assuming — every admin screen now explains itself in plain English, with no functional or database changes:
- Live setup checklist at the top of Settings: front-end tracking status (and whether logged-in users are counted), the weekly email digest and its recipient, the public dashboard with its tokenized URL when enabled, and funnels/goals defined — each row linking to its section below.
- “What do these numbers mean?” — a collapsible legend on the Dashboard defining sessions (30-minute window), bounce rate (single-page sessions), pages/session, average time on page, goal completions, entry/exit pages, and new vs returning; plus an intro line explaining the period pills and the vs-previous-period KPI deltas.
- Live page help: the Live panel now says what it shows — a rolling last-5-minutes window, polling automatically every 10 seconds.
- Funnels how-to: the funnels editor walks through the three steps of defining one, matching exactly how funnels are parsed.
- Fuller setting descriptions for logged-in tracking, Do Not Track, bot tracking, geo cache, language/screen capture, and the weekly digest — plus a one-line explanation of the diagnostics readout.
Version 1.4.0 — license keys arrive
A License section was added to PBJ Analytics’s settings. Enter the PBJ license key from your purchase and the plugin unlocks automatic updates straight from pbj.tech, delivered through the normal WordPress updates screen. The plugin is fully functional without a key — a key only gates updates, never features — and one key covers up to 3 sites.
Version 1.3.0
- White-label mode for anonymous or client sites (off by default). Enable with the
pbj_analytics_whitelabelfilter: the tracking beacon is inlined under a neutralsite-metricshandle andSiteMetricsglobal, public REST endpoints get a neutralmetrics/v1alias, and the event opt-in attribute becomesdata-track-event— so no plugin-named URL, script ID, or variable appears anywhere in the page source. Tracking behavior is otherwise identical, and both branded and neutral endpoints keep collecting.
Version 1.2.1
- Fixed “Avg. time on site” always reading 00:00. Engagement was only computed from the raw hits table when it spanned the entire selected date range — otherwise a fallback hard-coded the average to zero, which fired on virtually every install. Engagement, bounce rate, and pages-per-session are now always computed from whatever portion of the range the raw data covers.
Version 1.2.0 — the big analytics release
A major expansion that took PBJ Analytics from pageview counting to full behavioral analytics:
- Sessions & journeys: 30-minute sliding-window sessions, top navigation paths (A → B), entry pages, and exit pages.
- Engagement: time on page via an end-of-page beacon, scroll-depth milestones (25/50/75/100%), and new-vs-returning visitors — still cookieless.
- Acquisition: full referrer URLs, UTM parameter capture, server-side channel classification (Direct / Organic / Paid / Social / Email / Referral), and a search-engine breakdown.
- Conversion: configurable funnels with cumulative session counts and conversion percentages, plus goals counted from event labels.
- New dimensions: internal site search queries, outbound clicks, 404 tracking, region and city, language, screen-size buckets, and per-author/per-category breakdowns.
- Dashboard: per-page drill-down (referrers, channels, countries, devices, time, scroll for any URL), a live last-5-minutes panel, period-vs-period deltas on every KPI, and CSV export on the major tables.
- Reporting: optional weekly HTML email digest and an optional tokenized public read-only dashboard.
- Bots: per-bot URL lists — see exactly what GPTBot, ClaudeBot, and Googlebot are fetching, including their 404s.
- Schema upgraded to database version 3 with automatic migration, plus a new engagement REST endpoint.
Version 1.1.0
- Bot & AI-crawler analytics. Bots tracked separately from human traffic, recorded server-side since most crawlers don’t run JavaScript, split into AI crawlers / search engines / other bots with a new dashboard section. A “Track bots” setting (on by default) controls it.
- Fixed dashboard charts rendering far too tall; added the
bot_categorycolumn (database version 2, migrated automatically).
Version 1.0.0
- Initial release: pageviews, referrers, cookieless unique visitors (daily-rotated salted hash — no personal identifiers stored), custom events, device/browser/country breakdowns, a charted admin dashboard, configurable data retention, and a self-hosted updater.

Version 1.7.0 — see the actual search queries
Search engines have hidden keywords from analytics since around 2013 — your site only ever learns that a visitor came from Google, never what they searched. No analytics tool can read those words from traffic. But every engine reports the queries it sent you to verified site owners through its own webmaster API, and PBJ Analytics can now retrieve them: connect Google Search Console, Bing Webmaster Tools, and/or Yandex Webmaster and each engine gets its own “Search queries” card on the dashboard with real keywords, clicks, and impressions — plus a section in the Custom Report tab and in scheduled email reports.
Setup lives under Settings → Search queries from search engines, where each engine has a collapsible step-by-step explainer covering exactly how to connect it and why it works this way. The feature is strictly retrieve-only: the request carries just your property name, the date range, and your credential — nothing about your visitors ever leaves your site. It is off by default, results are cached so page loads never wait on engine APIs, and connection problems are reported in plain English instead of failing silently. No database changes; settings carry over.
Version 1.6.2 — charts on the shared dashboard
The public read-only dashboard (the tokenized link you can hand to a stakeholder) now shows the same graphs as the admin dashboard: a day-by-day pageviews and visitors trend line, plus a channels breakdown chart with whole-number percentages that always add up to 100. Charts are rendered with the plugin’s locally-bundled Chart.js — still no CDNs, no external scripts, no third-party calls.
Version 1.6.1 — two honest fixes
Fixed the public read-only dashboard, which could display a page of escaped text instead of the report — the shared link now renders as a proper HTML page. And “Run report now” stopped assuming success: it now confirms the actual recipients when the email sends, and shows the reason when it doesn’t (usually a site that needs an SMTP plugin), so a silently-dropped report can’t masquerade as a delivered one.
Version 1.6.0 — report processing and custom reports
The fixed weekly digest grew into full report processing: scheduled email reports over an adjustable window and schedule (daily, weekly, monthly), multiple recipients, per-section excludes, and a saved, viewable report history. A new Custom Report tab builds a report over any date range with any sections and per-section CSV export. Dashboard section titles became clickable deep links into the Custom Report tab, and pie charts switched to whole-number percentages. Old digest settings migrate automatically — nothing double-sends, nothing needs re-enabling.
PBJ Analytics is our self-contained, privacy-friendly website analytics plugin. It records pageviews, referrers, unique visitors, custom events, and device/browser/country breakdowns entirely inside your own WordPress database — no Google Analytics, no third-party services, no cookies. Here’s everything that has shipped so far.
Version 1.5.0 — the dashboard that explains itself
Analytics dashboards love to assume you already know what a bounce rate is. 1.5.0 stops assuming — every admin screen now explains itself in plain English, with no functional or database changes:
- Live setup checklist at the top of Settings: front-end tracking status (and whether logged-in users are counted), the weekly email digest and its recipient, the public dashboard with its tokenized URL when enabled, and funnels/goals defined — each row linking to its section below.
- “What do these numbers mean?” — a collapsible legend on the Dashboard defining sessions (30-minute window), bounce rate (single-page sessions), pages/session, average time on page, goal completions, entry/exit pages, and new vs returning; plus an intro line explaining the period pills and the vs-previous-period KPI deltas.
- Live page help: the Live panel now says what it shows — a rolling last-5-minutes window, polling automatically every 10 seconds.
- Funnels how-to: the funnels editor walks through the three steps of defining one, matching exactly how funnels are parsed.
- Fuller setting descriptions for logged-in tracking, Do Not Track, bot tracking, geo cache, language/screen capture, and the weekly digest — plus a one-line explanation of the diagnostics readout.
Version 1.4.0 — license keys arrive
A License section was added to PBJ Analytics’s settings. Enter the PBJ license key from your purchase and the plugin unlocks automatic updates straight from pbj.tech, delivered through the normal WordPress updates screen. The plugin is fully functional without a key — a key only gates updates, never features — and one key covers up to 3 sites.
Version 1.3.0
- White-label mode for anonymous or client sites (off by default). Enable with the
pbj_analytics_whitelabelfilter: the tracking beacon is inlined under a neutralsite-metricshandle andSiteMetricsglobal, public REST endpoints get a neutralmetrics/v1alias, and the event opt-in attribute becomesdata-track-event— so no plugin-named URL, script ID, or variable appears anywhere in the page source. Tracking behavior is otherwise identical, and both branded and neutral endpoints keep collecting.
Version 1.2.1
- Fixed “Avg. time on site” always reading 00:00. Engagement was only computed from the raw hits table when it spanned the entire selected date range — otherwise a fallback hard-coded the average to zero, which fired on virtually every install. Engagement, bounce rate, and pages-per-session are now always computed from whatever portion of the range the raw data covers.
Version 1.2.0 — the big analytics release
A major expansion that took PBJ Analytics from pageview counting to full behavioral analytics:
- Sessions & journeys: 30-minute sliding-window sessions, top navigation paths (A → B), entry pages, and exit pages.
- Engagement: time on page via an end-of-page beacon, scroll-depth milestones (25/50/75/100%), and new-vs-returning visitors — still cookieless.
- Acquisition: full referrer URLs, UTM parameter capture, server-side channel classification (Direct / Organic / Paid / Social / Email / Referral), and a search-engine breakdown.
- Conversion: configurable funnels with cumulative session counts and conversion percentages, plus goals counted from event labels.
- New dimensions: internal site search queries, outbound clicks, 404 tracking, region and city, language, screen-size buckets, and per-author/per-category breakdowns.
- Dashboard: per-page drill-down (referrers, channels, countries, devices, time, scroll for any URL), a live last-5-minutes panel, period-vs-period deltas on every KPI, and CSV export on the major tables.
- Reporting: optional weekly HTML email digest and an optional tokenized public read-only dashboard.
- Bots: per-bot URL lists — see exactly what GPTBot, ClaudeBot, and Googlebot are fetching, including their 404s.
- Schema upgraded to database version 3 with automatic migration, plus a new engagement REST endpoint.
Version 1.1.0
- Bot & AI-crawler analytics. Bots tracked separately from human traffic, recorded server-side since most crawlers don’t run JavaScript, split into AI crawlers / search engines / other bots with a new dashboard section. A “Track bots” setting (on by default) controls it.
- Fixed dashboard charts rendering far too tall; added the
bot_categorycolumn (database version 2, migrated automatically).
Version 1.0.0
- Initial release: pageviews, referrers, cookieless unique visitors (daily-rotated salted hash — no personal identifiers stored), custom events, device/browser/country breakdowns, a charted admin dashboard, configurable data retention, and a self-hosted updater.