Anonymity signals are a subset of the full signal set that feeds the Risk Score. This page covers connection and masking signals. For every signal and its weight in one table, see Signals.
Why blocklists are not enough
The naive approach to anonymity detection is a static IP blocklist: keep a list of known VPN and proxy IPs and look up each visitor. That approach is always behind, for three reasons.VPNs rotate IPs
Commercial VPN services cycle through large IP pools and add new addresses daily. A list that was current yesterday already misses today’s exit nodes.
Residential proxies hide on consumer ISPs
Residential proxies route traffic through real consumer ISP addresses that never appear on a datacenter blocklist, so a lookup sees an ordinary home connection.
New services outpace static DBs
New masking services launch faster than any single database can catalog them, so a blocklist is structurally incomplete the day it ships.
Connection types
Every visit resolves to a connection type, shown in the dashboard and stored on the snapshot. These are the labels you will see:| Connection type | What it means |
|---|---|
| Direct | An ordinary connection with no masking signal. This is the default when no masking is found. |
| Tor | The connection exits through the Tor network. |
| Privacy Relay | iCloud Private Relay or a similar privacy-forwarding service. |
| VPN | The connection runs through a VPN, corroborated by the 2-of-3 rule below. |
| Proxy | The IP is flagged as a proxy. |
A single connection type is the headline label. Underneath it, multiple individual signals can fire (for example a proxy IP that also carries a datacenter and abuser flag). The connection type is a summary. The
Details array on the Risk Score is the full breakdown. See Risk Score.The masking and reputation signals
These are the connection-level signals ShieldLabs evaluates. Each one is a plain-language entry in theDetails array when it fires, with the points it contributed.
| Signal | Weight | What it indicates |
|---|---|---|
| Tor | 99 | The connection exits through the Tor network. |
| VPN | 15 | The connection runs through a VPN, corroborated by the 2-of-3 rule. |
| Privacy Relay | 15 | iCloud Private Relay or a similar privacy-forwarding service. |
| Proxy | 10 | The IP is flagged as a proxy. |
| Datacenter IP | 10 | The IP belongs to a datacenter or hosting range, not a consumer ISP. |
| Abuser Flag | 10 | The IP or device appears on an abuse reputation list. |
| Browser VPN/Proxy | 30 | An in-browser VPN or proxy extension is detected. |
Privacy Relay is treated as lower risk
Not every masked connection is adversarial. iCloud Private Relay and similar services are used by ordinary, privacy-conscious people on their everyday devices. ShieldLabs detects Privacy Relay as its own connection type and scores it far below Tor, so a privacy-aware customer does not look like a Tor exit node. This is a deliberate product nuance. The point of explainable scoring is that your code can treat Privacy Relay differently from a datacenter VPN. Both are masking, but they carry very different intent, and you decide which actions each one warrants.Why corroboration surfaces VPNs that blocklists miss
VPN is the signal where corroboration matters most, because a blocklist alone gets it wrong in both directions: it flags retired IPs that are no longer VPNs, and it misses fresh exit nodes and residential proxies. ShieldLabs does not call a connection a VPN from a single hit. VPN is asserted only when at least 2 of 3 independent checks agree:TCP / network fingerprint
The connection’s network fingerprint is consistent with a VPN tunnel rather than a direct connection.
| Signal | Weight | What it indicates |
|---|---|---|
| IP Mismatch | 30 | The public IP does not match the IP derived from the real-IP (WebRTC) check. |
| STUN not Checked | 30 | The real-IP check did not complete, so masking could not be ruled out. |
The real-IP discovery runs after the initial score, so it arrives in the
update webhook (Phase: "update"), which carries only the delta signals. Correlate by RequestID and keep your handler idempotent. See Webhooks.Anti-detect browsers and spoofing
Anti-detect browsers exist to forge a clean-looking browser signature so a visitor can run many identities without being linked. A fingerprint on its own can be faked, so ShieldLabs surfaces these tools through cross-layer mismatch: it compares what the browser claims against what the network and local environment actually show. When the layers disagree, the spoof is visible even though the fingerprint looks plausible.| Signal | Weight | What disagreement reveals |
|---|---|---|
| OS Mismatch | 60 | The OS the browser claims does not match the OS the network fingerprint shows. |
| Anti-detect Browser | 60 | Local indicators consistent with anti-detect or fingerprint-spoofing tooling. |
| Port-scan Proxy | 60 | Local routing indicates the connection is proxied. A hint of anti-detect tooling. |
Location and timezone mismatch
A masked connection often leaves a tell in geography. If a browser reports a Berlin timezone while its IP geolocates to Singapore, the two layers disagree, and that disagreement is its own signal.| Signal | Weight | What it indicates |
|---|---|---|
| Timezone Mismatch | 10 | The browser timezone does not match the timezone of the IP. |
Where the “up to 99%” accuracy comes from
ShieldLabs corroborates a verdict across independent layers rather than trusting any single lookup. The headline accuracy figure of up to 99% comes from 2-of-3 identifier agreement: instead of relying on one input, ShieldLabs cross-checks the device fingerprint layer and the network layer (IP reputation, network fingerprint, and the failed real-IP check) and only commits to a masking verdict when independent layers corroborate. Two layers agreeing is far harder to fake or to get wrong than a single blocklist lookup, and the VPN 2-of-3 rule above is one concrete instance of that approach.ShieldLabs claims up to 99% accuracy, not 100%. Anonymity detection is probabilistic, and the honest framing is that a corroborated signal is strong evidence, not a guarantee. Always weigh the Risk Score, the
Details, and the sensitivity of the action together.How anonymity feeds your decision
ShieldLabs surfaces the connection type and the signals behind it. Your application owns the verdict. There is no in-product rules engine: you read theScore and Details from the webhook or History API and write the allow, challenge, review, or block logic in your own code.
A sample webhook body for a visit on a proxy with a timezone mismatch:
Is tor or Is proxy entry on a sensitive action usually warrants a hard challenge, while an Is abuser flag is worth treating as high-risk even at a moderate score.
Next steps
Signals
Every signal, its weight, and what it means for the Risk Score, in one reference table.
Risk Score
The 0-100 explainable score, the Clean / Low / Medium / High bands, and how signals combine.
Device Intelligence
How the browser fingerprint layer joins the network layer to catch spoofing.
Acting on the Risk Score
Turn Score plus Details into allow, challenge, review, or block in your own code.