Analytics
Every scan of a dynamic link is counted. Paid plans also get geo / device / time breakdowns, read per code.
# Per-link analytics
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). |
{
"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: trueinstead of the geo/device sections — scans are never lost, just not broken down. - Pro / Team / Enterprise return the full
analyticsobject 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
- Dynamic links · the full API reference.