AR Code: Augmented Reality QR Codes Explained

Someone asks you for “an AR code” for their packaging. What are they actually asking for?
An AR code is a QR code that opens an augmented reality experience when you scan it. Point a phone at it, and a 3D product, character or scene appears in the camera view, sitting on your table or floor. No app download in most cases.
I build link and QR tooling at linkutm, so I spend a lot of time on what sits behind a printed code. The common assumption is that the AR lives inside the code. It doesn’t. The code holds one link. Everything else depends on the page, the 3D file and the phone. Get those three right and an AR QR code feels like magic. Get one wrong and it opens a blank page.
One quick naming note. “AR Code” is also the brand name of a commercial AR QR platform, and on legal sites “AR Code” means the Arkansas Code. This post is about the concept: augmented reality QR codes, how they work, and how to build one that works on both iPhone and Android.
I also ran two tests of my own: what your link choice does to the printed code, and how heavy real AR models are.
| Question | Short answer |
|---|---|
| What is an AR code? | A QR code whose link opens an augmented reality viewer |
| Does the viewer need an app? | Usually no. iPhone uses AR Quick Look, Android uses Scene Viewer or the browser |
| What files do I need? | USDZ for iPhone, GLB for Android (one GLB can cover both) |
| What should the code link to? | A short link to a web page, not the 3D file |
| How big can the model be? | Google recommends about 10 MB, under 100,000 triangles |
| Can I track scans? | Yes, the same way as any dynamic QR code |
What Is an AR Code?
An AR code is a QR code that encodes a link to an augmented reality experience. When scanned, the phone opens a web page or viewer that places digital 3D content into the live camera view. The QR code itself stores only the link. The phone’s AR software renders the content.
Augmented reality (AR) means digital objects drawn on top of your real surroundings, through the camera. That differs from virtual reality, which replaces your surroundings completely.
Here’s the thing: “AR code” is a job description, not a special barcode format. There is no AR version of the QR standard. A regular QR code becomes an AR code because of where it points.
To understand any AR code, you need five entities and how they connect:
| Entity | What it is | Its job in an AR code |
|---|---|---|
| QR code | A 2D barcode that stores text, usually a URL | Gets the person from paper to the link |
| Short link | A short URL that redirects to a longer one | Keeps the code small and lets you change the destination |
| AR landing page | A web page with a 3D viewer and an “AR” button | Detects the phone and hands off to the right viewer |
| AR viewer | AR Quick Look (iPhone), Scene Viewer (Android) or a WebXR browser | Uses the camera to place the model in your space |
| 3D model file | USDZ (Apple) or GLB (glTF binary) | The actual object people see |
The chain runs in that order. The QR code depends on the link. The link depends on the page. The page depends on the viewer, and the viewer depends on the file. A failure anywhere breaks the experience, and the person scanning blames “the QR code.”
My honest take on the limitation: the word “AR code” hides all of this. My first question for anyone who wants one: which 3D model do you have? No model, no AR code.

