Routing QR Code Scans by Device, Location, Time or Language
By the CirculateQR team · Updated · 7 min read
Short answer
Yes, if the code is dynamic. A dynamic QR code’s short link is resolved by a server at the moment of each scan, so the server can check rules such as the phone’s operating system, the local time, the phone’s language or an approximate location, and send each scan to a different page. Rules are checked in priority order, the first rule whose conditions all match decides, and everything else goes to a default page. Location comes from the IP address, not GPS, so it is approximate.
On this page
Key facts
- Routing happens on the redirect server at scan time. The printed code never changes.
- Rules run in priority order. Every condition in a rule must match, and the first matching rule wins.
- Every routed code needs a default destination for scans that match no rule.
- IP-based location is a city-level guess. MaxMind estimates about 66% accuracy for US cities within 50 km (as of October 2026).
- Language routing reads the phone’s language setting, not the person’s nationality.
- A random A/B split is decided per scan, so one person can see both versions.
- In CirculateQR, device and language routing are on every plan; time, date, location and A/B rules come with Studio; weather routing with Artisan.
How does QR code routing work?
A dynamic QR code holds a short link. When a phone opens it, the QR service’s server decides where to send the browser. Routing means that decision depends on the scan instead of being the same for everyone. The server works from what the phone’s request reveals: the time, the browser’s user agent, the language setting and the IP address.
A routed code has a list of rules and a default destination:
- Each rule has one or more conditions and a destination.
- Rules are checked in priority order.
- All conditions in a rule must match. “Weekday AND 4–6 pm” needs both.
- The first rule that matches decides. Later rules are not checked.
- If nothing matches, the scan goes to the default destination.
Which conditions can a routing rule check?
These are the conditions CirculateQR offers, with what each one actually reads from the scan.
| Condition | What it reads | Watch out for |
|---|---|---|
| Device | iPhone/iOS, Android, desktop or any mobile, from the user agent | Safari on iPad requests desktop sites by default, so an iPad can look like a Mac |
| Time of day | Time windows in the scanner’s local time zone, estimated from the IP | A VPN in another time zone shifts the clock |
| Day of week | The scanner’s local day | Combine with time for “weekdays 4–6 pm” |
| Language | The first preferred language in the phone’s settings | A setting, not a nationality |
| Weather | Clear, cloudy, foggy, rainy, snowy or stormy at the approximate location | Only as good as the IP location |
| Location | Inside or outside a radius around a point, from IP-based location | Not GPS; can be off by a city or more |
| Scan count | Total scans of the code so far | Counts scans, not people |
| Scan rate | Scans within a time window, up to a maximum you set | Shared by everyone scanning |
| Random split | A percentage of scans, for A/B tests | Decided per scan, not per person |
| New vs returning | Whether this hashed IP address has scanned before | Shared WiFi makes newcomers look like repeat visitors |
What can routing get wrong?
Routing is only as accurate as the signals behind it. Device and time are reliable. Location is not. IP geolocation finds the right country for most scans but often misses the city: MaxMind, a large provider, estimates about 66% accuracy for US cities within 50 km (as of October 2026). A VPN shows the VPN server’s location, not the person’s, and mobile networks can place a phone in a city some distance away.
So design rules that fail gracefully:
- Make the default useful. A store finder’s default should list every store, not show an error.
- Let people switch. A Spanish page should link to the English one. Plenty of Spanish speakers keep their phone in English.
- Avoid tight radii. A 2 km circle around a shop will miss many customers standing at its door. Use radius rules to pick the nearest region, not to prove presence.
- Remember A/B splits aren’t sticky. Someone who scans twice may see both versions, so judge tests on scans, not on what one person reports.
What are good uses for one code with several destinations?
| Use | Rules | Default |
|---|---|---|
| App download | Device = iPhone → App Store; device = Android → Google Play | Web page with both store badges |
| Menu by time | 07:00–10:59 → breakfast; 11:00–15:59 → lunch | Dinner menu |
| Happy hour | Mon–Fri AND 16:00–17:59 → happy hour list | Regular drinks menu |
| Store finder | Inside 15 km of store A → store A page; inside 15 km of store B → store B page | List of all stores |
| Multilingual sign | Language = Spanish → Spanish page; language = French → French page | English page |
| Weather promo | Weather = rainy → indoor activities offer | Regular offer |
| Limited giveaway | Scan count below 100 → prize page | “All claimed” page |
A time window includes both its first and last minute, which is why the menu example uses 10:59 and 11:00 rather than 11:00 twice. Overnight windows such as 22:00–06:00 work too. For the full menu setup, see how to make a restaurant menu QR code. There is also a free app store QR code generator.
How do you test routing rules before printing?
Test every rule and the default with real phones, not just a preview:
- Device: scan with an iPhone and an Android phone, and open the short link in a desktop browser.
- Time and day: temporarily set a window that includes the current time, scan, then restore it. Then do one real scan just after each boundary.
- Language: move another language to the top of the phone’s language list (on iPhone, Settings → General → Language & Region), scan, and switch back. Some browsers keep their own language list.
- Location and weather: look at your own test scan in the analytics. The city it shows is what the rule sees, which may not be where you are. A VPN set to another city tests the “outside” case.
- Random split: scan 20 times and check both pages appear in roughly the planned proportion.
- New vs returning: your first scan from a network is new and the next is returning. Switching from WiFi to mobile data can make you new again.
Then check the scan log. A good tool records which rule or destination each scan used, which turns “it went to the wrong page” into a fixable rule. See what scan analytics record.
How does routing work in CirculateQR?
CirculateQR rules can combine device, time of day, day of week, language, weather, location radius, scan count, scan rate, random split and new vs returning visitor. Rules run in priority order, all conditions must match, the first match wins, and otherwise the code uses its default destination. Each scan records which rule or destination it used, and the code’s UTM tags are added to whichever destination is chosen.
Per the pricing page, device and language routing are on every plan; time, date, location and A/B rules are included from Studio ($12/month); and weather routing from Artisan ($39/month). There is no country or city condition and no GPS routing: use a radius for places. For a dated promotion, use a date rule, or give the code an end date, after which scanners see a message that the campaign is over.
Frequently asked questions
Can a QR code know the exact location of the person scanning it?
Not from the scan alone. The redirect server sees only the IP address, which gives an approximate location, usually the right country and often only a nearby city. Exact GPS location needs the web page to ask the visitor for permission through the browser, and the visitor can say no.
Can one QR code send iPhone and Android users to different app stores?
Yes. A dynamic code with device rules sends iPhones to the App Store and Android phones to Google Play, read from the browser’s user agent at scan time. Set the default destination to a web page with both store links, for desktop scans and anything unrecognized.
Will an A/B test show the same person the same page every time?
Not with a per-scan random split. Each scan is assigned independently, so a person who scans twice can land on both versions. Judge the test on totals, such as scans and conversions for each version, rather than on what any one person saw.
Can I route QR code scans by country?
Not in CirculateQR, which has no country condition. Use a radius around a point, which can cover a region or most of a small country, or a language rule, which often serves the same purpose for multilingual audiences. Any country rule would also depend on IP location.
What happens if a scan matches none of the routing rules?
It goes to the default destination. Every routed code should have one, and it should work for anyone: a full store list, an English page with language links, or the regular menu. Test the default as carefully as the rules.
Last updated . Written by the CirculateQR team. Spotted something wrong or out of date? Email support@circulateqr.com.
Route one printed code to the right page
Create a dynamic code, add device or language rules (free) or time and location rules (Studio), and test them on your own phone before you print.
Related guides
- Dynamic vs Static QR Codes: What Is the Difference?What is a dynamic QR code, and how is it different from a static one?
- How to Track QR Code Scans, and What Analytics MissHow do I track how many people scan my QR code?
- How to Make a QR Code for a Restaurant MenuHow do I make a QR code for my restaurant menu?
- QR Codes in Print: UTM Tracking and Measuring ResultsHow do I measure the results of QR codes in print marketing?