▲ WEBPRO LogDash
Admin Panel — sign in to continue
Invalid credentials
▲ WEBPRO LogDash / Admin
← Dashboard
Configured Sites
Manage client sites and SFTP connections
📅 Report Period:
to
Loading…
Add New Site
Configure a client site for SFTP log ingestion
Site Information
Unique slug — used as the folder name, no spaces
Overrides global logo for this client's reports. Leave blank to use global.
Connection
SFTP / SSH
Stored at /opt/logdash/keys/{site-id}.pem with 600 permissions
Ingest Logs
Trigger SFTP/FTP pulls or upload log files manually
🔌 Test Connection
Verify SFTP or FTP connectivity and list matching log files — no data is imported
📡 SFTP / FTP Pull
Manually pull latest logs from a site's server
📤 Manual Log Upload
Upload a .log, .gz, or .bz2 file directly
🗑 Purge Site Data
Delete all imported data for a site so you can re-import cleanly. This cannot be undone.
Leave dates blank to purge all data. Set start only to purge from that date onward. Set both to purge a date range.
── Ingest Log ─────────────────────────────
Theme Picker
Choose the look and feel of the analytics dashboard
Available Themes
Loading themes…
Per-Site Theme Override
Set a different theme for a specific site
Reports
Preview, email, and download client reports
👁 Report Previews
Choose a report type and click a site to preview
Loading sites…
📬 Email All Site Reports
Send comprehensive reports for every site to one email address
🔌 Email Test
Verify email delivery is working
Sends a test email using the configured mail method
📄 Send Report for Individual Site
Send last month's report to one client — or override the email address
Used when sending a portal link instead of PDF. Should be your LogDash server's public URL.
📋 Sites Email Status
Which sites have a client email configured and will receive automated reports
Loading…
Users
Manage accounts, roles, and multi-factor authentication
New User
All Users
Loading…
Change Your Password
Applies to the currently signed-in account
Settings
Scheduler, email, and server configuration
🕐 Schedules
When to automatically pull logs and send reports
Default: 0 3 * * * = 3 AM daily  |  0 */6 * * * = every 6 hours
Default: 0 8 1 * * = 8 AM on the 1st of each month
Used for cron scheduling and report dates
How many days of log data to keep per site
📧 Email / SMTP
Used to send monthly reports to clients
🚫 Exclude Rules
Filter these from all dashboards, reports, and stats
Requests to these paths will be hidden from all views. Use prefix: /admin matches /admin/login etc.
Requests from these IPs (e.g. your own office) will be excluded from stats.
Any request whose user-agent contains these strings will be hidden (e.g. your uptime monitors).
Users can still toggle 404s on/off in the dashboard. This just sets the default.
When enabled, report KPIs, page views, daily series, top pages, and return visitors will only count US-based IPs. Uses ip-api.com for geolocation. Can be overridden per-site in the edit modal.
🔌 Connection Defaults
Global FTP/SFTP defaults — pre-filled when adding new sites. Per-site values override these.
🔐 Admin Password
Password to access this admin panel
⚠️ The default password is logdash2024 — change it before going live!
📋 Sites Page Layout
Choose how to display the sites list
🎨 Report Branding
Customize the logo that appears on client reports
PNG, SVG, or JPG. Max 2MB. Recommended size: 200x50px.
No custom logo set
📊 Report Methodology
How comprehensive report metrics are calculated
Unique Visitors
Counted from the daily_ips table — each distinct IP address is counted once across the entire reporting period, regardless of how many days they visited. This avoids the inflation caused by summing per-day unique counts.
Returning Visitors
An IP that appears on 2 or more distinct days within the period is counted as a returning visitor. The percentage shown is returning IPs / total unique IPs × 100.
Page Views (Estimated)
Calculated from the daily_pages table. Only human requests (non-bot) to actual page paths are counted — assets like CSS, JS, images, fonts, PDFs, and known server-side scripts are excluded. Error responses (4xx/5xx) are subtracted from the count. If GA4 or a client-side tracker is connected, those more accurate numbers are used instead.
Bandwidth
Total bytes transferred for all requests (human + bot + assets) within the period, sourced from the bytes column in daily_stats. Displayed in human-readable format (KB, MB, GB).
Daily Traffic Chart
Shows human (non-bot) requests per day from the daily_stats table. Bot traffic is excluded. Each bar represents one day's total human request count.
Top Content
Top 10 page paths ranked by human hit count. Asset paths (images, CSS, JS, fonts, etc.) are excluded. Percentages are relative to the top 10 shown, not total site traffic.
Audience Technology
Device type (Mobile/Desktop/Tablet) is determined by parsing user-agent strings from non-bot requests. The percentage reflects each device type's share of total human requests.
Entry Points
Landing pages are identified by finding the first request from each unique IP in a session. Percentages show each page's share of total entry sessions detected.
Traffic Sources
External referrers are extracted from the referrer field in requests. Self-referrals (same domain) and internal/dev hosts are excluded. Percentages are relative to the top 10 external referrers shown.
Top Cities
IP addresses are resolved to city/region using the ip-api.com geolocation service with a persistent cache (data/geo_cache.db). Private IPs and known bot ranges are excluded. If IP resolution fails entirely, this section is hidden.
Campaign & Marketing
UTM-tagged URLs (utm_source, utm_medium, utm_campaign) are parsed from request query strings. This section only appears when campaign-tagged traffic is detected. Campaign doughnut, source bar chart, and channel distribution are all derived from UTM parameters.
Search Engine Crawl Activity
Detects crawl activity from Google, Bing, DuckDuckGo, Yahoo, Yandex, and Baidu by matching user-agent strings and bot names. Each engine with activity gets its own column showing top 10 crawled pages as percentages. Non-content paths (/wp-*, /images/, /robots.txt, /ads.txt, etc.) are excluded. Only appears when search engine crawl data exists.
Audit Log
All admin actions are logged here for compliance and review
Click Refresh to load audit events
Google Analytics 4 Integration
Connect GA4 to pull real page views, sessions, and visitor metrics into LogDash
⏳
Checking GA4 status...
? Setup Guide
1 Install Python Dependencies
LogDash needs two Google packages to connect to GA4. Run this on your server:
pip install google-auth google-analytics-data
2 Create a Google Cloud Service Account
  1. Go to Google Cloud Console → IAM → Service Accounts
  2. Click "+ Create Service Account"
  3. Name it something like logdash-analytics
  4. Click Create and Continue (no roles needed at project level)
  5. Click Done
  6. Click the new service account → Keys tab → Add Key → Create new key → JSON
  7. A .json file will download — upload it below
