Free QR Code Generator
Create permanent QR codes for WhatsApp, contacts, links, images and text. Brand them, download print-ready PNG & SVG — and with dynamic links, edit where they point anytime without reprinting.
Recommended. The printed code points to a short Zappio link you can re-point anytime — it never expires.
Why these QR codes never expire
Most “free” QR generators hand you a code that stops working. They create a dynamic code pointing at their own short link, then put that link behind a trial. When the trial ends, the code you already printed on five thousand flyers goes dead, and the only fix is to reprint everything.
Zappio’s codes do not work that way. A static code has the destination encoded in the pattern itself — there is no server in the middle, so it keeps working for as long as the destination does. A dynamic code points at a short getzappio.com/q/… link that you control and can re-point at any time, free, without an account.
Both are free to create and free to download. Neither has a scan limit, a watermark, or an expiry date.
Which QR code should you make?
The generator above makes five kinds. They are not interchangeable — two of them cannot be edited after printing, for a good reason.
WhatsApp QR code
Enter your number with the country code and, optionally, a message. The code resolves to a wa.me link, so scanning it opens a WhatsApp chat with you — with that message already typed and ready to send.
The pre-filled message is the part most businesses skip. A code that opens an empty chat gets you “hi”. A code that opens with “I’d like to book a table for Friday” gets you the booking. If you run Zappio, make the message a keyword like START_BOOKING and the scan starts an automated flow instead of waiting for someone to reply.
Where it earns its place: table tents, receipts, packaging inserts, shopfront windows, delivery notes, business cards, and the back of a menu.
Contact card (vCard) QR code
Name, phone, email, company, website. Scanning it offers to save you straight into the phone’s address book — no typing, no misspelled surnames.
This one is static only, and that is deliberate: the details are encoded in the pattern, so the code works with no internet connection at all. The trade-off is that you cannot change it once it is printed. If your number might change, put a WhatsApp or website code on the card instead.
Website or link QR code
Any URL — a menu, a booking page, a product, a Google review link. Type it without https:// and we add it for you.
Make this one dynamic if there is any chance the destination moves. A restaurant printing a menu code onto every table wants a dynamic code: next season’s menu becomes a two-second edit rather than a reprint.
Image or PDF QR code
Upload an image or a PDF and we host the file, then encode the link to it. Scanning opens the file directly.
This is the one people do not think of and then use constantly: a price list, a spec sheet, a warranty card, an instruction leaflet, a wine list. It saves building a whole web page just to put one document behind a code.
Plain text QR code
Any text at all — a serial number, a batch code, a note, a Wi-Fi password written out in full. The text lives in the pattern, so scanning simply shows it without opening anything.
Static only, for the same reason as the contact card, and it works with no signal.
Static or dynamic? A straight answer
| Static code | Dynamic code | |
|---|---|---|
| Expires | No — ever | No — ever |
| Editable after printing | No | Yes, any time |
| Counts scans | No | Yes |
| Works with no internet | Yes | No — needs to resolve the link |
| Depends on Zappio staying online | No | Yes |
| Available for | All five types | WhatsApp, link, file |
| Pattern complexity | Grows with the data | Always small and simple |
The honest version: a static code is more durable, a dynamic code is more flexible.
A static code will outlive all of us. It does not depend on Zappio — or any other company — still being here in ten years, because the data is in the pattern. It also gets visually denser the more you encode, which is why a long vCard produces a busier code than a short link.
A dynamic code depends on that short link resolving. In exchange you can change where it points after it is printed, and you get a count of how many times it was scanned. When you create one we give you an edit link — save it, because that link is how you prove the code is yours and how you change it later. No account required.
Choose static for anything you cannot reprint and will never need to change: contact details, serial numbers, a WhatsApp number you have had for years. Choose dynamic for anything tied to a campaign, a season, or a page that might move.
How to make a QR code that actually scans
QR codes that fail in the real world almost always fail for one of four reasons, and all four happen at the design stage rather than the generating stage.
The working rule is that a printed code should be at least one tenth as wide as the distance people will scan it from. About 2 cm on a business card or product label. 3–4 cm on a table tent or flyer. 20 cm or more on a poster read from across a room. A code that looks fine on your monitor can be completely unscannable once it is printed at thumbnail size.
Dark pattern on a light background. Light-on-dark scans badly on a lot of phones, and a mid-tone pattern on a mid-tone background often will not scan at all. If the code has to sit on a photograph or a coloured panel, put it on a solid light tile first.
A QR code needs clear space around it — roughly four modules, or about a tenth of the code’s width. Designers crop it constantly to tidy up a layout, and the code quietly stops working. Do not let text, a border or a background edge touch it.
PNG is fine on screen and in small print. SVG is vector, so it stays perfectly crisp at any size — use it for posters, banners, vehicle livery and anything a printer is going to scale up.
Then test the real thing. Scan the actual printed proof, with more than one phone, in the lighting the code will really live in. A code that scans on your desk under a lamp can fail on a dim restaurant table, and you only find that out after the print run.
How Zappio compares
| Zappio | Typical free generator | |
|---|---|---|
| Codes expire | No | Often, once a trial ends |
| Account required | No | Usually, for dynamic codes |
| Watermark on the code | No | Sometimes |
| Scan limit | None | Common on free tiers |
| Print-ready SVG | Yes, free | Usually paid |
| Edit a printed code’s destination | Yes, free | Paid plan |
| Logo and brand colours | Yes | Often paid |
The difference that matters is the first row. A dynamic code from a generator that puts redirects behind a subscription is a liability: the day the subscription lapses, every code you have ever printed points at a dead link or an upsell page. That is the failure this page exists to avoid.