Safaricom QR codes and link QR codes are not the same thing

opens the appopens a pagesame square, different job
Same square, different jobScannable, it opens this page

What is a Safaricom QR code?

A Safaricom QR code is a payment code. Scanning it in the M-PESA app fills in the business number, and often the amount, so the customer confirms instead of typing. It belongs to Safaricom's payment system and is issued through them, which is exactly why a general-purpose QR generator cannot produce one.

A link QR code does something different. It carries a web address, so scanning it with any camera opens a page. Both are black squares on a white background and nothing about the printed pattern distinguishes them.

The difference that matters at the counter

A payment code hands the phone to the payments app. The customer is in M-PESA, confirming a number they did not type. That removes the single most expensive error in Kenyan retail, which is a mistyped till or paybill digit sending money somewhere it cannot easily be recovered from.

A link code hands the phone to a browser. The customer is on a page you control: a menu, a booking form, a catalogue, a review request, a delivery tracker. Nothing is paid, and the page can be changed tomorrow without touching the printed code.

Neither replaces the other, and most businesses with anything printed end up with both. The error is assuming one square can do both jobs.

Why a generic generator cannot make a payment code

This is the most common wasted afternoon on this subject, so it is worth being blunt.

Any QR generator, ours included, encodes text into a grid. It cannot mint a payment instruction, because a payment instruction is not a formatting question. It has to carry data the M-PESA app recognises, issued against a business number that actually exists and belongs to you. Typing your till number into a plain QR generator produces a code that scans perfectly and then presents a customer with a number, not a payment.

That failure mode is worse than having no code at all, because it fails in front of a customer at the moment of paying. Get the payment code from Safaricom. If you do not yet have a business number to issue it against, that comes first, and it is covered in how to get a Lipa na M-PESA paybill or till.

Two identical squares, and the attack that follows

Because nothing in the pattern says what a code does, a customer cannot tell your payment code from a sticker placed over it. This is not hypothetical anywhere that codes sit unattended on tables, counters and parking signs, and it is covered in more detail in QR code scams.

Two practical defences. Check your printed codes physically, on a schedule, the way you would check a float. And print codes into the surface where you can, laminated or under a counter overlay, rather than leaving an adhesive square that another adhesive square can cover.

Which code goes where

A rule that survives most situations: the payment code goes where money changes hands, and nowhere else. The counter, the table, the delivery note, the invoice.

The link code goes everywhere else. The menu, the poster, the shopfront, the packaging, the receipt asking for a review, the flyer. Those are the places where the destination changes over time, where you want to know how many people scanned, and where reprinting is the expensive part.

That last difference is the one worth planning around. A payment code is tied to a number that might change; a link code is tied to a link you control, so you can re-aim it as often as the business changes. If you are printing anything that will outlive this season's menu, the link code is the one to put on it, and the argument is set out in dynamic versus static.

Questions

The things people ask before they commit something to paper.

Not answered here?

A person reads every message, usually the same day.

Email hello@klipqr.com
What is a Safaricom QR code?

It is a payment code. Scanning it with the M-PESA app fills in the business number and, where relevant, the amount, so the customer confirms rather than types. It belongs to the Safaricom payment system, which is why it is issued through them rather than generated by a third party.

Can I make an M-PESA QR code with any QR generator?

You can encode text into a square with any generator, but that does not make it a payment instruction. A payment code has to carry data the M-PESA app recognises, issued against a real business number. A generic generator produces something that scans and then does nothing useful, which is worse than no code because it fails at the counter.

Do I need both a payment QR and a link QR?

Most businesses with anything printed do. The payment code belongs at the point of paying, on the counter or the table. A link code belongs everywhere you want a menu, a booking page, a review or a catalogue, and it is the one you will want to re-point later without reprinting.

Why do the two codes look identical?

Because a QR code is only a way of writing text, and nothing in the printed pattern says what kind of text it holds. That is a real risk at a counter: a customer cannot tell a genuine payment code from a sticker somebody placed over it, and neither can you from across the room. Check your printed codes physically and often.

Can a link QR code start an M-PESA payment?

It can open a page that begins a checkout, which is a different thing and usually the better one for anything online. The customer lands on a page you control, sees what they are paying for, and the payment is started by the system rather than typed. For an in-person counter, the direct payment code stays faster.

A link code for everything that is not the counter, re-aimed whenever the destination moves.Create a free account
© 2026 Klip · Page updated 2026-09-23 · Contact · Privacy · Terms · DPA