3 Grant GA4 Property Access to the Service Account
  1. Go to Google Analytics → Admin (gear icon)
  2. Under the property, click Property Access Management
  3. Click the + button → Add users
  4. Enter the service account email
  5. Set role to Viewer (read-only is sufficient)
  6. Uncheck "Notify new users by email"
  7. Click Add
Repeat for each GA4 property you want to monitor. The same service account can access multiple properties.
4 Map LogDash Sites to GA4 Properties
Find your GA4 Property ID: Go to Google Analytics → Admin → Property Settings. The property ID is the number shown (e.g., 123456789).
Connected Properties
Site GA4 Property ID Status Actions
Backup & Restore Settings
Download or restore your site configuration, user accounts, and GA4 settings
💾 Download Backup

Downloads a ZIP file containing:

  • sites.yaml — All site configurations
  • users.yaml — Admin user accounts
  • GA4 config — Service account & property mappings

Database files (.db) are not included — they re-import automatically from your log servers.

📦 Restore from Backup

Upload a previously downloaded backup ZIP to restore your configuration.

⚠️ This will overwrite your current settings. A timestamped backup of existing files is created automatically before overwriting.

📦
Drop backup ZIP here or click to browse
Deploy Update
Upload a full or patch zip to update LogDash in-place
📦 Upload Deploy Zip
Full deploy replaces all app + frontend files. Patch deploy overlays changed files only. Detection is automatic.
📦 Drag & drop a zip here, or browse
Accepts logdash_deploy_full_vXX.zip (full) or logdash_patch_vXX.zip (patch)
ℹ️ How It Works

Full deploy — contains app/ and frontend/ directories. Backs up the existing install, then replaces all files. Use for clean installs or major upgrades.

Patch deploy — contains only changed files. Overlays on top of the existing install without touching other files. Use for incremental updates.

The deploy runs logdash-redeploy.sh on the server. The service will restart automatically. Expect a few seconds of downtime during restart.

✏️ Edit Site
Site Information
Overrides global logo for this client's reports. Leave blank to use global.
Client Portal Access
Client portal URL:
If set, clients must enter this to view their portal. Leave blank for open access.
Connection
SFTP / SSH
Leave empty to keep existing key
📋 Changelog
v116 2026-03-31 CURRENT
Fix BennieLong / ChopLiver report links
  • BennieLong button now opens /{site}/bennielong (was going to standard report)
  • ChopLiver button now opens /{site}/benniechopliver
  • openReport() routes all 4 template types to their correct endpoints
v115 2026-03-31
All Report Types on Every Card
  • Every site card shows BennieLong + ChopLiver + Exec buttons
v114 2026-03-31
Dynamic Report Button Labels
  • Report buttons show actual template name (BennieLong, ChopLiver, Newspaper, Exec)
