Analytics overview

How Nimriz logs click data, the seven analytics sub-pages, privacy modes, and how realtime differs from reporting.

How Nimriz collects analytics data

Every time a visitor clicks one of your short links, the Nimriz edge captures a click event before issuing the redirect. This event flows through two layers:

  1. Real-time store (Nimriz's analytics store)-the event is written here immediately, within the same redirect request. This is what Realtime analytics reads.
  2. Reporting rollups (Postgres)-scheduled sync jobs aggregate Nimriz's analytics store events into rollup tables. This is what your dashboard charts, totals, and breakdowns read.

Because of this two-layer design:

  • Realtime shows events within seconds.
  • Dashboard reports (charts, link totals) update on a schedule and lag by a few minutes.
  • The clicks count on a link updates on sync cycles, not instantly per click.

Privacy modes

Nimriz is privacy-conscious by default. Raw IP addresses and full User-Agent strings are never stored in any privacy mode. The difference between modes is in what happens before that data is discarded.

Standard privacy (default)

  • IP address and User-Agent are hashed at the edge before storage.
  • Hashes rotate daily-the same IP on Monday has a different hash on Tuesday. This supports daily unique-click deduplication while preventing long-term tracking across days.
  • Unique clicks and deduplicated metrics are available.

Strict privacy

  • Hashed IP and User-Agent are completely omitted from click records.
  • Unique clicks are unavailable-there is no data to deduplicate.
  • Aggregate click counts, geographic breakdowns, device breakdowns, and referrer data remain available.
  • Strict privacy can be set at the org level (applies to all workspaces), workspace level (applies to all links), or individual link level.

Privacy resolution order

The most restrictive applicable setting always wins:

  1. Organization policy (most restrictive-cannot be overridden by workspace or link settings).
  2. Individual link override (can make a link stricter than the workspace default, but not looser than the org policy).
  3. Workspace default.

Unique clicks and mixed privacy scopes

Unique clicks require all links in the reporting scope to be using standard privacy (hashed). If any link in the scope has effective strict privacy, the unique click total for that scope shows as unavailable.

This matters for workspace-wide reports:

  • A workspace with 100 links on standard privacy and 1 link on strict privacy will show unique clicks as unavailable for the workspace-level total.
  • Per-link analytics for standard-privacy links still show their own unique clicks correctly.

The seven analytics sub-pages

Your dashboard analytics are organized into seven sub-pages, accessible from Analytics in the sidebar:

Overview

The default view. Shows total clicks over time, a daily trendline, top-level breakdowns (country, device, referrer, touch type), and click counts per link. Use this for a quick pulse on overall workspace activity.

Acquisition

Focuses on where traffic is coming from. Shows referrer breakdown, social source classification, and UTM campaign/source distribution. Use this to understand which channels and campaigns are driving the most traffic.

Technology

Focuses on how visitors are accessing your links. Shows device category (mobile/tablet/desktop), operating system, and browser distribution. Use this to understand your audience's technology profile and to verify that device-targeted routing rules are reaching the right segments.

Geography

Focuses on where visitors are located. Shows country distribution, with drill-down to region and city where available. Use this to understand geographic reach and to verify geo-targeted routing rules.

QR Performance

Focuses only on QR-origin traffic. Shows QR scans over time, QR share of traffic, and top QR-enabled links without requiring you to rebuild the same filter every time. Growth plans and above can use the dedicated QR Performance page. Professional plans also add the live QR heatmap for recent QR scan geography.

Pages

Focuses on hosted pages and virtual business cards. Shows page and card views, QR-to-page funnel performance, key actions, leads, RSVPs, top pages, top cards, and supported metadata breakdowns. Use this to compare hosted content without opening each page or card detail view. For one hosted page, use the page's Track tab; for one card, use the card's Engagement tab. Link detail also shows a compact hosted-page summary when the link owns a hosted page.

Conversions

Shows conversion events recorded through the Conversion API, attributed back to specific clicks. Shows conversions by type (lead, sale, refund, etc.), attribution rate, conversions by link, and-for A/B-routed links-conversions by variant. Requires conversion tracking to be enabled on at least one link.


The QR trigger filter

Every analytics view includes a Trigger filter that lets you separate QR code scans from standard short URL clicks.

Filter valueWhat it shows
All triggersTotal traffic (short URL clicks + QR scans combined).
Short URLOnly standard link clicks.
QROnly clicks originating from QR code scans.

The trigger filter applies to all charts and breakdowns in the active view. Use it to understand the split between your QR and direct-link audiences.

QR scans are identified by the ?nr=qr parameter Nimriz embeds in every generated QR code. This parameter is stripped before the visitor reaches your destination URL.


Analytics for A/B experiments

When a link has an active A/B experiment, click analytics are attributed to stable variant keys. In the link's detail analytics:

  • Clicks are broken down by variant key alongside the current variant label.
  • Renaming a variant label does not change historical attribution-historical clicks remain under the original key.
  • The Conversions sub-page also breaks down conversions by variant key, so you can see not just which variant got more clicks, but which variant led to more conversions.

Nimriz does not calculate statistical significance. All experiment decisions are made based on the raw click and conversion counts you observe.


Real-time vs. reporting rollups

Realtime gives you a live event stream updated within seconds of each click. It is best for verifying that a campaign is working, debugging a specific redirect, or confirming that analytics are being logged. It only shows recent events and does not support date-range queries.

Reporting rollups are what the dashboard charts, totals, and breakdowns are built on. They are aggregated from the raw event store on a schedule, so they may lag a few minutes behind real traffic. They support date ranges up to 365 days and are the right source for campaign analysis, exports, and trends.

If you see clicks in Realtime but the dashboard total has not updated yet, wait a few minutes for the next sync cycle to complete.

See Realtime analytics for the full Realtime guide.


Analytics dimensions

DimensionDescriptionAvailability
country, region, cityGeo location from Cloudflare's edge data.Best-effort; may be null.
device_categorymobile, tablet, desktop.Derived from User-Agent.
browser_familyBrowser name.Best-effort.
os_familyOS name.Best-effort.
referrer_hostReferring domain.Often blank (privacy).
social_sourceDerived social platform classification.When detectable.
touch_typeStored analytics event key. Reporting surfaces normalize hosted-page and card engagement into canonical event labels such as Hosted Page Viewed, Lead Submitted, and Contact Saved.Always present.
bot_flagtrue for automated/bot traffic.Always present.
variant_keyA/B variant identifier (for routed links).When routing is active.
Hosted-page metadataBounded fields such as block_id, block_type, file_id, provider, target_host, and cta_kind.Available in supported drilldowns for hosted-page and card engagement events.

All dimensions are best-effort. Build downstream systems to handle null and missing values gracefully.


API access

GET /api/live-view

Returns recent click events for the Realtime view and for debugging.

{
  "source": "analytics_engine",
  "count": 1,
  "events": [
    {
      "clicked_at": "2026-04-01T12:34:56.000Z",
      "url_id": "22222222-2222-2222-2222-222222222222",
      "short_code": "spring-launch",
      "country": "US",
      "device_category": "mobile",
      "touch_type": "qr_scan",
      "bot_flag": false,
      "referrer_host": "instagram.com"
    }
  ]
}

GET /api/link-breakdowns

Returns top-N dimension breakdowns for a link over a date range.

Parameters: url_id (required), range_days (default 30, max 365), include_bots (default false), limit (default 5, max 20).

For focused drilldowns, GET /api/link-breakdown-dimension accepts standard dimensions plus hosted-page engagement metadata dimensions: block_id, block_type, file_id, file_role, provider, target_host, cta_kind, contact_action, and method_kind. The optional touch_type filter accepts canonical event keys and supported legacy aliases.

{
  "ok": true,
  "source": "analytics_engine",
  "url_id": "22222222-2222-2222-2222-222222222222",
  "range_days": 30,
  "sampled_counts": true,
  "dimensions": {
    "country": [{ "label": "US", "clicks": 120 }],
    "touch_type": [
      { "label": "Short URL", "clicks": 95 },
      { "label": "QR", "clicks": 25 }
    ]
  }
}

sampled_counts: true means click counts are statistical estimates, not exact totals. Very high-traffic links may show rounded values.


Troubleshooting

My dashboard shows no clicks even though links redirect correctly

  1. Open the Realtime analytics view to confirm events are being captured.
  2. If Realtime shows events but reports do not, wait for the next sync cycle (a few minutes).
  3. If Realtime also shows nothing, confirm the link is on the correct domain (host matching is strict).

Unique clicks are unavailable

Your workspace, a specific link, or your organization has strict privacy mode active. Check Settings → Account for your workspace's privacy setting, and check with your Org Admin whether an org-wide policy is enforced.

My analytics numbers differ from another tool

  • Nimriz counts redirect events at the edge. Other tools (Google Analytics, Plausible) count page-view events on your website. Not every redirect becomes a page view.
  • Bot filtering definitions differ between platforms.
  • Referrer data is often lost between the redirect and your landing page.
  • Report rollups in Nimriz have a slight lag. Use exports for precise reconciliation.

Traffic looks entirely like bots

Links shared in messaging apps (Slack, iMessage, WhatsApp) generate significant preview-bot traffic immediately after sharing. Filter to human-only traffic in the dashboard to see genuine engagement.


Related guides