Detailed Scan Tracking
Every scan is logged with real IP address (Cloudflare-aware), city, region, country, ISP, and device type. Geo-data is cached per IP to stay within API limits.
Tuxxin QR Track is a lightweight, self-hosted QR code management system. Create dynamic codes for URLs, WiFi, vCards, maps, and more — then track every scan with real-time geo-location, device detection, and a clean dark-mode dashboard.
Free & open source — self-host on any Linux server with PHP 8.0+ and SQLite.
Print a QR code once and update its destination whenever you need to — no reprinting required. QR Track stores a short redirect UUID on the code itself. The actual destination is managed through your dashboard and can be changed at any time.
Every scan is logged with real IP address (Cloudflare-aware), city, region, country, ISP, and device type. Geo-data is cached per IP to stay within API limits.
URL, WiFi (WPA/WEP/Open), vCard, Maps, Phone, SMS, Email, and Social Media. Each type generates the correct format with the right redirect or inline content.
CSRF-protected forms, constant-time API key comparison, HttpOnly session cookies, MIME-validated file uploads, and all sensitive files blocked from web access.
Full JSON API for creating and retrieving QR codes. Configurable per-IP rate limiting, expiring image tokens, and a built-in Live Console — API key never reaches the browser.
Upload a PNG or JPG logo to embed in the center of any QR code.
MIME type is validated server-side via finfo, not file extension.
Deleted QR codes are soft-deleted and appear in a Trash view. Restore them at any time with one click — scan history is preserved.
Redirect scanners to any website. Fully trackable — update the destination at any time.
WPA, WEP, or Open networks. Scan to connect instantly — no typing credentials. Not trackable by design.
Scan to save a contact card directly to the phone’s address book. Name, phone, email, company.
Open Google Maps to any address or location query. Great for businesses, events, and venues.
Trigger a phone call to any number. Scan on a mobile device and the dialer opens immediately.
Pre-fill a text message to a phone number. Useful for support lines, surveys, or contests.
Open a mail app with a pre-filled address, subject, and body. One scan, ready to send.
Link to any social media profile or page. Trackable — see how many scans your social links generate.
QR Track v2 was built with security as a primary concern, not an afterthought. Every attack surface has been addressed.
hash_equals())?api_key= GET paramHttpOnly, SameSite=Strict, Secure session cookiesfinfoMost QR code services charge monthly fees, limit scans, and own your data. QR Track runs on your server — you own everything.
Run on shared hosting, a $5 VPS, or even a home server exposed securely via a Cloudflare Tunnel — no public IP or port forwarding required. No subscription, ever.
Scan logs never leave your server. No third-party analytics middlemen.
Create as many codes as your SQLite database can hold.
Clone, composer install, edit config.php — live in minutes.
# Quick Install
$ git clone https://github.com/tuxxin/qr-track.git
$ cd qr-track && composer install
$ mkdir -p ~/db ~/tmp
$ # Edit config.php with your settings
✓ Visit your domain — database auto-initializes
Debian or Ubuntu recommended. Any modern Linux distribution with Apache or Nginx.
With extensions: sqlite3, gd, curl, mbstring, fileinfo.
No separate database server needed. One file, zero configuration.
Used to install the chillerlan/php-qrcode library for QR image generation.
yoursite.com/p/abc123)
rather than the final destination directly. This means you can update the destination at
any time from the dashboard without reprinting or redistributing the code.
X-Api-Key header. You can list all QR codes
(GET /api.php), fetch one by UUID (GET /api.php?uuid=…),
or create a new code (POST /api.php). A full Live Console is built into
the dashboard — the API key is never exposed in the browser HTML.
USE_CLOUDFLARE_TUNNEL to true in config.php
and QR Track will extract the real visitor IP from X-Forwarded-For /
CF-Connecting-IP headers. It also handles Apple iCloud Private Relay
and other proxy scenarios gracefully.
Explore the live demo, then clone the repo and deploy it on your own server in minutes.