How to Interpret a Digital Fraud Prevention Response

Guidance on interpreting DFP response fields and using them in your business logic.

The Main Idea

DFP does not send a ready-made recommendation to block a request, allow a user, or send them for an additional check. Its purpose is different: it gives you more information about the client environment from which the request came.

DFP provides several important signals:

  • user_id: an identifier of the client environment, or a browser-device pair;

  • bot_score: whether a request came from a bot or a person;

  • engine: the browser engine in use, for example Blink, WebKit, Gecko, or another engine;

  • hosting: whether the IP address belongs to a hosting subnet;

  • bot_hosting: whether the IP address belongs to a hosting subnet from which we have detected bot activity or other suspicious activity;

  • isp_active_subnet: whether the IP belongs to an active Internet service provider subnet used to connect private or corporate customers to the Internet;

  • incognito: whether the browser is open in incognito or private browsing mode;

  • mobile: whether the request came from a mobile device;

  • os: the operating system in use, for example Windows, macOS, Linux, iOS, or Android;

  • vpn: whether there are signs that a VPN is being used;

  • new_user: whether this client environment is visiting your resource for the first time;

  • confidence_score: how confident DFP is that the user_id was identified correctly.

These fields do not tell you by themselves whether a user is good or bad. They provide context. You make the decision based on the scenario, the user’s actions, and your product rules. For example, if multi-accounting is prohibited in your service and you see 100 accounts with the same user_id, you can block them for abuse.

The sections below explain how to interpret each field and where it may be useful.

user_id

How to Interpret It

user_id is a persistent identifier of the client environment.

Put simply, it is an ID that describes a specific browser-device pair. The ID remains stable even if a user changes device, browser, or network settings. For example, if the user:

  • enables a VPN;

  • opens an incognito window;

  • updates the operating system;

  • changes the time on their computer;

  • updates the browser version.

The ID stays the same.

If the user opens another browser or sends a request from another device, you will see a different ID. This is because every browser-device pair has its own unique ID.

A change in user_id can be normal: a user may sign in from their phone or install a new browser. But it can also indicate a dangerous scenario. For example, someone may have stolen the user’s authentication token and is trying to sign in with it.

Using several accounts from one user_id can also be normal. For example, an entire family may use one computer. But in another context, it can be a fraud signal. For example, an attacker may create many accounts to receive referral-program bonuses.

When It Is Useful

user_id is especially useful when you need to understand whether you are dealing with a familiar environment.

Example 1

Your service has a free limit: a user can generate 10 reports per month for free. Someone tries to bypass this limit by clearing cookies, opening an incognito window, enabling a VPN, and returning as if they were a new user.

If the limit is tied only to cookies or IP addresses, this bypass may work. But if you use user_id, you can see that the client environment has not changed. You can then show a message that the free allowance has already been used.

Example 2

You have a promotion or a welcome bonus. One person creates ten accounts to receive the bonus ten times.

If these accounts have the same user_id, this is not absolute proof of abuse, but it is a strong signal. You can refuse to issue the bonus automatically, limit the number of participations per user_id, or send these accounts for review.

Example 3

The user previously signed in to an account from one user_id, and now the same token or cookie comes from a different environment.

This may indicate a stolen cookie or token. In this case, you can end the session and ask the user to sign in again.

new_user

How to Interpret It

new_user: true means that DFP has not encountered this client environment during previous visits to your resource. new_user: false means that your resource has already been visited from this environment.

new_user: true does not necessarily mean you are dealing with a new person or a new account. The user may have visited before from another browser or device. Conversely, several people can use the same environment. This field only shows the history of visits to your resource from a particular client environment.

When It Is Useful

This field is useful when it is important to distinguish familiar environments from those visiting your resource for the first time, for example during account sign-in.

If a user signs in from a completely unfamiliar environment, the risk that their password was stolen is higher. It is better to request additional confirmation, for example by sending a code by email.

confidence_score

How to Interpret It

confidence_score: 1 means DFP is confident that user_id was identified correctly. Values below 1 mean lower confidence.

If DFP encounters an environment that has not visited your resource before (new_user: true), it assigns a new user_id. In these cases, confidence_score is always 1.

If DFP encounters an environment that has already visited your resource, it returns the user_id linked to it. In this case, confidence_score may differ from 1. The lower the value, the more current environment parameters differ from the set DFP saw earlier. However, there are still enough matches to recognize the environment.

bot_score

How to Interpret It

bot_score shows how similar a request is to automated traffic. The value ranges from 0 to 1.

Value How to interpret it

Less than 0.4

A normal request made by a person. No significant signs of automation were detected.

From 0.4 to 0.5

Possibly a bot. Some signs of automation, browser parameter spoofing, or other anomalies were detected.

0.5 and above

Very likely a bot. Significant signs typical of automation or browser parameter spoofing were detected.

High bot_score does not mean that you should immediately block a request. The scenario matters. If a bot calls an open API, this is normal behavior. But the risk is much higher if a bot-like client tries to reset a password, create many accounts, or apply a promo code.

When It Is Useful

bot_score is useful where automation can harm the business.

Example 1

You have a registration form. On a normal day, 200 accounts are created through it, but today 5,000 accounts were suddenly created.

If a significant share of these requests has a high bot_score, comes from suspicious subnets, and behaves similarly, consider enabling an additional check during registration: CAPTCHA, a one-time code, a rate limit, or manual moderation.