How Does an AR Code Work?
An AR code works in five steps: the camera reads the QR code, the phone opens the link, the page loads a 3D viewer, the viewer starts the camera, and the model is anchored to a surface it detects. Most of the work happens after the scan, on the phone, not in the code.
Okay, so step by step:
- Scan. The phone camera decodes the QR code and shows the link. The person taps it.
- Redirect. If it is a short link or dynamic code, a server redirects to the AR landing page. This is where the scan gets counted.
- Load the page. The page shows the product in 3D, usually with a “View in your space” button.
- Hand off. Tapping the button opens the phone’s AR viewer with the 3D file.
- Place. The viewer finds the floor or a wall and pins the model there. You walk around it like it’s real.
That handoff in step 4 is why most AR codes need no app. iPhones and many Android phones ship with an AR viewer already.
Link-based AR codes vs marker-based AR codes
There are two kinds of “AR code,” and vendors mix them up.
- Link-based (most common). The QR code is only a doorway. Once the viewer opens, the model is placed on your floor. The printed code plays no further part.
- Marker-based. The printed image itself is the anchor. The AR content sits on top of the code, poster or package, and moves with it. A marker or image target is a printed pattern the AR software recognizes and tracks. Open-source libraries like AR.js use this approach in the browser.
I prefer link-based for product marketing. It uses built-in viewers, works on more phones, and the person can put a sofa in their living room instead of on a flyer. Marker-based wins for packaging and posters where the content should “come out of” the print. The catch: marker tracking usually needs a custom web AR engine, which brings me to the platform problem.
AR QR Codes on iPhone vs Android: Two Viewers, Two File Formats
AR QR codes work on both iPhone and Android, but each platform opens a different viewer that expects a different 3D file. iPhones use AR Quick Look with USDZ files. Android phones use Google’s Scene Viewer with GLB files, and Chrome on Android also supports WebXR. A good AR landing page serves both.
Here’s how they compare:
| iPhone and iPad | Android | |
|---|---|---|
| Built-in AR viewer | AR Quick Look | Scene Viewer |
| 3D file format | USDZ | glTF 2.0 or GLB |
| Since | iOS 12 (Safari) | ARCore devices on Android 7.0+ |
| Browser AR (WebXR) | Not in Safari on iPhone | Yes, Chrome |
| What else it needs | Nothing extra | Google Play Services for AR and an up-to-date Google app |
| Web link format | <a rel="ar"> wrapping an image |
intent://arvr.google.com/scene-viewer/... link |
Sources: Google’s Scene Viewer documentation and WebKit’s AR Quick Look announcement.
A few terms in that table:
- USDZ is a 3D file format created by Pixar and adopted by Apple. It packs the model and its textures into one file.
- glTF is an open 3D format from the Khronos Group. GLB is its binary version, one self-contained file.
- ARCore is Google’s AR platform for Android. Only phones on Google’s supported device list can run AR.
- WebXR is the browser standard for AR and VR. It lets a web page run AR itself, with no handoff.
The easy way to cover both: one web page
You don’t need to build two experiences. Google’s open-source model-viewer web component handles the split for you:
<script type="module" src="https://ajax.googleapis.com/ajax/libs/model-viewer/4.1.0/model-viewer.min.js"></script>
<model-viewer src="oslo-chair.glb" ios-src="oslo-chair.usdz"
ar ar-modes="webxr scene-viewer quick-look"
camera-controls alt="Oslo chair in 3D"></model-viewer>
Its default AR order is WebXR first, then Scene Viewer, then Quick Look. It picks the first one the phone supports. If you leave out ios-src, model-viewer generates a USDZ on the fly when an iPhone user taps the AR button.
Real talk on the trade-off: that on-the-fly USDZ doesn’t support animations yet, per model-viewer’s own docs. If your model moves, export a proper USDZ file too.
Also, the platforms keep moving. Niantic ended editing on its 8th Wall WebAR platform on February 28, 2026, and hosted projects stop serving after February 28, 2027, according to its migration FAQ. Meta shut down third-party Spark AR effects on January 14, 2025. Built-in viewers and open standards are the safer bet for anything you print.
What Should an AR QR Code Link To? My Payload Test
An AR QR code should link to a short URL that redirects to an AR landing page. I tested five ways to encode the same AR experience. The short link made the smallest, most robust code: version 2 at error correction level M. Google’s Scene Viewer intent link made a version 12 code with modules more than 2.5 times smaller.
Why does this matter? A QR code’s version is its grid size, from 21 by 21 squares (version 1) up to 177 by 177 (version 40). Each square is a module. More characters means more modules. Print the code at the same width and every module shrinks, which makes it harder for cameras to read.
Here’s what I did. I took one fictional product, an “Oslo chair,” and encoded five payloads with segno 1.6.6. Every URL uses a reserved .example domain, so no code here can ever open a real site. I built each at error correction level M (the usual default) and level H (what you’d use with a logo on top). Then I decoded every code with zxing-cpp 3.1.1 to confirm it round-tripped. All ten decoded. These were clean digital renders, not phone photos.
| What the code links to | Characters | Level M | Module width at 2.5 cm (M) | Level H | Module width at 2.5 cm (H) |
|---|---|---|---|---|---|
| Short link to the AR page | 22 | V2, 25 x 25 | 1.00 mm | V3, 29 x 29 | 0.86 mm |
| AR landing page, untagged | 39 | V3, 29 x 29 | 0.86 mm | V5, 37 x 37 | 0.68 mm |
| AR landing page with UTM tags | 101 | V6, 41 x 41 | 0.61 mm | V10, 57 x 57 | 0.44 mm |
| Direct USDZ file (iPhone only) | 52 | V4, 33 x 33 | 0.76 mm | V6, 41 x 41 | 0.61 mm |
| Scene Viewer intent link (Android only) | 286 | V12, 65 x 65 | 0.38 mm | V18, 89 x 89 | 0.28 mm |
Data: research/ar-code-test-2026-10-26.json.
Three things stood out to me.
First, the “obvious” Android link is the worst choice for print. Google documents the Scene Viewer intent:// link for buttons on a web page. Pasted into a QR code with its fallback URL, it hit 286 characters and version 12. At 2.5 cm wide, each module is 0.38 mm. That is a tough read on a curved bottle or a glossy box.
Second, linking straight to the 3D file locks out half your audience. A USDZ link only opens AR on Apple devices. A GLB link does the same on the other side. A landing page is the only payload that serves both.
Third, UTM tags cost you three to five versions. Tagging the landing page jumped the code from V3 to V6 at level M. A short link carries the tags on the server side, so the printed code stays at V2. If you want the module math behind that, my QR code smallest size guide covers how URL length changes the minimum print size.
The limitation of my test: I didn’t test how each phone camera treats an intent:// link. Many scanners only open http and https links. I wouldn’t print an intent link either way.

