Skip to main content
pb-ext includes a privacy-first analytics system that tracks page views, device types, and browsers without storing any personally identifiable information (PII). No IP addresses, user agents, or visitor IDs are persisted to the database.

Key Features

  • Zero PII storage — no IP addresses, user agents, or visitor IDs in the database
  • Aggregated daily counters — efficient storage in _analytics collection
  • Session ring buffer — 50 most recent visits in _analytics_sessions
  • Automatic retention — 90 days for analytics, 50 records for sessions
  • Bot filtering — excludes crawlers and automated traffic
  • Device and browser detection — desktop/mobile/tablet classification

How It Works

Request Tracking

From core/analytics/collector.go:34:

Privacy-First Design

From core/analytics/analytics.go:11:
Session Hashing (core/analytics/collector.go:142):

Data Collected

Daily Aggregated Counters (_analytics)

Unique constraint: (path, date, device_type, browser)

Recent Sessions (_analytics_sessions)

Ring buffer: Only the 50 most recent records are kept.

What Is NOT Stored

PII-free tracking:
  • ❌ No IP addresses
  • ❌ No user agents
  • ❌ No visitor IDs or cookies
  • ❌ No session IDs
  • ❌ No referrer URLs
  • ❌ No query parameters
  • ✅ Only aggregated counts and device metadata

Device and Browser Detection

From core/analytics/collector.go:156:

Excluded Paths

From core/analytics/collector.go:204: The following paths are automatically excluded from tracking:
Static extensions excluded (core/analytics/collector.go:262):
  • Images: .png, .jpg, .jpeg, .gif, .svg, .ico, .webp, etc.
  • Scripts/Styles: .css, .js, .json, .map, .webmanifest
  • Media: .mp4, .webm, .mp3, .wav, etc.
  • Documents: .pdf, .doc, .xls, .txt, etc.
  • Archives: .zip, .rar, .7z, .tar, .gz
  • Fonts: .woff, .woff2, .ttf, .eot, .otf

Bot Filtering

From core/analytics/collector.go:226:

Data Retention

Analytics Counters

From core/analytics/types.go:7:
Retention: 90 days (cleaned by __pbExtAnalyticsClean__ system job)

Session Ring Buffer

From core/analytics/types.go:10:
Retention: Only the 50 most recent visits are kept

Session Window

From core/analytics/analytics.go:28:
A visitor is considered “new” if their session hash hasn’t been seen in the past 30 minutes.

Analytics Data Structure

From core/analytics/types.go:14:

Session Cleanup

From core/analytics/analytics.go:47:

Middleware Registration

From core/analytics/collector.go:15:

Dashboard Integration

View analytics in the pb-ext dashboard at /_/_:
  • Total page views (today vs. yesterday)
  • Unique visitors and session counts
  • Device type breakdown (desktop/mobile/tablet)
  • Browser distribution
  • Top pages by view count
  • Recent visitor activity (last 50 visits)
  • Hourly activity trends

GDPR Compliance

pb-ext analytics is designed to be GDPR-compliant: No consent banner required — no personal data is stored
No cookies — tracking is server-side only
No tracking scripts — no client-side JavaScript
Aggregated data only — individual visitors cannot be identified
Automatic retention — old data is automatically purged
Transparent — all source code is open and auditable

Best Practices

  1. Review excluded paths to ensure admin/API routes aren’t tracked
  2. Monitor session cleanup to prevent memory growth
  3. Check bot patterns if you see unusual traffic
  4. Use the 90-day window for trend analysis
  5. Export data periodically if you need longer retention

Custom Analytics Queries

Query the _analytics collection directly for custom reports: