In this article
Buried in most RTO reports is a group of orders that had no chance from the start: a wrong number typed to skip verification, a competitor's address, a bored teenager, a duplicate placed three times by an impatient buyer. They cost the same as a genuine failed delivery and they are far easier to prevent, because they fail a test a real buyer passes without noticing.
The test is reachability
An OTP at checkout does not stop a determined bad actor, and it is not meant to. What it does is guarantee that the phone number on the order belongs to somebody who was holding that phone when the order was placed. That single guarantee removes mistyped numbers, deliberately fake numbers, and the entire class of orders where nobody can be called before dispatch.
Patterns worth scoring
- Multiple orders to the same address with different phone numbers, or the reverse, inside a short window.
- A phone number with prior refused or returned deliveries — your own history is the strongest signal you own — see Smart COD.
- High-value first orders from a pincode where your delivery record is poor.
- Repeated failed OTP attempts followed by a successful one on a different number.
- Orders placed in bursts from the same session or device fingerprint.
None of these should auto-cancel an order on its own. They should change what the checkout asks for: a confirmation step, an advance, prepaid only. The goal is to make the fake order not worth placing while leaving the genuine buyer's path untouched.
Confirm, then dispatch
For everything that still smells wrong, a confirmation message before dispatch is the last cheap filter. Real buyers confirm. Prank orders never reply. The cancellation you take at that point costs you a picking slip; the alternative costs you two legs of shipping and a repack.
Measure it separately
Keep never-real orders out of your headline RTO rate. Mixed together, they hide the genuine delivery problems worth solving — courier performance, address quality, buyer regret — behind noise you have already fixed. Split, they show up as a line that should fall to near zero once verification is on, and stay there.
See it live on a private preview of your checkout.