8

I'm creating a rewards app that relies heavily on a check-in feature. Essentially, if the user checks in it adds to the users "check in count", the more they get the better the rewards such as a discount. I'm trying to figure out the best way for customers to check in that is secure (avoids cheating/spoofing), simple for the customer as well as simple for participating staff (waitresses, cashiers, etc.), and scalable (I can't set up expensive technology in every participating location).

What I've considered so far:

Geolocation - The simplest option, the phone checks if it is in the location of the store/restaurant, if so it adds to the check in count and the user can just show the count to staff. However, geolocation is easily spoofed, a user could sit at home and fake a check in every day until they have the best discount and then go in.

User generated code - The user could generate a unique code on their phone while in the store/restaurant. They could then show the code to the staff who could type it into their own portal to verify the users code against the server which in turn rewards the user their check-in. The benefit of this is it's very secure as the business staff gets to validate the code, the code is unique to the user/instance so it can't be shared, and is easy for the customer they just click "generate code". However, it is time consuming and burdensome for the staff to type in customers code, if its a busy day it could be a deal breaker.

Customer name - About the same as user generated code, except easier for the staff to remember if they have to walk back to the register to type it in

Staff generated code - The staff could open their web portal every morning at the start of business and have a unique code generated for the day. Something easy to remember like "robinhood", "triangle", etc. Then whenever a customer needs to check in the staff can just tell the customer the code of the day and the customer can type it in. This has the benefit of being simpler for the staff, they could generate the code once a day and not have to input anything. It is more difficult for the customer, but they'd be more accepting as they are the ones getting the discount. The security is decent, it verifies that the user actually used the real code supplied by the staff, however it could just be tweeted out and shared. The staff would be able to reset/request a new code whenever they want to combat this but it wouldn't solve it completely and would again add work to the staff.

QR code - I could give the business a QR code poster/sticker, the user would have to scan it to check-in. However, they could just take a picture and scan it from wherever.

RFID - An RFID for the phone to read would be harder to spoof that QR, however iPhones don't read passive RFID and active RFID would be quite expensive to distribute to all these businesses.

Note: In this instance simplicity is a factor. I've heard of technology such a ultrasound speakers projecting at a certain frequency that can be picked up by phones to verify location. While I'm sure that could work that is well beyond the scope of what I'd like to/know how to do.

4
  • Just a thought ... you are assuming that users will always try to cheat. That might not be necessarily true or not to the extent that your reward system becomes not viable.Perhaps you should factor that in when designing the solution.
    – Okavango
    May 25, 2017 at 7:37
  • 1
    @Okavango Yeah I assume it would be a rare if ever event, but with real money on the line it isn't something I want to take much of a chance with. Perhaps I could build that into the cost or let the individual business decide if they need verification.
    – DasBeasto
    May 25, 2017 at 13:58
  • I think an interesting point to note about fraud is that perhaps the best way of reducing the incidence of fraud with digital workflows is to introduce some element of physical artifacts into the process.
    – Michael Lai
    May 26, 2017 at 7:39
  • I think we're all completely over-engineering these solutions... ;) May 26, 2017 at 16:25

10 Answers 10

7
+400

People are making a lot of sense from the software side, but I think we need to look deeper. You essentially don't want people to be an expense without providing revenue. In that case, what's to stop a user from going to the restaurant, checking in, and leaving without spending any money?

The only way to ensure revenues exceed expenses is to tie them together. Print a unique QR Code on the receipt with an alphanumeric ID below it. receipt paper is cheaper than the electricity to run most tech solutions. The user can scan the code or type the ID in. You give them points based on the price.

This has the added bonus of encouraging business clientele to spend more money. More goes on the company card and then the employee gets the points. This was a huge boost to the airline industry with frequent flier miles till companies got wise and started taking miles for company use.

Edit: As a fun add-on for this, what if you registered drinks, entrees, apetizers, etc. and represented each with an emoji? The check is scanned and instantly two entrees and a beer pop up with the point counts for each. That could get addictive as hell. It also helps avoid people feeling like the points have a dollar value. It's not a point per dollar. It's five points for an entree and one for a side dish. It's more fun.

2
  • You are giving for granted that the new check-in system can be embedded in the cash software at low expense, which is not always the case.
    – Stefano
    May 31, 2017 at 22:56
  • 1
    That's true, Stefano, but there are two factors that make my presupposition well founded. First, the majority of large chain restaurants already make changes to their receipts for new initiatives on a regular basis. Second, merchant services is such a competitive industry that you can often get a new, more flexible receipt system installed nationwide for free while lowering your operating costs. With that said, you have a point and it's not perfect. Jun 1, 2017 at 16:30
4

What if a Temporary QR code is Randomly Generated in the Rewards App, and then scanned in the premises? So, here is the story -

1) When I want to check-in, I fire the rewards app, and it generates a random QR code.

2) At the counter, or say a mounted tablet device or something, the scanning app is available. I scan the random QR code and check-in.

3) The QR code has two properties - its random and its temporary. So, say a user generates at 2PM, then it's only valid for 10 minutes may be. Since the scanning app is in the vicinity, that could serve well. 4) The scanning app is more like an admin facility in the Rewards app itself, or could be a separate app altogether. Does not need any staff involvement as such.

5) Apart from this, some velocity checks could be employed. Like, no more than X scans per user/hour, no more than X scans per user/ay etc. These will certainly help to cut down fraud. More layers can help, but it should be kept in mind that the ease of use of the real customer should not be compromised.

6) Analytics can be later used to find patterns in these check-ins to detect fraudulent trends if any.

3
  • This would be an ideal solution but it would require (or at least benefit greatly from) a dedicated public facing tablet running this app. While possible, I doubt a lot of places want to make that investment. I'll ask about that to some local businesses though and get their thoughts!
    – DasBeasto
    May 25, 2017 at 13:56
  • The staff (waitresses, cashiers, etc.) could just carry their phone with the admin app, or say with they logged in as the admin in the Rewards app. The check-in in that case, just means at the table flashing of phones on both parties. Better it can happen directly at the cashier desk. Just some ideas.
    – Amit Jain
    May 25, 2017 at 14:35
  • Best idea will be to add the app or a simple utility on the billing PC. Almost every restaurant has a billing PC, and a barcode scanner. The existing hardware can be easily utilized, and barcode itself will provide enough information to find the user id and timestamp. Anyway, who wants to check in, can show the barcode to wait staff, who can take a quick snap for scanning while billing. So, user has to do nothing apart from firing the app. And wait staff can manage the quick snap from any device they want. This will provide additional benefit of tying the check in process with billing. May 26, 2017 at 15:32
1

You need to rely on the Business at some level if you want to be sure that the user is not cheating in some way. The ideal would be a solution that gives the least possible work to the Business, as the one most interested is the Customer (if I understood correctly). One of the parts needs to create a key and the other needs to send it to you.

From your proposals:

  1. In User generated code and Customer name the Customer creates the key and the Business has to send it to you. The benefit here is that each key can be unique. The problem is that the Business has the most work.

  2. In Staff generated code and QR code the Business creates the key and the Customer sends it to you. The Business only has to create a key each day. The problem is this key can be shared as you comment.

Some proposals:

  1. The Customer generates a temporary key that the Business just needs to approve. The customer could generate a key indicating in the app the location and a color (for example). Then transmits this color to the Business who should receive a request in the app with the color information (to verify which is the Customer), and accept.

  2. The Business generates a unique key for each customer who has to submit it. This key can still be something simple like the name of an animal. The idea would be that for each customer they open the app and it gives them a new unique key, they share it with the customer and he submits it. You could limit the creation and submission time to a certain amount.