How Heavy Can an AR Model Be? My File-Weight Test
Google recommends Scene Viewer models of about 10 MB or less, under 100,000 triangles, with textures no larger than 2048 by 2048 pixels. Its validator flags files over 15 MB as errors. I measured six public sample models. The three GLB files were 2.87 to 4.13 MB. The three Apple USDZ samples were 9.02 to 13.96 MB, mostly textures.
File weight matters more for AR codes than for websites. Someone scanning a package in a store is often on mobile data. Nothing appears until the model downloads.
I downloaded each sample, counted triangles (for GLB files, from the glTF data inside), found the largest texture, and worked out download time at 5 Mbps and 25 Mbps. Download time here is file size divided by bandwidth, so real loads will be a little slower.
| Sample model | Publisher | Format | Size | Triangles | Largest texture | At 5 Mbps | At 25 Mbps |
|---|---|---|---|---|---|---|---|
| Astronaut | Google model-viewer | GLB | 2.87 MB | 1,604 | 2048 x 2048 | 4.6 s | 0.9 s |
| DamagedHelmet | Khronos | GLB | 3.77 MB | 15,452 | 2048 x 2048 | 6.0 s | 1.2 s |
| SheenChair | Khronos | GLB | 4.13 MB | 39,936 | 1024 x 1024 | 6.6 s | 1.3 s |
| Teapot | Apple Quick Look gallery | USDZ | 9.02 MB | n/a | 2048 x 2048 | 14.4 s | 2.9 s |
| Vintage robot | Apple Quick Look gallery | USDZ | 12.33 MB | n/a | 2048 x 2048 | 19.7 s | 3.9 s |
| Toy drummer | Apple Quick Look gallery | USDZ | 13.96 MB | n/a | 2048 x 2048 | 22.3 s | 4.5 s |
Data: research/ar-code-test-2026-10-26.json.
Look, the triangle count was never the problem. The Astronaut has 1,604 triangles and still weighs 2.87 MB, because one 2048 by 2048 texture does most of the work. Inside the USDZ files, the geometry layers were only 1.01, 4.26 and 2.54 MB. Textures and other assets made up 93%, 53% and 79% of those files.
So my rule for an AR code budget is simple:
- Aim for under 5 MB. That loads in about 8 seconds at 5 Mbps.
- Shrink textures first. Dropping from 2048 to 1024 pixels cuts each texture’s pixel count by 75%.
- Keep triangles well under Google’s limit. Its ideal range is 30,000 to 50,000.
- Test on mobile data, not office Wi-Fi.
The honest caveat: these are different objects, and Apple’s gallery models are showcase pieces. This is not a fair GLB vs USDZ format comparison. It does show that “sample” models can blow past a mobile budget.

How to Create an AR QR Code (6 Steps)
To create an AR QR code, get a 3D model, export it as GLB (and USDZ if it’s animated), put it on a web page with a 3D viewer, make a short link to that page, turn the link into a dynamic QR code, and test it on both an iPhone and an Android phone before printing.
Here’s the process I’d follow:
- Get a 3D model of the product. Ask your product or design team for the CAD or 3D file. If none exists, a 3D scanning app or a 3D artist can create one. This is usually the slowest step.
- Export and optimize it. Export a GLB file. Add a USDZ export if the model has animation. Shrink textures to 1024 or 2048 pixels and check the file is under 10 MB, ideally under 5 MB.
- Build the AR landing page. Host both files and add a viewer like model-viewer. Include a product name, a plain image fallback and a “View in your space” button.
- Create a short link to the page. Add UTM parameters to the destination, not to the printed code, so the code stays small.
- Generate a dynamic QR code from the short link. A dynamic QR code lets you change the destination after printing, which matters when your AR host shuts down.
- Test before you print. Scan it on at least one iPhone and one Android phone, on mobile data. Check that the model appears at real-world scale.
What about no-code AR QR platforms? They bundle steps 2 to 5: upload a model, get a code. That’s faster. The trade-off is lock-in. If the vendor’s hosting ends, so does every code you printed with its URL. That is exactly what 8th Wall customers are working through right now.
How to Track AR QR Code Scans
You track AR QR code scans the same way you track any QR code: the code points to a short link that counts each scan, and UTM parameters on the destination send campaign data to GA4. The AR viewer itself rarely reports anything, so the scan and the landing page are your main data points.
Here’s the measurement chain I recommend:
- Scans: counted by the dynamic QR code or short link before the redirect.
- Visits and source: UTM parameters on the AR landing page URL show up in GA4 as source, medium and campaign.
- AR launches: a GA4 event on the “View in your space” button tells you how many visitors actually opened AR.
- Device split: device and OS data shows the iPhone vs Android mix, which tells you which file to optimize first.
If you print one code on packaging, another in a store and a third in a catalog, give each its own short link and utm_content value. My guide to tracking QR code campaigns with UTM parameters walks through the naming.
Some teams send iPhone and Android users to different URLs from one code. That’s called device targeting. With model-viewer you rarely need it, because one page already handles both.
The limitation: once the person is inside Quick Look or Scene Viewer, you lose sight of them. You won’t see how long they looked at the model or whether they placed it. The button click is the last reliable event.

