Read browser scanner results

The browser scanner collects technical signals about the participant’s browser. These can help investigate unusual visits or automated traffic. They are indicators, not proof that a response is valid or invalid.

The API name for this built-in value is fpscanner. It is available in JavaScript calculations and question scripts, including Preview:

const scan = variables.get("fpscanner");

You do not need to install or run a scanner yourself. When Settings → Automatic data collection → Browser scanner results is enabled, collection finishes before your script runs, with a ten-second timeout. When disabled, no scan runs, including in Preview or JavaScript steps before the first page. Replay can be disabled independently.

Check collection status first

scan.status scan.result
"ok" The collected browser-signal object.
"disabled" null: collection is turned off in the survey settings.
"collection-failed" null: collection failed.
"collection-timeout" null: collection exceeded the timeout.

For a simple, inspectable result, add a calculation named browser_scan_status, choose Text, and enter:

const scan = variables.get("fpscanner");
return scan.status;

The returned status is then available in Results, exports, and later conditions. A failed collection does not mean the participant is a bot.

Inspect the result only when needed

A successful result contains these fields:

Field Purpose
signals Browser and environment measurements. Individual signals may be unavailable even after a successful collection.
fastBotDetection The scanner’s quick automated-traffic assessment.
fastBotDetectionDetails Details of the checks, including detected and severity values.
fsid The scanner’s fingerprint identifier. Treat it as sensitive data.
nonce, time Collection-specific metadata.
url The page path, without its query parameters or origin.

To record only whether the quick assessment flagged a visit, use a Yes / no result:

const scan = variables.get("fpscanner");
return scan.status === "ok" && scan.result.fastBotDetection === true;

Here false includes failed collections. Save the separate status result above if your analysis needs to distinguish “not flagged” from “not collected.” Do not exclude participants solely on this value.

Understand when values change

When collection is enabled, every actual page entry, including Back and reload, gets a fresh scan. Ordinary answer edits and reconnects within the same page reuse the scan. JavaScript steps before the first page can also read a collected result.

The value is read-only and is not automatically a saved response variable or a server-side condition input. Return a Number, Text, or Yes / no value from a declared calculation to save a specific finding. A complete scan is an object and cannot be returned as a typed Flow result.

Browser fingerprints can identify or link people. Save the minimum required by the study. Recordings and scripts share the page’s collection; reading this value does not create a second scan. See session recording and privacy.

Confirm action