MostlyQR

Analytics

Every scan of a dynamic link is counted. Paid plans also get geo / device / time breakdowns, read per code.

bash
curl "https://mostlyqr.com/api/v1/links/AZ4K9/analytics?range=30d" \
  -H "Authorization: Bearer mtq_live_…"
Query Notes
range 24h, 7d, 30d, or all (default all).
json
{
  "code": "AZ4K9",
  "scan_count": 4218,
  "range": "30d",
  "analytics": {
    "total": 4218,
    "byDay": [{ "day": "2026-06-01", "count": 121 }],
    "byCountry": [{ "key": "GB", "count": 2600 }],
    "byDevice": [{ "key": "mobile", "count": 3900 }],
    "byOS": [{ "key": "iOS", "count": 2360 }],
    "byReferrer": [{ "key": "instagram.com", "count": 410 }]
  }
}

# Free vs paid

  • Free returns the scan count only (capped in the display at 1,000+), and the analytics block reports upgradeRequired: true instead of the geo/device sections — scans are never lost, just not broken down.
  • Pro / Team / Enterprise return the full analytics object above.

Scan counts are served off cheap counters; the breakdowns query a bounded window of scan events, so very busy codes aggregate over their most-recent slice (a truncated: true flag tells you when).

# Where the data comes from

The redirect records each scan with a coarse, IP-derived geo (≈ city) and a parsed user-agent — never precise location or PII. See the privacy note in the dashboard.

# Next