Where AR Codes Work Best (and Where They Don’t)
AR codes work best when seeing an object at real size, in your own space, answers a buying question. Furniture, appliances, packaging, education and exhibits are the classic fits. They work poorly when a photo or video already answers the question.
The test I use: would the buyer ask “will it fit?” or “how big is it really?” A chair in a corner, an appliance on a counter, a machine you can’t ship to a trade show booth. Those earn an AR code.
The commercial case gets quoted a lot. Shopify says merchants using 3D commerce have reported an average 94% increase in conversions compared to photos alone. Treat that with care. Shopify hasn’t published the methodology, and shoppers who open 3D views may already be closer to buying.
AR itself is mainstream, just not always through QR codes. Snap reported in its Q3 2025 results that more than 350 million Snapchatters engage with AR every day on average. Those are Lenses inside one app. A web AR code runs in the phone’s own camera and browser instead.
Where I’d skip AR codes:
- Desktop-only journeys. If people meet the experience on a laptop, there is no camera AR. model-viewer falls back to a 3D view they can rotate.
- Older or unsupported phones. Android AR needs an ARCore-supported device. Everyone else gets 3D only.
- When there’s no good model. A low-quality model looks worse than a good photo.
- Tight deadlines. Getting a clean, light 3D model often takes longer than the whole print job.
Frequently Asked Questions
What does AR code mean?
AR code usually means a QR code that opens an augmented reality experience, placing a 3D object in your camera view. It is also the name of a commercial AR QR platform, AR Code. On legal sites, “AR Code” is short for the Arkansas Code, the state’s statutes.
Do you need an app to scan an AR code?
No, not for most AR codes. The phone’s built-in camera reads the QR code, and the AR runs in AR Quick Look on iPhone or Scene Viewer and Chrome on Android. App-specific experiences, like a Snapchat Lens opened from a Snapcode, do need that app.
Do AR QR codes work on all phones?
They work on most modern phones, but not all. iPhones support AR Quick Look in Safari since iOS 12. Android needs an ARCore-supported device on Android 7.0 or later with Google Play Services for AR. Phones without AR support can usually still show the 3D model on screen.
What is the difference between USDZ and GLB?
USDZ is the 3D format Apple’s AR Quick Look uses on iPhone and iPad. GLB is the binary form of glTF, the open format Google’s Scene Viewer and most web 3D viewers use. A page built with model-viewer can serve both, and can generate USDZ from GLB automatically.
How do I make a QR code for a 3D model?
Host the 3D model on a web page with a 3D viewer, then create a QR code that links to that page. Use a short link or dynamic QR code rather than the file URL. That setup is what people usually mean by a 3D model QR code. A direct USDZ or GLB link only works on one platform and makes a denser code.
Can you track AR QR code scans?
Yes. Point the code at a trackable short link to count scans, and add UTM parameters to the landing page so visits show up in GA4. Add a GA4 event on the AR button to measure how many people actually launched AR.
Is 8th Wall shutting down?
Yes. Niantic ended logins, editing and exports on 8th Wall on February 28, 2026. Hosted projects keep running until February 28, 2027, after which hosting is decommissioned. The engine was open-sourced, and printed codes pointing at 8th Wall URLs need a new destination before that date.
AR Codes Are Links First, AR Second
An AR code is a QR code with a 3D experience at the end of its link. The code is the easy part. The page, the viewer and the file decide whether it works.
- Link the AR code to a short URL, not the 3D file. In my test, that meant version 2 instead of version 12.
- Serve USDZ and GLB from one model-viewer page, so iPhone and Android both work.
- Keep models under 10 MB, ideally under 5 MB. Shrink textures first.
- Use a dynamic code, because AR platforms shut down and printed codes don’t update themselves.
Pick one product that already has a 3D model, build the page, and test it on two phones before anything goes to print.
When you’re ready to print, create a trackable QR code for your AR landing page. You’ll count every scan, keep the printed code small, and can switch the destination later without reprinting.