Animated QR codes — when they work and when they don't
Animated QR codes look futuristic and scan worse than the static ones they replace. Here is when animated QR codes work and when they don't.
An animated QR code is a QR code that morphs, pulses, or cycles through frames in a GIF or short video. It looks like the future. It scans like a coin flip. The decoder a phone uses to read a QR needs the camera to hold the same modules in frame for long enough to sample them — and "long enough" is most of a second. Anything that changes inside that window costs scans. Most animated QR codes you see in the wild are losing 20-60% of attempts in real conditions, and the brand never finds out because there's nothing to measure when the user just walks away.
This post is the honest version. The mechanics of why animation hurts decoding. The narrow set of cases where it's worth the cost. The trick that lets you keep the animation and not lose the scans. And the broader point: animated QRs are a designer's idea, not a marketer's, and the marketer is the one paying for it.
What "animated QR code" actually means
The phrase gets used for three different things, and they fail differently.
Frame-cycle animation. A GIF or MP4 where the QR's modules visibly change between frames — different colours, modules sliding in and out, the code "transforming" while you watch. This is the worst kind for scanning and the most common on Pinterest mood boards.
Static code, animated decoration. The QR's modules never change, but a logo, ring, or particle effect animates around or behind them. Used well, this is fine — the decoder samples the static modules and ignores the moving decoration. Used badly, the animation overlaps the modules and breaks them anyway.
Multi-payload animation. A handful of generators cycle between two or three different QR codes pointing at different URLs ("different offer every five seconds"). Each individual code is static for its window, but the viewer doesn't know which one they caught. Mostly a gimmick; the chance of scanning the offer the campaign wanted is one in three.
The technical limits below apply to all three, but they bite hardest on the first.
Why the decoder needs a stable frame
A phone's scanner doesn't grab a single instant from the camera and call it done. It runs four stages in sequence: locate the finder patterns, lock the perspective grid, sample every module's dark/light value, decode and verify with error correction. The bottleneck stage is sampling — about 250-400ms of needing the modules to stay put.
If anything inside the QR's data area changes during sampling, the decoder doesn't fail gracefully. It mixes samples from before-the-change and after-the-change, the error-correction step rejects the inconsistency, and the pipeline restarts. The user sees a phone that "thinks" for two or three seconds before deciding the code worked — or doesn't decide at all.
The practical rule: a single QR frame needs to stay still for at least 500ms, and 1000ms is safer. That number isn't from a vendor's tip sheet — it's what falls out of the decode pipeline that Apple and Google ship in iOS Camera and Google Lens. Both use roughly the same architecture as the open-source ZXing barcode library, and ZXing's documented sampling window is in that range.
What animation costs in scan rate
There's no public study that measures animated-QR scan rates at scale, partly because the brands shipping them don't track failures and partly because nobody's funded the research. What follows is the back-of-the-envelope you can do yourself with a phone, a paper print, and ten attempts.
A static round QR with level Q error correction, printed at 4cm × 4cm, scanned from 30cm under indoor LED light, will scan 10/10 attempts on every modern phone. The same QR animated to morph between two designs at 2fps — half a second per frame, which is already at the edge of the decode budget — drops to roughly 6-7/10. Push the animation to 4fps and you're at 2-3/10. Push it to 8fps (the speed most "transforming QR" generators ship at) and you're at 0-1/10. The codes scan on the designer's laptop because the designer is holding the camera 8cm from a high-DPI screen with the QR magnified, which makes stage 1 (locate) instant and stage 3 (sample) very fast. At normal scan distance with normal cameras, the budget is gone.
The brands that ship these and don't notice the failure rate are the brands that don't measure anything beyond impressions. The QR is on the screen, the screen plays in front of a thousand people, "engagement" is the number of eyeballs, and whether those eyeballs converted to scans is a separate report nobody runs. We've covered the underlying problem in the hidden cost of not tracking your short links — what you don't measure, you don't fix, and what you don't fix gets worse on the next campaign.
A related "moving picture" case worth understanding before you ship: a static QR printed alongside a print-to-video call-to-action lets you keep the still-frame scan rate while still selling motion to the reader. The print-to-video playbook for QR codes that point at YouTube, Vimeo, and Loom covers when the right answer is a stationary QR pointing at a video destination rather than animating the QR itself.
The cases where animation is worth it
Three scenarios where an animated QR actually earns its keep. They share a common feature: the animation is slow, the static frame is unambiguous, and there's a fallback path if the scan fails.
1. Digital signage where attention is the bottleneck
You're running a screen in a high-traffic spot — a transit station, a shopping centre, the back wall of a coffee shop. The static QR on the screen gets ignored because the eye doesn't catch it. A gentle animation — a pulsing mint ring around a static code, a subtle scale-in-and-out, a "scan me" arrow that slides in — pulls attention without touching the modules.
Critically: the QR itself doesn't change. The animation is decoration around a static centre. The modules are the same in frame 1 and frame 60. The decoder gets its 500ms of stability whenever the user points the phone, because the code is always there in the same state.
This is the only animation pattern that scales. Done well, it lifts scan rates over a static code on the same screen because more people notice. Done badly — code modules animating, code shrinking and growing inside the decoder's sample window — and it nukes the scan rate.
2. Reveal animation with a 2-3 second hold
A QR that fades in over half a second and then sits still for three seconds before fading out is fine. The decoder gets a clean window during the hold. This pattern works for promo videos where the QR appears in the last few seconds of a clip — a perfume ad ends with a code in the corner that scrolls in, settles, holds, and slides off as the clip ends.
The rule: the code is stationary for at least one full decode budget (1000ms) inside the animation. Less than that and you're back to coin flips.
3. The two-state "scanning" effect
A subtle pattern: the static QR sits there, and once every five seconds a single faint mint sweep crosses it left-to-right over half a second. The modules underneath stay unchanged the whole time — the sweep is a semi-transparent overlay that doesn't alter the dark/light pixels enough to confuse the decoder. The animation says "this is a scannable thing, look at me", but it doesn't fight the scan.
This works because the overlay opacity stays under about 30%. The decoder reads the modules through the sweep just like it reads through reasonable lens flare. Push the opacity past 50% and the decoder loses contrast in the sample window during the sweep — same failure as the morph-between-frames version, just less obvious.
The mistake the designer makes
Almost every "animated QR" that shows up in a portfolio commits the same mistake: the designer treats the QR as a visual asset that can morph the way a logo intro morphs. The QR is not an asset. It's a piece of working machinery that needs to hold still long enough to be read.
The mental model that's correct: a QR code is closer to a phone number than to a logo. You wouldn't animate a phone number in a way that makes the digits unreadable while someone is trying to dial it. The QR has the same job — get the data into a phone — and the same failure mode when you decorate around the readability.
The mental model that's wrong: "the QR is part of the brand experience, so it should breathe and feel alive." It can feel alive. It cannot stop being readable. Those are different requirements, and the second one is fixed by the camera's sampling rate, not by what looks good on the moodboard.
A QR code is closer to a phone number than to a logo. You don't animate the digits while someone is trying to dial it.
A scoring sheet for your animated QR
Five checks. If your animation idea clears 4 of 5, it'll scan. Below that, ship a static code with animated decoration around it instead.
Will this animated QR actually scan?
The widget saves your answers locally so you can come back to it. The pattern that clears the bar consistently is the one in scenario 1 above — static modules, animated decoration, large enough for the room.
The GIF and MP4 mechanics
A working animated QR almost always ships as a GIF or a short looping MP4. Each format has a tax.
GIF. Universally supported, but capped at 256 colours per frame and chunky compression artefacts. The QR modules survive the colour cap fine (the code is two colours), but the artefacts can soften the module edges enough to cost contrast at small sizes. Keep the GIF at least 1.5x the final display size and dithering disabled on the QR layer.
MP4 / H.264. Cleaner edges, smaller file size, harder to embed in some email clients and digital-signage CMSes. The codec compresses temporally — frames that don't change much get less data. That's a feature for animated QRs because the modules don't change much; the compressor mostly encodes the decoration around them.
APNG. Technically the best for QR animation — lossless, real alpha — but support is patchy enough that you shouldn't rely on it. If your signage stack handles APNG, prefer it for the static-module-plus-overlay pattern. Otherwise stick to MP4 for digital and GIF for anywhere MP4 isn't accepted.
Lottie / JSON animation. The right answer for web-embedded animated QRs. The QR underneath is rendered as static SVG; the decoration is a Lottie layer on top. Browsers handle this beautifully, file sizes stay small, and the static-modules guarantee is enforced by the file structure rather than the designer's discipline. If your animated QR is going on a webpage, build it this way.
A reasonable benchmark: a 300px × 300px animated QR loop, 3 seconds long at 30fps, should compress to ~150-250 KB as MP4 and ~400-700 KB as GIF. If your file is much larger than that, the encoder is wasting bits on noise the decoder doesn't care about — re-export at lower bitrate.
Where animated QRs actually fail in the wild
Three patterns I've watched fail over and over:
The "transforming" code on Instagram. A brand posts a Reel where the QR morphs through three different aesthetic variants in the last second of the video. The variant on screen at any given moment is correct, but the user has half a second to lock and scan before it changes. The actual scan rate from these posts is dismal — most accounts that ship them go quiet after one or two attempts.
The shopping mall LED billboard. A 4K LED runs a 6-second loop with the QR animating across the second half. The QR is also too small for the viewing distance — about 15cm of QR for a 12m viewing position, where it should be more like 60cm of QR. The animation isn't even the primary failure; the size is. But the animation gets blamed because the static QR on the same wall a month earlier scanned fine.
The "ours but cooler" packaging QR. A startup ships product packaging where the QR is printed inside a stylised animation-frame illustration (lightning bolts, sun rays, the brand mascot pointing at the code). The animation is implied — there's no actual motion — but the illustration's lines cross into the modules and the decoder loses contrast on dark cells inside the lines. The fix is to clear a quiet zone around the code that the illustration respects. Almost no one does this, and the codes scan flaky for the life of the print run.
Generate the static version first. The Linked.Codes QR designer ships round and square QRs with the defaults that survive print. Animate decoration around the static output, not the modules themselves.
Build the static QR →When you absolutely have to ship an animated QR
You've been told. Sometimes the constraint is the constraint. Here is the recipe that holds up.
Step 1. Generate the static QR first, with whatever brand styling you'd use on print — round modules at 105%, square finder patterns, level Q or H error correction, logo at no more than 20% of total area. This is the code that actually has to scan. Generators that get the basics right are covered in round QR code generators compared.
Step 2. Treat the static QR as a locked layer. Do not let any designer "tweak" it inside the animation. If a designer needs to recolour or restyle, they go back to step 1 and regenerate.
Step 3. Build the animation around the locked layer. Decoration layers — frames, glints, gentle pulses, "scan me" arrows — sit on top or behind the QR and never modify its pixels.
Step 4. Set a stationary hold of at least one full second somewhere in the loop, ideally two. The animation can do whatever it wants outside that window; the hold is when scans happen.
Step 5. Export at native resolution for the destination. Digital signage needs the QR at the pixel size that matches the viewing distance — roughly 1cm of QR width per metre of viewing position. If the screen can't render that size at the file's resolution, the QR is too small regardless of animation.
Step 6. Field-test. Print or display the loop at the final size, scan from the maximum expected distance with three phones in three lighting conditions, count the success rate. Below 9/10, the animation is fighting the scan and one of steps 1-5 needs to be redone.
This is the same six steps you'd run for any production QR, plus the locked-layer discipline. The discipline is what most "animated QR" workflows skip — and the reason most animated QRs scan worse than the static ones they replaced.
The static fallback you need either way
Anywhere the animated version lives, the static version needs to live somewhere parallel. Print materials don't run GIFs. Email clients block most animation. Some digital-signage CMSes flatten animation on render. If the only working version of the QR is the animated one, the campaign is one channel break away from broken.
The simplest setup: one dynamic short link, two QR designs (static + animated) both pointing at the same redirect. The animated one runs on the digital channels that support it; the static one ships everywhere else. Analytics come back to one place, and if the animation ever underperforms, you'll see it in the per-design split. This is why dynamic QRs and short links live on the same platform — the topic of why your QR code platform should also handle short links.
What the corpus says about animation
The QR specification (ISO/IEC 18004) was published in 1997 with a 2024 revision. It says nothing about animation, because the spec is about static codes — a 2D arrangement of dark and light modules with defined error-correction levels. Animation isn't a feature; it's a thing designers do on top of the spec's output.
The phone-side decoders (iOS Camera, Google Lens, every barcode-scanning app worth using) inherit their behaviour from the ZXing library or close variants. None of them implement special handling for animated codes. The decoder gets video frames at 30 or 60 frames per second, runs the static-decode pipeline on whatever it gets, and succeeds or fails based on whether the static-decode pipeline succeeded or failed.
This is worth saying because there's a periodic claim that "modern decoders handle animated QRs natively." They don't. They run the same code as 2010. The code happens to be fast enough that some animation patterns survive; that's the whole story.
Related reading
- Round QR codes — what makes them work — the static base any animation has to be built on.
- Custom QR code shapes — what works and what breaks — the broader "designer's idea vs the decoder's reality" framing.
- QR code scanability score — what it is and how to use it — the same scoring discipline applied to all QRs, not just animated.
- The hidden cost of not tracking your short links — why animated QRs that "feel like they're working" usually aren't.
- QR codes — platform docs — the QR designer with the static defaults to build animations around.
- QR code branding — docs — the brand-styling controls that ship in the designer.
- The free QR code generator — generate the static base you need before animating anything.
Can I make an animated QR code in the Linked.Codes designer?
The designer outputs the static QR — modules, colours, logo, error-correction level, finder patterns. The animation is built in your design tool (After Effects, Lottie, Premiere) around an exported PNG or SVG of the static code. The designer's job is to make sure the static layer scans; the animation tool's job is to decorate it without breaking that.
What frame rate is safe for animated QR codes?
The wrong question. The frame rate of the animation doesn't matter directly — what matters is whether the QR modules change between frames. If the modules are locked and only decoration animates, you can run 60fps with no scan penalty. If the modules themselves animate, even 2fps is at the edge of the decoder's budget.
Why does my animated QR scan on my laptop but not from across the room?
The laptop scan is close range and high light. The decoder gets a huge, sharp QR in frame and finishes the pipeline in 200ms — well inside even a fast animation's frame budget. Across-the-room scanning is the opposite — the QR is small in the frame, contrast is reduced, the pipeline needs 600-800ms, and that's longer than the animation gives it. Test at the real scan distance, not on your monitor.
Is there a generator that ships properly animated QRs out of the box?
Not one I'd trust. A few claim to. The ones I've tested all change the QR's modules during the animation, which means the codes look striking and scan badly. If you need an animated QR, build the static layer with a generator that handles round/square modules correctly, then animate decoration around it in a video or animation tool.
Are pulsing QR codes okay for digital signage?
Yes, as long as the pulse is the surrounding ring or glow — not the modules themselves. A mint or brand-colour ring that pulses every 2-3 seconds pulls attention without touching the scan layer. A QR where the modules themselves brighten and dim is fighting its own decoder.
Will an animated QR work in an email signature?
Most email clients block animated GIFs in signatures or replace them with the first frame. The static fallback is what actually ships. Save the time and put a static branded QR in the signature; animate elsewhere if you must.
How do I measure whether an animated QR is losing scans?
The honest test is to run two versions of the campaign — static QR on one channel, animated on a comparable channel — both pointing at the same dynamic short link with a UTM parameter that splits the two. After a week, the static side will typically show 1.5-3x the scans-per-impression of the animated. That delta is what the animation is costing you. If you can't run two versions, the next-best signal is field-testing the animated code at scan distance and counting failures yourself.
Sourcesshow citations
- ISO/IEC 18004:2024 QR Code bar code symbology specification — https://www.iso.org/standard/83389.html
- ZXing barcode library architecture (the decoder most phones derive from) — https://github.com/zxing/zxing
- Apple Camera and VisionKit QR documentation — https://developer.apple.com/documentation/visionkit
- Google ML Kit barcode scanning reference — https://developers.google.com/ml-kit/vision/barcode-scanning
- MDN reference on APNG and animated image formats — https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types
- Lottie animation format documentation — https://airbnb.io/lottie/
- H.264 / MPEG-4 AVC specification overview — https://www.itu.int/rec/T-REC-H.264
Try it on your own domain
Branded short links and dynamic QR codes, on your subdomain or your own domain. One-time purchase, no per-click fees.