3
  • Thanks! I agree that the business has to be in the mix one way or the other. The first proposal is giving me ideas! The user just has to click a button to "request approval" and the business just has to click to "verify request" on their end. It could be as simple as sending the users name or include a profile picture, I doubt the business is so busy they can't tell if that's the correct person or not but there could be a key included in case. But this way both the user and business only need to press a button, simple all around! I'm going to let some more answers come in but I like this.
    – DasBeasto
    May 25, 2017 at 13:54
  • @DasBeasto I'd be careful with the solution you describe. I know from working in a restaurant during my college years that the waitstaff likely will not take any ownership over this "validation." I'd bet a lot of money that the waitstaff would wind up just clicking through all of these requests just to get them off the screen. May 26, 2017 at 15:50
  • DasBeasto You are welcome! @maxathousand geolocation could confirm the User is at the place. There could be a limit on the number of requests / time, and still if true confirmation is relevant either fall back to the Business entering the key or making the key/request notification only last X minutes.
    – Alvaro
    May 26, 2017 at 16:11
1

I think that your best option is to combine 2 approaches you already mentioned, only that it would need a twist :

Geolocation - The simplest option, the phone checks if it is in the location of the store/restaurant, if so it adds to the check in count and the user can just show the count to staff. However, geolocation is easily spoofed, a user could sit at home and fake a check in every day until they have the best discount and then go in.

Staff generated code - The staff could open their web portal every morning at the start of business and have a unique code generated for the day. Something easy to remember like "robinhood", "triangle", etc. Then whenever a customer needs to check in the staff can just tell the customer the code of the day and the customer can type it in. This has the benefit of being simpler for the staff, they could generate the code once a day and not have to input anything. It is more difficult for the customer, but they'd be more accepting as they are the ones getting the discount. The security is decent, it verifies that the user actually used the real code supplied by the staff, however it could just be tweeted out and shared. The staff would be able to reset/request a new code whenever they want to combat this but it wouldn't solve it completely and would again add work to the staff.

Let's do the "Twist"

Instead of having the business employees generate a code, and relying on human factor, I'd suggest leaving it all to the system.

In this case, what you can do is provide the business (or use what they have!) with a screen that shows a common word. Let's say dolphin.

Thus, every 15 minutes the system rotates keywords for that store, and you can have (say) goat, robin, cow, horse, and so on. Let's say you have 16 keywords for each store.

Now, once the user gets to the store, she selects the keyword from a 4x4 grid list (tip: depending on app or store, you can use images and make it playful and fun) . The system validates her position via GPS, and checks if keyword is correct at that time at that location, with +/- 2 minutes delay.

Allow 2 tries just in case there's an error and that's it: you can have a playful and interesting app entirely managed by a system without relying on human interaction (on the store side) while offering a very easy way for users to select the code. Additionally, you can use images related to the store's industry: food, kids, fashion and so on.

In short: if security and simplicity are your keywords, then combining the approaches you already thought about would be a great option (not to mention really cheap implementation)

2
  • I like how you want to keep things simple, but it is not without risks. If someone is spoofing the geolocation, a code word won't stop him. He would probably have friends that send him the word or maybe some other clever way to get it. You can however choose to take the risk someone does that in favor of a user friendly approach. That said, it's a valid approach and I don't think it needed a down vote.
    – jazZRo
    May 27, 2017 at 12:12
  • @jazZRo, I'm quite sure who downvoted because it's a pattern from someone who for some reason has something personal against me. Anyways, one of the reasons why I'm participating less and less on this site. Back to your point: there's not a single system that can't be cheated, specially on an analog-digital interaction. However, there's a cost-benefit equation you have to consider in simple implementations AND cheaters are quite easy to detect based on behavior analysis. OP asked from security and simplicity, so this is a good solution based on his own research (and a very cheap one)
    – Devin
    May 27, 2017 at 18:32
1

You already have the solution you want, it is just a matter of refining it

