QR codes in your business: flyers, menus and reviews, and how to count scans
Where a QR code makes sense in a business, how to count scans with a UTM link, why to avoid paid generators and how to avoid swapped stickers. A pre-print checklist.
A QR code on a flyer, a business card or a table has one purpose: to shorten the path from paper to phone. The customer doesn’t have to type in the address, and you can check whether anyone used it. The problem is that many businesses print a code and never find out whether it works.
In this guide I show where a QR code makes sense, how to count scans for free, what to avoid with paid generators and how to check a code before printing. There’s a checklist at the end.
Where a QR code makes sense
A code is good where the customer has a phone in hand and typing an address would be a hassle. It works best in these places:
- Flyer or poster. The code leads to a page with your offer or to a form. Don’t point it to the home page, but to one subpage for this particular campaign.
- Business card. A code with your contact details or website address saves typing.
- Table with a menu. The code leads to the menu, but also keep a paper version for people who don’t want to scan.
- Receipt, invoice or a sign at the checkout. A code asking for a Google review. Today this is one of the best uses.
- Shop window or door. A passerby after business hours can scan the code and see your offer or leave an inquiry.
A code makes no sense where nobody can scan it: on a billboard by a busy road, on a TV screen with a rapidly changing picture or in a video that disappears after two seconds.
A Google review code: the simplest start
If you’re going to make just one code, make this one. You get the review link from your Google Business Profile (on the profile: Read reviews, then Get more reviews, then Copy). Google sometimes changes button names, so look for the option related to asking for reviews.
Turn the link into a code in the free RobimyWeb tool: you get a QR code in PNG and SVG, a printable sign (A6 and A5) and ready-made messages. The tool works in your browser, and the link doesn’t reach my server. I describe the rules for asking for reviews in the guide how to get Google reviews. Remember: you may not reward people for reviews or ask only satisfied customers for them.
How to count scans: a link with UTM parameters
A QR code alone won’t tell you how many people scanned it. The simplest way is to build an address with UTM parameters, which Google Analytics 4 reads as the traffic source. You don’t need a paid generator for this.
An example address for a flyer:
https://twojafirma.pl/oferta-taras/?utm_source=ulotka&utm_medium=qr&utm_campaign=listopad-2026
What the parameters mean:
| Parameter | What to enter | Example |
|---|---|---|
| utm_source | where the code is placed | ulotka (flyer), wizytowka (business card), stolik (table), witryna (shop window) |
| utm_medium | always the same for codes | qr |
| utm_campaign | campaign name and month | listopad-2026 (November 2026) |
Rules that will save you a mess:
- One place, one address. The flyer, the business card and the shop window get separate
utm_sourcevalues, so the report shows you which place works. - Lowercase letters, no Polish diacritics and no spaces. Otherwise the same code will be split into several rows in the report.
- Don’t add UTM to the Google review code. It leads to a Google page, so the parameters won’t come back to your GA4.
You’ll find the results in GA4 in the traffic acquisition reports, under the source, medium and campaign dimensions. Keep in mind that this is the number of visits, not the exact number of scans: someone may have scanned the code and closed the page right away. If you want to see how many scans ended in a phone call or a form, you need analytics and conversions in GA4. Calls from ads and flyers are also a separate topic, described in the guide on call tracking.
Static and dynamic codes
A static code contains the address written directly into the image. You can’t change it later, but nobody can switch it off on you either. A dynamic code contains a short intermediate address, which redirects to the right page. That lets you change the destination and see statistics.
In practice, a static code with an address on your own domain is enough for a small business. If you ever change the destination page, you set up a redirect on your server from the old address to the new one. That way you get the advantages of a dynamic code without a third-party intermediary. A nice, short address like twojafirma.pl/opinia also makes a better impression than a random string of characters.
The paid generator trap
A common story goes like this: a free generator offers a code “with statistics”. You print a thousand flyers, and after the trial period the code stops working or redirects to a page demanding payment. The code is already on paper, so you become a hostage to someone else’s subscription.
What to do:
- Don’t print codes that go through the generator’s address. Scan the code with your phone and see whether the address starts with your domain.
- Read what happens to the code after the trial period. If the terms don’t say it clearly, treat that as a warning.
- A code for a plain address is free in itself. You pay for the statistics dashboard, and you already have statistics in GA4 thanks to UTM.
Quishing: swapped code stickers
Quishing is a scam using a QR code, for example when someone sticks their own code over yours and the person scanning lands on a fake page asking for card details. In Poland such stickers have appeared on parking meters, and the same trick can work on tables and posters in public places.
How to protect yourself:
- Write the address in words under the code, e.g., “twojafirma.pl/menu”. The customer will see whether the phone opens the right address.
- Use laminated signs or signs set into the table that can’t easily be covered with a sticker.
- Scan your own codes every now and then and check where they lead. Once a week is enough for tables, once a month for a shop window.
- Tell your staff to report any strange sticker.
- Don’t use a code to lead to payments or data entry anywhere other than your own website. Handle payments through your own website or a trusted payment gateway.
Size, contrast and a test before printing
A correct code may fail to scan because it was printed badly. Watch out for these things:
- Size. On a flyer or business card, a code with a side of at least 2 cm usually scans well from 10–20 cm away. The farther it is from the customer, the bigger the code. In a shop window, make it noticeably bigger.
- Contrast. A dark code on a light background. Avoid inverted colors and light shades, and also a code placed on a photo.
- Blank margin around it. Leave a margin around the code at least four modules wide (the smallest squares of the code). Don’t squeeze text or the edge of the flyer up against it.
- Fewer characters. A short address gives a simpler code that is easier to read. That’s why you should use a short subpage address and keep UTM for codes that are meant to track visits.
- Test. Scan a test print with two different phones, in weaker light and from different distances. Only then order the print run.
Also remember the page the code leads to. It should load quickly on a phone and have a visible call button or form. If you don’t know how your website performs, check it with the free Check your website tool.
Checklist before printing
- The code’s address starts with my domain.
- The code leads to a specific subpage, not the home page.
- Each place has a separate
utm_source. - Under the code there’s a short note on why to scan it and the address in words.
- The code has a side of at least 2 cm and a blank margin around it.
- The print has been checked with two phones.
- A reminder is set to check the codes on tables and in the shop window from time to time.
Summary
A QR code is cheap, but it works only when it leads to your domain, has a UTM link and has been checked before printing. Avoid generators that can switch the code off after the trial period, and keep an eye on stickers on tables.
If you want to see how many scans end in a phone call or an inquiry, write to me. I will set up analytics and conversions, and if you’re short on reviews, I will complete your Google Business Profile. I reply within 24 hours.
Frequently asked questions
A static code works as long as the address stored in it works. A dynamic code from a paid generator can stop working when the trial period or the subscription ends. That’s why, for print, you should use an address on your own domain.
No. A code for an address is an ordinary image, and you can make it for free, without an account and without a subscription. You only pay if you want to collect statistics in someone else’s dashboard, and that can be replaced with a UTM link and GA4.
As a rule of thumb, assume a side of at least 2 cm for scanning from 10–20 cm away, and many times more on a poster or a shop window. Leave a blank margin around the code, and always check it with a phone before printing.
Every now and then, scan your own codes and check where they lead. Attach codes in a way that makes it hard to cover them with a sticker, for example on a laminated sign, and write a short address in words under the code.
No. It’s a convenience for guests, not a requirement. Also keep a paper menu for people who don’t want to scan.
Related services
Have a similar project?
Describe what you need and I’ll send a quote within 24 hours. New clients get 20% off their first project.


