Concepts
Scan Analytics
How EUlabel captures and reports QR code scan events.
Every QR code scan generates a structured event that feeds into the analytics pipeline, giving you visibility into how products are being engaged with.
Scan event structure
When a consumer scans a QR code, the resolver captures a scan event before redirecting:
{
"eventId": "evt_01H8ABC123XYZ",
"eventType": "scan",
"productId": "prd_01F8ABC123",
"timestamp": "2026-03-12T14:23:01Z",
"location": {
"country": "PT",
"region": "Lisboa",
"city": "Lisboa"
},
"referrer": "https://winebar.pt/menu",
"device": {
"type": "mobile",
"os": "iOS",
"browser": "Safari"
}
}Privacy
- Location data is derived from IP geolocation, not device GPS
- No personally identifiable information is stored
- Events are captured at the resolver layer before the redirect, so analytics are recorded even if the passport page fails to load
What you can track
| Metric | Description |
|---|---|
| Total scans | Total number of QR code scans per product |
| Geographic distribution | Scans broken down by country, region, and city |
| Device types | Mobile, tablet, and desktop breakdown |
| Top referrers | Where scans are coming from (wine bar menus, e-commerce sites, direct) |
| Time series | Scans over time at day, week, or month granularity |
Accessing analytics
Use the Analytics API endpoint or the EUlabel Dashboard to view scan data.
curl "https://api.eulabel.eu/v1/analytics/product/a1b2c3d4-...?start=2026-01-01" \
-H "Authorization: Bearer sk_live_..."Event types
The platform tracks events beyond QR scans:
| Event | Trigger | Description |
|---|---|---|
scan | QR code scanned | Primary engagement metric |
api_request | Passport retrieved via API | B2B integration usage |
passport_created | New passport published | Product lifecycle event |
passport_updated | Passport modified | Content change tracking |
webhook_delivered | Webhook sent to subscriber | Integration monitoring |