How we prevent catfishing and bots
October 29, 2026
Every dating app has the same two uninvited guests: bots that sign up by the thousand, and catfish who are real people hiding behind someone else's photos. Both are getting better at what they do. Generated profile photos are now cheap and convincing, and a scripted account can hold a plausible conversation for a while before it asks you to click something.
We built hotpoly around a simple idea: make faking a profile expensive, make a misleading one sink, and make the messages bots want to send impossible to send. Here is what that looks like in practice.
The front door: Cloudflare Signing up, signing in, resetting a password and filing an abuse report all go through a Cloudflare Turnstile check. For a person it is usually invisible. For a script it is a wall. Turnstile looks at how the browser behaves rather than asking you to pick out traffic lights, so a human almost never notices it, while a bot farm hitting the sign-up form thousands of times does. The same endpoints are rate-limited on our side, so even a bot that clears the check cannot register or guess passwords at speed.
This is the cheapest layer, and it catches the laziest attackers. The next layers are for the ones who try harder.
Age verification: a live selfie, not an uploaded photo
Every member verifies their age before their profile becomes visible to anyone. It is free, and it is a live selfie through our verification partner, not a photo you pick from your camera roll.
A generated headshot is easy to make. A live capture is a short, real-time session on a real camera with liveness detection, and a still image or a video replay fails it. AI image tools are good at producing a face. They are still bad at producing a face that moves, blinks and responds in front of a camera in the moment, and that is what the check requires. If the selfie is inconclusive, the system asks for an ID instead of guessing.
For a bot operator this changes the economics. A thousand fake accounts now means a thousand live selfie sessions in front of a camera, each one performed by something that has to convince a liveness check. That is a very different proposition from running a script.
Until a member passes, their profile is hidden from everyone and Discover, Likes and Matches stay locked. You never see unverified profiles, and nobody sees yours until you are verified. We store only the result and the date, not the selfie itself.
ID verification: the Premium badge that catfish cannot fake
Premium members can go a step further and verify a government ID. The check matches a live selfie against the photo on the document, confirms the document itself, and gives the profile the ID Verified badge.
Two things happen when someone passes that make catfishing hard:
- Their date of birth is taken from the ID and locked. The age on an ID Verified profile is the age on a government document, and it can no longer be edited.
- Their photos are verified against the live selfie. The selfie from the ID session becomes the reference for photo verification. Each profile photo that matches it gets a Verified label, so you can see at a glance which pictures are actually the person you are talking to. Photos of someone else simply do not get the label.
The ID document is never sent to us. Our partner keeps the images for one month and then deletes them. We keep the result, the date and the reference selfie for photo matching.
A verified badge means a real human was in front of a camera, and their face is in their profile photos. Each profile photo is checked individually. If they post a picture of their cute dog, the dog will not show "verified" but their other profile photos with their own face will.
Accuracy ratings: misleading profiles sink
Verification stops impostors. It does not stop a real person from using ten-year-old photos or writing a bio that bears no resemblance to who shows up. For that, we ask the people who would know.
After you match with someone, you can rate whether their photos and their bio were accurate. Only matches can rate, so nobody can pile onto a stranger they have never spoken to, and your rating is never shown to the person you rated.
Those ratings feed Smart Sort, the Premium ranking for Discover. Smart Sort re-ranks your feed by profile quality and mutual interest instead of plain distance, and accuracy is one of its signals. A profile that matched people keep rating as inaccurate drops in everyone's Smart Sort results. A profile that matched people confirm is accurate rises. Catfish depend on being seen. Smart Sort quietly moves them to the back of the line.
Your inbox is not for sale
Nobody can message you until you have both matched with each other. There is no paid feature that lets a stranger skip the match and land in your inbox, no "priority message", no boost that puts someone's note in front of you. We never sell access to your inbox, to anyone, at any price, ever.
That is a safety decision as much as a product one. On apps that sell a way around the match, the people most willing to pay for it are exactly the bots, scammers and escorts this post is about. Making the match the only door means a fake account cannot reach you unless you chose it first, and you can un-match it with one tap.
Chat and image moderation: the messages bots want to send cannot be sent
Most bot and scam accounts have one goal: move you somewhere else. A link to another site, a handle to message off-platform, a menu of paid services, a crypto opportunity. We built the chat so those messages do not go through.
No links, anywhere. Chat messages, bios and the city field cannot contain links or web addresses. The message is rejected before it is sent, not reviewed afterwards. A bot that exists to drop a URL into your inbox has nothing to do here.
Automated text screening. Every chat message and profile text is screened as it is written. Advertising sexual services for money, such as hourly rates, a price next to a payment handle, or the usual coded language for paid meetups, is blocked outright. Patterns that look like scams, such as requests for gift cards, crypto investments or wire transfers, and more ambiguous commercial language, are flagged for our safety team to review. The same screening blocks the most serious safety violations, including anything sexualising minors, threats and doxxing. It keys off intent, never off community vocabulary on its own. Talking frankly about kink, play or what you are into is not what gets flagged.
Every image is checked before anyone sees it. Every photo uploaded to a profile or sent in a chat runs through an on-server classifier first, and explicit images are blocked at upload. Chat photos also only work once both people have turned on "Allow photos", so an unsolicited image from a brand-new match is not a thing that can happen to you here.
When someone does get through
No system is perfect, and a determined human with a real camera and a real ID can pass every check above. That is why reporting still matters. Reports go to a human safety team, and the consequences stick: when an account is permanently banned, we keep hashed identifiers, content hashes of its photos and a facial template from its reference images, and a new sign-up that matches any of them is blocked. Getting banned on hotpoly is not something you can fix with a new email address.
What this adds up to
Each layer on its own is beatable. Together they change who can afford to try. Scripts stop at Cloudflare. Bulk fake accounts stop at the live selfie. Stolen photos stop at ID and photo verification. Real people with misleading profiles sink out of Smart Sort. Nothing reaches your inbox without a mutual match, and bots that get that far cannot send the one message they came to send.
The result is a community where a Verified badge means a real person, the age you see is the age on their ID, and the photos you are looking at are the person who will show up. That is the whole point of the app, so it is where we spend the effort.
If you have not verified yet, it takes about a minute from your Profile page. If you have, thank you. You are part of what makes this work.