Every redirect through LinkLane writes a click_event document with parsed device, OS, browser, country, referrer, source, and (for routed lanes) the variant served. The dashboard turns those events into a trend chart, three breakdown bars, a heatmap, and an optional live feed.
What gets recorded
- Device
- ios, android, desktop, or other (UA-parsed).
- OS
- iOS, macOS, Windows, Linux, Android — best-effort parse.
- Browser
- Chrome, Safari, Firefox, Edge, etc.
- Country
- ISO-2, resolved via memoised IP lookup.
- Referrer
- Document.referrer, stripped to host.
- Source
- link | qr | custom (set by the caller).
- Variant
- Smart-routing label, when a routing rule was active.
- is_bot
- True if the UA matches a known crawler / preview bot.
14-day trend + breakdowns
GET /api/links/{id}/analytics returns a 14-day daily total plus four breakdowns (device, country, referrer, browser) and a recent-events list. Recharts renders them as monochrome lines and bars over the playful colour underlay — no gradients, no glow, just clean strokes.
The 7×24 heatmap
GET /api/links/{id}/heatmap bins clicks into a weekday × hour grid. It's the fastest way to see when your audience clicks — peak posting time becomes a visible square, not a hunch.
Live feed (SSE)
Open /api/links/{id}/feed in EventSource mode and you'll get a Server-Sent Events stream of new clicks as they happen — device, country, referrer, variant, all live. The dashboard uses it to animate a tiny clicks-now ticker, but it's also useful for big-screen launch-day dashboards.
Unique clicks + bot filtering
LinkLane dedupes hits per IP per link in a link_unique_ips collection so your unique-clicks count doesn't double-count rapid reloads. A built-in bot list (googlebot, bingbot, link-preview crawlers, headless-browser signatures) writes is_bot: true on the event but never on the headline counters.
CSV export of raw events
GET /api/links/{id}/events.csv streams every event for a lane — handy when you want to pivot in Excel or feed clicks into a downstream warehouse. The columns mirror the click_event document, minus the internal Mongo _id.