Seems like you are leaning towards the user generated code solution, and you just need a better way for the staff to process the user generated code:

However, it is time consuming and burdensome for the staff to type in customers code, if its a busy day it could be a deal breaker.

There are a number of solutions that would make this process more efficient, and while I don't know all the possibilities, there are at least a couple for you to consider:

  • OCR: instead of typing in the code, the staff can just take a picture of it or have the customer place the code next to a camera that can take a picture.
  • Image recognition: instead of a code, an image is generated that you can also take a picture of an process.

Remember that technology should enhance the efficiency of the solution and not solve it!

Sometimes we really over-engineer solutions when the limiting factor or bottleneck needs to be identified and streamlined first. In this case I believe it is about having to cater for a busy day, so it is the staff to customer ration that you have to try and solve with the technology.

I thought that you could actually just hand out something (a physical or digital token) that the customer processes on their device, and that they need to hand back to the staff when they collect their order. The staff also has something (again it could be a physical or digital token) that they process when the product is ready to be collected. Then you just match the two together to create the reward value. I like the idea of a physical token because it is easy to process and less errors are likely, and you can store physical or digital metadata that can be used for processing information faster on your phone or other mobile devices.

1

The cheapest option may be the one that heavily depends on the user smartphone, so that is does not require businesses to purchase expensive stuff.

Given that I don't think that GPS spoofing would be such an easy job for most of the users, you could use GPS data to double-check the input coming from other check-in methods.

The QR code could be the an optimal solution since it requires just a printed paper or a monitor by the business, and a camera-enabled smartphone by the customer.

A1: Daily printing the QR code (the cheapest option I could think of)

  • You could email every day a new QR code to every business;
  • The business staff will print it out and display it;
  • Customers will scan the printed QR code with your app to check-in.

Business staff will have to spend just a minute per day printing the QR code and placing it near the cash.

A2: Single-usage QR code (a more secure version, but a bit more expensive)

If you can provide each business a tablet that can display a web page (it could be even a cheap phablet or a little external monitor), you could generate a new QR code for every check-in:

  1. The business's tablet displays a QR code generated by your server
  2. The customer scans the QR code using your app
  3. The tablet displays a confirmation message, like "Thank you John for checking-in today!"
  4. The business's tablet now displays a newly generated QR code by the server

The confirmation message displayed by the tablet is useful to hide the generation of a new QR code and provides a great feedback to the user and the staff. The business staff here is barely involved. I think this could be a very safe solution since it would not be possible to use the same QR code twice, so you cannot fake a check-in.


A possible drawback of smartphone based solutions is that customers will probably have to install your app: depending on the target, this could be a serious issue.

0

I think you should go with Geo-location or Qr code scanner as the other features which you mentioned might not be available in all smartphones. These are well known to people and they feel free using these.

Even the effort put on by user is minimal, as in other he has to generate or transfer code,which need some efforts from user but here he just needs to scan the QR or simply sit and see with Geo-location.

1
  • While I don't disagree that those two are well known to users, two of the other options that involve code generation are definitely available to all smartphone if not more available as all it needs is a webservice, it just involves grabbing a code from the server. RFID is however very technically limited as you say.
    – DasBeasto
    May 23, 2017 at 4:55
0

Based on experience with similar products, there are two viable solutions.

Less tech, more staff time: QR reader

Scannable QR code on mobile screen

As a registered user of your system, I get a unique QR (generated from my user ID?).
When I visit one of your locations, I ask the clerk to scan the code from my phone (like an airline ticket). As a business, I focus the messaging on "Check in at check out!" so the customer is encouraged to make a purchase.

Benefits:

  • Simple
  • Creates human interaction

More tech, less staff time: Bluetooth beacon

Bluetooth beacon pushing offer to customer's phone

Small BLE transmitter

As a registered user of your system, with a mobile app installed, my phone can communicate with your store via on-premise Bluetooth beacons (which are ridiculously cheap these days). You know when I come in and I get a check-in with minimal effort.