Example 2

You have a lead form. A bot sends fake submissions in bulk, and your sales team spends time on nonexistent customers.

In this case, you do not have to block the whole form. You can change the response based on the risk level: allow normal requests, send suspicious ones for an additional check, and block requests with a high bot_score.

Example 3

Your website contains data that must not be scraped in bulk. You can set a request limit by user_id and require additional checks for a high bot_score.

hosting

How to Interpret It

hosting: true means that the sender’s IP belongs to a hosting subnet.

For a typical consumer product, this may be suspicious. Real users usually access it from home, mobile, office, or corporate networks. Hosting subnets are more often used for scripts, scrapers, bots, test environments, and bulk requests.

However, hosting: true does not automatically prove fraud. A request may come from corporate infrastructure, a proxy, monitoring, an internal tool, or a test environment.

When It Is Useful

Example 1

You have a service where users create accounts and receive a trial period. Many registrations arrive from hosting subnets in a short time, with a high bot_score and similar environment parameters.

This looks like mass automated registration. You can show an additional check, limit the number of registrations, temporarily slow down the flow, or send some applications for moderation.

Example 2

A regular user has always accessed their account from a home or mobile network. Now an attempt to change the password comes from a hosting subnet.

This is a reason to request additional confirmation.

bot_hosting

How to Interpret It

bot_hosting: true means that the sender’s IP belongs to a hosting subnet from which we have detected bot activity or other suspicious activity.

This is a stronger risk factor than hosting: true. The hosting field only indicates the subnet type, while bot_hosting adds reputation context.

When It Is Useful

Example

A user tries to perform an important action, for example create an account, apply a promo code, or reset a password. The request comes from a hosting subnet with bot_hosting: true, and bot_score is medium or high.

This is a reason to perform an additional check: show a CAPTCHA, request a one-time code by SMS, send an email confirmation, or use another method.

isp_active_subnet

How to Interpret It

isp_active_subnet: true means that the user connected to the Internet through a regular Internet service provider network, one used for home, mobile, or corporate Internet access.

This provides additional context about the user’s network. By itself, the parameter does not confirm that a request is safe or suspicious.

When It Is Useful

This field can serve as an additional signal for your scenario. For example, if it is important to protect against bot registrations and you see a low bot_score together with hosting: false and bot_hosting: false, then isp_active_subnet: true is another sign that the request resembles one from a regular user.

incognito

How to Interpret It

incognito: true means that the user opened the page in incognito or private browsing mode.

We all use incognito mode sometimes, for example when signing in to an account from someone else’s computer. But it can also be used to abuse a resource, for example by resetting cookies and appearing to be a new user.

Incognito mode alone does not prove abuse. But if it appears together with a VPN, new behavior, repeated actions, or the same user_id, it is worth considering.

When It Is Useful

Incognito mode is useful to consider in promotions, voting, surveys, free limits, and paywall scenarios. It becomes an additional signal, most often together with user_id.

Example

You have a promo code for new users that one person can apply only once.

The user creates their first account, applies the promo code, and receives a discount. They then open the website in incognito mode, create a second account with the same user_id, and try to apply the promo code again.

One user_id for two accounts does not prove abuse by itself: two people may use the same computer. But incognito: true adds important context. The user creates a new account in a mode that helps hide browser state: cookies, local storage, and session history.

The scenario therefore looks more like an attempt to bypass the promotion rules. In this case, you can not only refuse the second promo-code use but also limit the first account, for example freeze its promotional bonuses and send the account for review.

The system does not react to incognito mode alone. It reacts to the pattern: a user has already received a benefit and tries to receive it again through a second account in private browsing mode.

vpn

How to Interpret It

vpn: true shows that DFP detected signs of VPN use.

A VPN is not the same as fraud. A user may enable a VPN for privacy, work, access from a corporate network, or a stable connection while traveling.

But a VPN matters when region, network, or sign-in history is important for your scenario. For example, if you restrict access by country, use regional pricing, issue bonuses by geography, protect payments, or track suspicious sign-ins.

It is better to interpret vpn this way: the network context is hidden or changed. You then need to consider what the user is doing and what other signals arrived together with the VPN.

When It Is Useful

Example

Your service has regional pricing. A user tries to register, but has a VPN enabled.

They may simply use a VPN all the time. Or it may be a way to associate the account with another region where prices are lower. You can show a page saying that they need to disable the VPN to continue because registration is only available without a VPN. When the user returns without a VPN, they can go back to the form and create an account.

mobile, os, and engine

How to Interpret It

mobile, os, and engine provide request context:

  • mobile shows whether the request came from a mobile device;

  • os shows the operating system, for example Windows, macOS, Linux, iOS, or Android;

  • engine shows the browser engine, for example Blink, WebKit, Gecko, Goanna, or another engine.

These fields do not indicate suspicious behavior on their own. But you can use them as additional context when analyzing requests.

When It Is Useful

Example

You see a wave of suspicious registrations. Nothing unusual is visible in a single request, but the traffic contains a repeated combination of signals: a desktop device, Linux, the same browser engine, a hosting subnet, and a medium bot_score.

Together with other signals, mobile, os, and engine help describe an automated pattern and configure rules more accurately. For example, you can send such registrations for an additional check or limit the request rate.