v113 2026-03-31
Sites Date Range Picker
  • Date range bar above sites list: This Month, Last Month, Last 30, Last 90, or custom date inputs
  • All report buttons (Reports, Comp Report, Bundle, Gallery) use selected date range
  • Active preset highlighted; custom date inputs sync with preset buttons
  • Defaults to current month on page load
v112 2026-03-31
Sites Page Layout Switcher
  • Visual layout picker in Settings tab with 5 card layout options (A–E)
  • Layout A: Index Card (horizontal rows), B: Dashboard Tiles (2-col), C: Minimal List (default), D: Bold Tiles (3-col), E: Power Table (dense)
  • Layout preference saved to settings and persisted across sessions
v111 2026-03-31
Top Visitor Paths (polished)
  • Visitor Paths section in BennieLong with session-based page flow
  • Unified indigo color palette, filtered WP junk, skip single-page bounces
v109 2026-03-31
Share link mobile fix
  • Fixed shared report links returning "Not authenticated" on mobile browsers
  • Share links now bypass session auth (they have their own token + view-count security)
v108 2026-03-30
Report glossary on all reports
  • "How to Read This Report" glossary added to the bottom of ALL report types
  • Definitions for Total Visitors, Unique Visits, New Visits, Return Visits, Top Pages, Bandwidth
  • Uses dynamic client/site name instead of hardcoded domain
v107 2026-03-30
BennieChopLiver report
  • New report type: comprehensive + hero comparative KPI + Visitor Trends + Top Pages
  • Hero KPI: Current Unique Visitors vs Previous Period side-by-side with % change
  • Fixed CSRF error on email test and send-all-reports buttons
v106 2026-03-30
Visitor Trends replaces Traffic Trend
  • BennieReport + BennieLong: table columns now Visitors, Unique Visits, New Visits, Return Visits
  • Chart shows 4 visitor-focused lines instead of Page Views + Visits
  • New get_daily_visitor_trends() DB function tracks new vs returning per day
v105 2026-03-30
Spike smoothing on all reports
  • Days exceeding 3x the 7-day median are replaced with neighborhood average
  • Applied to charts, sparklines, and daily tables across all report types
  • KPI headline totals remain unsmoothed (truthful aggregate counts)
v104 2026-03-30
Share links, email share from admin
  • 5-view expiring share links for reports — read-only, no editing
  • Email Share Link button in report preview opens mailto with link
  • Shared view shows remaining views banner, auto-expires after limit
v103 2026-03-30
Center KPI cards, filter junk pages
  • KPI row uses auto-fit grid so cards fill width evenly regardless of count
  • Filter junk pages (hello-world, uncategorized, feeds) from all reports
v102 2026-03-30
Changelog modal, BennieLong width fix
  • Added version changelog pill button with modal in admin topbar
  • Fixed BennieLong injected sections to match comprehensive report container width
v101 2026-03-30
Logo upload, BennieLong report, pop-out preview
  • Logo file upload — global (Settings) and per-site (Add/Edit Site)
  • BennieLong report: comprehensive + daily traffic table + top pages with bandwidth
  • BennieReport pill navigation fixed (smooth scroll + card highlight)
  • Pop-out button to open report preview in new tab
v100 2026-03-30
BennieReport, report branding
  • New BennieReport: SmarterStats-style with KPI sparklines, traffic trend, top pages
  • Report type selector in admin (Comprehensive / BennieReport / BennieLong)
  • Global report logo URL in Settings, per-site client logo URL
v99 2026-03-30
Admin cleanup, sendmail-first email
  • Hidden Themes and Deploy tabs, moved Add Site inside Sites tab
  • Renamed Email Reports to Reports, preview pills moved to top
  • All email endpoints use sendmail first, SMTP fallback
  • Reload button in admin topbar
v98 2026-03-30
Search engine crawl activity
  • Multi-engine crawl section: Google, Bing, DuckDuckGo, Yahoo, Yandex, Baidu
  • Inline SVG logos, responsive grid layout for multi-engine comparison
v97 2026-03-30
Googlebot clean slugs, path filtering
  • Clean page slugs in crawl data (strip paths, Homepage label)
  • Exclude non-content files (robots.txt, ads.txt, wp-* paths)
v96 2026-03-30
Googlebot crawl activity, report methodology
  • Googlebot Crawl Activity section in comprehensive report
  • Report Methodology collapsible section in admin Settings
v95 2026-03-30
Charts as percentages, removed browser/OS tables
  • Top Content, Entry Points, Traffic Sources charts show percentages only
  • Removed browser and OS tables from Audience Technology section
v94 2026-03-30
Fixed unique visitor counts
  • True period-unique IP counting via daily_ips (was inflated by SUM of daily uniques)