GDPR + QR analytics: what we hash, what we don't
- 1
The raw IP never reaches storage
When a scan arrives at the redirect endpoint, the handler computes an HMAC-SHA-256 of the IP address keyed by a deployment secret and writes only the truncated digest to the scan event's `ipHash` column. It is a keyed hash, not a plain digest: without the secret the value cannot be brute-forced back to an address. The full IP exists in server memory for at most one request, then is discarded. We never log it.
- 2
What's in a scan event
Per scan we store: the keyed IP hash, a session hash derived the same way, device type, OS and browser parsed from the user-agent, country (read from a CDN header — we run no IP-to-location lookup), language, referrer, UTM parameters, and a timestamp. Region and city stay empty unless a geo header supplies them. No name, no email, no advertising identifier — and no cookie is written to the scanner's device.
- 3
Bot traffic is flagged and excluded from every count
The user-agent is matched against 26 crawler, social-preview, headless-browser and HTTP-library patterns; a request that sends neither Accept nor Accept-Language is flagged too. Bot hits are recorded with `isBot = true` so the decision stays auditable rather than silently dropped, and they are excluded from every analytics count — and never forwarded to integrations or webhooks.
- 4
Retention is enforced by your plan, automatically
Scan-level rows are kept 30 days on Free, 12 months on Pro, 24 months on Business and 36 months on Agency. There is no retention setting to configure and none to forget: a background worker purges events once the window elapses, while daily rollups (scans per QR, per country, per day) remain for the historical charts. That is GDPR Article 5(1)(e), storage limitation, applied by machine.
- 5
No third-party data egress by default
Nothing is sent to Google Analytics, Meta Pixel or any external analytics unless you connect them yourself — both are available from Pro and both are opt-in. Once connected, those services receive only the scan events you selected, never raw IPs. Your scan data stays first-party: never sold, never shared with an ad network, never enriched by a third-party tracker.
- 6
Hosted forms and the conversion pixel
Scans are not the only inbound path. A hosted lead-capture form writes a lead row, and there the visitor genuinely did type an address — so it is kept two ways: a keyed HMAC for de-duplication and matching, plus an AES-256-GCM-encrypted copy that the leads screen decrypts on read. The consent checkbox is stored as its own field next to the record and is never inferred from the fact that a form was submitted. The conversion pixel at `/api/collect` is deliberately blunt: it caps the request body at 4 KB, answers 200 to everything so that probing it reveals nothing about which slugs or workspaces exist, and silently drops payloads it cannot parse. Neither path stores a raw IP either — form submissions are rate-limited on the same keyed hash used everywhere else.
Frequently asked questions
What is QRCode Suite?
QRCode Suite is a standalone QR code platform: create a free account and generate branded, dynamic QR codes in the browser — no WordPress required. Connectors bring the same codes to WordPress and WooCommerce, where orders can be attributed to specific QR codes.
Does QRCode Suite work without WordPress?
Yes. QRCode Suite is a standalone SaaS — sign up, create QR codes, and track scans entirely on qrcode-suite.com. The WordPress plugin is an optional connector that brings your codes into wp-admin and adds WooCommerce order attribution.
Does QRCode Suite require a separate subscription?
The Free plan is available at no cost — no credit card required. Paid plans (Pro €9, Business €29, Agency €79 per month) unlock unlimited codes, redirect rules, and more. There is no separate per-scan fee.
What QR code types does QRCode Suite support?
QRCode Suite supports 22 QR code types: Static URL, Dynamic URL, Plain Text, Phone, Email, Location, Link Hub, SMS, WhatsApp, Wi-Fi, vCard, Social profile, PDF, File download, App download, Coupon, Calendar event, Lead capture form, Review collection, Wholesale inquiry, Loyalty reward, and Custom payload.
Can I change the destination of a QR code after printing it?
Yes. Dynamic QR codes use a short redirect URL. You can update the destination from your dashboard at any time without generating or reprinting the code.