Benefits:

  • Enables in-store circulation analysis.
  • Preempt drive-bys by positioning the sensor deep into the store, require close proximity.
  • Push on-site promotions and incentives passively.
  • Doesn't require human interaction.
  • You get an app installed on their phone 💥

Taking sides

In a vacuum, I'd opt for the beacon approach. It allows me to drive more value over time and create less impact on the staff. IOW, it has better potential to scale revenue.

0

If you want staff to verify the customer for a valid check in, I'd suggest an RFID card. A reprogrammable protected memory card RFID card costs about $4 per card (or cheaper in larger volumes) and can be reused, the cards can be reprogrammed using a smartphone or you can rent out an RFID reprogrammer for free as part of your business plan with the shop, these reprogrammers costs about $80 each. You'd want to use a protected memory card instead of simple memory card to prevent unauthorized rewrite. Every morning or every few hours, the staff should tap their card on the reprogrammer to write new code to their tag. An $80 machine isn't a big investment, if your business plan's value proposition can't generate $100 return per week, then you'd need to fix your business plan first, no shops would take you seriously.

Note that with this, it's possible for savvy user to copy the stored card code and then distribute the copied code over the internet for other people to use. If you need better security, you'd want instead to use a microprocessor card instead of simple memory cards. Microprocessor card have an embedded CPU that can make custom computations, which makes the card slightly more expensive at $25 per card, but the card can generate one time use code based on a daily secret and an internal counter to prevent fraud. You should save the code on the verification server, to ensure that the code can't huge reused. I'd recommend this only for higher value rewards programs, where the business may legitimately lose significant money from the rewards if frauds happens.

If you don't want staffs to need to verify valid check ins (i.e. if your value proposition works out even if the user don't buy anything), then you can have staffs print out a keyword or QR code that rotates daily and then posted publicly. In this case, you should not need to worry too much if a small number of users are cheating because the value proposition should not be such that the business would ever be selling anything at a loss. The shop should just consider the code being tweeted out as advertising cost, whatever they lose in profit per sales would be recovered in increased sales volume, brand awareness, and long term customers long after the discount is over. You probably should even encourage people to share the discount code with their friends, that's just great advertising.

If you don't want staffs to be involved, but you still want a verified purchase for a check in, then you should integrate this with the shop's POS machine. The POS should print the code with the receipt on every purchase.

If you want something a bit low tech. You can use a stamp card. If you don't need verified purchase, the stamp could be placed in a publicly accessible spot, for self service stamping, and secured with a piece of string. The stamp should have a code generated daily, and the stamp should have a lock to prevent unauthorized people from changing the code. To verify the stamp card, staffs can optionally enter the digits into an app to verify the code. I say optional here since some staff likely will remember the faces of frequent customers and might decide to skip verification when they don't think fraud is a practical issue on their part of town.

The important takeaway here is that you need to design your solution around your business proposition. Better security is only warranted when there's greater risk involved in the reward program. You can't have a high risk program with low security, it's too cumbersome to pair a high security solution for a low risk program.

0

Segregate the customer into two categories: anonymous and identified.

Identified Users: Collect a unique identifier from the customer: mobile number or email id. Link this to the invoice. No app required for user. The user receives the offer depending on the invoice amount via the billing software as mail or SMS.

Anonymous Users People who do not wish to share their contact info. An app that creates an account with a unique ID given once by the business to enroll and a user generated password. The ID can be a sequence of just 4 alphanumeric characters (this would create 1679616 unique IDs). This can be quoted to the business while invoicing and the offers will automatically be sent to the app through the billing software.

Having an identifier helps you identify regular customers and links them to what they order and the number of times they visit. You could then tailor your offers better. Someone could quote someone else's email/mobile number but the cases would be few. Also it does not matter a lot because the offer is linked to the sale. This will also help you track if the user is going to multiple establishments where the system is in place

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.