Events
Tinylytics v1 has two event types, stored in the events table:
| Event | Sent by | Meaning |
|---|---|---|
page_view |
the tracker | A page was shown to a visitor. |
session_start |
the server | The first page view of a new session. Recorded automatically; the tracker never sends it. |
Event record
| Column | Example | Notes |
|---|---|---|
site_id |
4f1c… |
Internal site ID. |
event_type |
page_view |
|
timestamp |
2026-09-28T12:00:00Z |
Server time. |
page |
/pricing |
Normalized path, no query string. |
referrer |
Google |
Readable source name, or empty for direct traffic. |
country |
RW |
ISO 3166-1 alpha-2 code, or empty. |
device_type |
desktop |
desktop, mobile or tablet. |
browser |
Firefox |
Family only, no version. |
os |
Linux |
Family only, no version. |
session_id |
9b2e… |
Random ID of the session. |
visitor_id |
16 bytes | Daily-salted hash. See Privacy. |
Page normalization
- Query strings are removed. They often hold tokens, emails or search terms, and they would split one page into many rows.
- Trailing slashes are removed (
/docs/→/docs), duplicate slashes collapsed, and percent-encoding decoded for readability. - Paths are truncated to 512 characters.
If your URLs contain personal data in the path itself (for example /users/jane@example.com), consider changing those routes — Tinylytics records the path as it is.
Referrer normalization
Referrers are reduced to a short name before they are stored:
| Raw referrer | Stored as |
|---|---|
https://www.google.com/search?q=… |
Google |
https://t.co/abc |
X |
https://news.ycombinator.com/item?id=… |
Hacker News |
https://old.reddit.com/r/… |
Reddit |
https://blog.example.org/post |
blog.example.org |
none, with ?utm_source=newsletter |
Newsletter |
| none | (Direct / none) |
Links from your own domain or its subdomains are not referrers.
Custom events
Not in v1. The event_type column and the ingestion function are shaped so custom events (and goals built on them) can be added later without a new pipeline.