Minimal, privacy-focused web analytics
Project description
tiny-analytics
Minimal, privacy-focused web analytics. Self-hosted, no cookies, no tracking IDs.
Quick Start
# Install
uv tool install tiny-analytics
# Configure (create a .env file or set environment variables)
export TINY_ANALYTICS_PASSWORD="your-secret-password"
export TINY_ANALYTICS_SECRET_KEY="$(openssl rand -hex 32)"
# Run
tiny-analytics
Add this to your site:
<script src="https://your-analytics-domain/snippet.js" defer></script>
That's it. View your dashboard at http://localhost:8000/.
One-liner (no install)
uvx tiny-analytics
From source
git clone https://github.com/zevaverbach/tiny-analytics.git
cd tiny-analytics
uv sync
uv run tiny-analytics
Using pip instead of uv
pip install tiny-analytics
tiny-analytics
Or from source:
git clone https://github.com/zevaverbach/tiny-analytics.git
cd tiny-analytics
python -m venv .venv && source .venv/bin/activate
pip install -e .
tiny-analytics
Features
- Privacy-first: No cookies, no fingerprinting, no personal data stored
- Lightweight: Single Python file + templates
- Bot filtering: Automatic detection and separation of bot traffic
- Time on page: Tracks actual engagement, not just page loads
- Geo & device breakdown: See where your visitors come from and what they use
- Dark mode UI: Easy on the eyes
Screenshots
Login
Logs view
How It Works
- Visitor hits your page → snippet.js fires a POST to
/t - Server hashes IP+UA → creates anonymous visitor ID (never stored raw)
- On page leave → beacon sends time-on-page to
/d - Dashboard → aggregates and visualizes the data
No cookies. No localStorage. No tracking across sites.
Configuration
| Variable | Default | Description |
|---|---|---|
TINY_ANALYTICS_PASSWORD |
changeme |
Dashboard login password |
TINY_ANALYTICS_SECRET_KEY |
change-this... |
Session signing key (generate a random string) |
TINY_ANALYTICS_ALLOWED_ORIGINS |
[] |
Restrict tracking to specific domains (empty = allow all) |
TINY_ANALYTICS_DB_PATH |
./tiny_analytics.db |
SQLite database location |
TINY_ANALYTICS_HOST |
0.0.0.0 |
Host to bind to |
TINY_ANALYTICS_PORT |
8000 |
Port to listen on |
Deployment
Systemd
[Unit]
Description=tiny-analytics
After=network.target
[Service]
User=www-data
WorkingDirectory=/opt/tiny-analytics
Environment="TINY_ANALYTICS_PASSWORD=your-password"
Environment="TINY_ANALYTICS_SECRET_KEY=your-secret-key"
ExecStart=/usr/local/bin/tiny-analytics
Restart=always
[Install]
WantedBy=multi-user.target
Behind nginx
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
Cloudflare
tiny-analytics reads cf-connecting-ip and cf-ipcountry headers automatically for accurate geo and IP data behind Cloudflare.
CLI Options
tiny-analytics [OPTIONS]
Options:
--host TEXT Host to bind to [default: 0.0.0.0]
--port INTEGER Port to listen on [default: 8000]
--help Show this message and exit
API
| Endpoint | Method | Description |
|---|---|---|
/t |
POST | Record a pageview |
/d |
POST | Update time-on-page |
/snippet.js |
GET | Tracking script |
/ |
GET | Dashboard (auth required) |
/logs |
GET | Raw logs view (auth required) |
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tiny_analytics-0.1.1.tar.gz.
File metadata
- Download URL: tiny_analytics-0.1.1.tar.gz
- Upload date:
- Size: 13.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3e21b60e842bff4f1209d7924f13790630ba4cbec4a72baa21c35fe81b2d6a9e
|
|
| MD5 |
ccf4ca406e213016011a7fafd3745f24
|
|
| BLAKE2b-256 |
400ecef02f9dca00e14fa5c4ef8e3d766f984bf16d004d5807240de8bc4a1180
|
File details
Details for the file tiny_analytics-0.1.1-py3-none-any.whl.
File metadata
- Download URL: tiny_analytics-0.1.1-py3-none-any.whl
- Upload date:
- Size: 16.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5c75168f860ade95e1d6e348c59dbc6b4b3a4d4c7027e1578a2f7b67f46bf8c0
|
|
| MD5 |
ea93f6d63d8c29fb263cee538f454db6
|
|
| BLAKE2b-256 |
3bdfd0e611dfa773ada83bbeec5fae5f6c26f892fa26058751ff719c0fb80bdf
|