---
title: Bot detection
---

# Bot detection

A [bot](/docs/v3/concepts/bots) is automated, non-human traffic behind signup farms, click fraud, and ad-budget siphoning.

## Step 1: Set up login and signup protection

Before anything else here, set up [Signup protection](/docs/v3/fundamentals/signup-protection) and [Login protection](/docs/v3/fundamentals/login-protection). They're the basis this builds on, and without them the policies below can be bypassed. With those in place, the rest of this guide covers the policies that keep automated traffic out.

## Step 2: Add the policies

A policy has a trigger (the event it runs on) and a verdict. Add these in your [policies dashboard](https://app.rupt.dev/policies):

| Policy                   | Trigger                     | Conditions                                    | Verdict   |
| ------------------------ | --------------------------- | --------------------------------------------- | --------- |
| Block datacenter traffic | `login`, `signup`, `access` | `ip_is_hosting`, or `ip_is_proxy`             | Deny      |
| Block fake devices       | `login`, `signup`, `access` | `is_simulator` or `is_emulator` (native apps) | Deny      |
| Challenge high bot risk  | `login`, `signup`, `access` | `bot` risk is high _(coming soon)_            | Challenge |

The bot-risk challenge lands with bot risk summaries (coming soon): when a request's `bot` risk is high, the policy issues a 2FA challenge that a real person clears and a bot can't. Until then, read the bot score off the [evaluation](/docs/v3/concepts/evaluations) in your own logic; the datacenter and device policies above work today.

## Related

- [Bots](/docs/v3/concepts/bots)
- [Web scraping prevention](/docs/v3/guides/web-scraping-prevention)
- [Anonymizing network](/docs/v3/concepts/anonymizing-network)
