Maskbreak vs Castle (castle.io)
Both collect evidence in the visitor’s browser, answer one server-side call and look at the device and network behind it. The difference is what each is built around. Castle follows a user account from signup through every later login, with three risk scores, dozens of named signals, and hosted Policies and lists for a fraud team to run. Its published plans are Free (a $5 monthly usage budget, for evaluation), Pro at $200 a month and Enterprise from $4,000 a month. Maskbreak checks one visit and returns allow, review or block with the reasons; its Free plan covers 10,000 visitor checks a month in production, and paid plans start at €29 a month.
On this page: what Castle is, how the Castle token works, the feature table, Castle pricing, one fake signup scored by both and which to choose. Surveying the wider field instead? Read our Castle alternatives or Fingerprint alternatives guide.
What is Castle?
Castle (legally Castle Intelligence, Inc.) is a bot and account-abuse prevention platform based in San Francisco. Johan Brissmyr and Sebastian Wallin founded it in 2015, it went through Y Combinator in Winter 2016, and Index Ventures led its $9.2M Series A in 2019. We found no acquisition or later round, and its about page calls the company profitable. The homepage promise is “Stop bots and account abuse at scale”, built on device, email, IP and behavioural intelligence, and the use cases reach well past the login form: fake accounts, account takeover, multi-accounting, content abuse, SMS pumping, account sharing, transaction abuse and API abuse. Atlassian, Canva, Rockstar Games, Rakuten and YNAB are among the names on its customer page.
Castle moved fast in 2026, which is why older comparisons (an earlier version of this page included) undersell it. Its older proxy_ip signal already covered datacenter proxies, VPNs and other known proxy ranges. On 28 May it added residential_proxy_access, on 18 June vpn_access, with the operator in ip.tunnels when known, and on 6 August a standalone IP Intelligence API that reports recently seen proxy, VPN, relay and Tor tunnels behind any address, with no browser integration at all. Its mobile SDKs gained phone-call detection in May, aimed at scams where a fraudster talks the victim through a login or a transaction while on the phone.
The Castle token and device fingerprint, and what Maskbreak sends instead
Castle. The browser SDK is Castle.js. Castle’s docs describe version 3.0, whose public surface is two calls, configure() and createRequestToken(); the older client-side page, form and custom event tracking is gone, so tutorials written for earlier versions will not match.
The request token carries the device and behavioural signals Castle.js collected in the browser. It expires after 120 seconds, has to be created fresh for every backend request, and goes in the request body, not a header. Your server sends it to the Filter API while the visitor is anonymous (a registration, login or password-reset attempt) or to the Risk API once they are signed in. The answer holds three scores from 0 to 1 (Bot, Account Takeover and Account Abuse), the signals that fired, and a policy action: allow, challenge or deny.
One trap when you install it: on 24 September 2026 the latest @castleio/castle-js on the public npm registry was 2.8.5, not a 3.x release. Check which version your bundle actually ships before you follow the 3.0 docs; Castle’s dashboard has had an SDKs page since 1 September that shows which versions your traffic runs.
Maskbreak. The browser snippet collects two values, a network token and a device event ID from Maskbreak’s device check, and adds them to your form or hands them to your code. Your server sends both to POST /v1/evaluate with the API key. Back comes a decision (allow, review or block), a risk_score from 0 to 100, machine-readable reasons, a network block, a device block when the browser check completed, and evaluated_in_ms, the server’s own processing time for that call. The quickstart shows the whole call.
The actions line up: Castle’s allow, challenge and deny match Maskbreak’s allow, review and block, and both come back on the first call, before you write a single rule. What drives the default differs. Castle ships default policies that act on its scores (on the dashboard’s 0–100 scale, 90 to 100 denies and 60 to 100 challenges), and fitting them to your traffic means editing Policies and lists. Maskbreak’s default acts on named signals: a proxy, Tor exit, automation, emulator or fake browser blocks, a VPN on its own goes to review, and a cloud-server address alone stays allow. You change it one signal at a time on the console’s Rules tab.
Can the Castle token be bypassed or replayed? Castle plans for both. Beyond the 120-second expiry, its signals reference lists three signals for tampered evidence: missing_device_data when the device data arrives empty (possibly an attempt to skip the browser analysis, possibly a misconfigured integration), invalid_device_data when it cannot be interpreted, “most likely due to a replay attack or request tampering”, and replayed_device_data when the same device data is used again. Sandbox environments accept mock tokens, so real users belong in a production environment. Maskbreak’s integration guide sets the same rule for enforce mode: a missing token, a missing device result or degraded evidence is not a clean check, so the action is held, not waved through.
Maskbreak vs Castle, feature by feature
| Feature | Maskbreak | Castle |
|---|---|---|
| How you call it | Browser snippet + one POST /v1/evaluate | Castle.js token + Filter API (before sign-in) or Risk API (after) |
| What comes back | allow / review / block, risk_score 0–100, reasons | Bot, Account Takeover and Account Abuse scores (0–1), signals, allow / challenge / deny |
| Default action | Signal-based: proxy, Tor, automation, emulator or fake browser blocks; VPN alone goes to review | Score-based default policies: 90–100 deny, 60–100 challenge |
| Tuning the policy | Per-signal actions on the Rules tab; allow or block pins per IP or device | ✓ Policies on event type, scores, signals and lists; Log Only mode; backtesting |
| Response Latency | Each response reports evaluated_in_ms; measured figures on /status | ~100 ms added in Cloudflare sync mode, plus network time to US East, per Castle |
| VPN detection | ✓ vpn_detected → review; service named when known | ✓ vpn_access (June 2026) and proxy_ip; operator in ip.tunnels when known |
| Residential proxy detection | ✓ proxy_detected → block by default (known proxy exits; no published detection rate) | ✓ residential_proxy_access (address seen on a provider network in the last 7 days) |
| Tor and cloud-server addresses | ✓ tor_exit_node, datacenter_asn | ✓ tor_ip, datacenter_ip |
| Antidetect (fake) browsers | ✓ Named reason: antidetect_browser | No signal named for antidetect browsers in its signals reference; spoofed_device and tamper detection |
| Headless browsers and bots | ✓ automation_detected | ✓ Bot score, headless_browser, http_client_library, bot_behavior |
| Signed-in users (account takeover) | Run the same check at login; no per-user takeover model | ✓ Risk API per user ID; Account Takeover score, impossible_travel |
| Several accounts on one device | ✓ multi_account_device when you send accountId (your accounts only) | ✓ multiple_accounts_per_device, linked entities |
| Email signals | Disposable domain only | ✓ Disposable, fraudulent, unreachable, invalid, low-quality, generated, aliases |
| Lists and alerts | IP and device exception pins; webhooks | ✓ Lists of users, devices, IPs or custom attributes with expiry; webhooks; Slack alerts |
| Event history | Kept while the account exists (IPs hashed after 7 days); CSV export | 3 days (Free), 7 days (Pro), up to 18 months (Enterprise) |
| Native mobile apps | Browser visits only; no app SDK | ✓ iOS, Android, Flutter, React Native; rooted, emulated and phone-call signals |
| Server SDKs | Node, Python, PHP; plain HTTP from any language | Ruby, PHP, Python, Java, Node, .NET |
| Edge setup | Cloudflare Workers example (code) | ✓ No-code Cloudflare Worker, about 5 minutes |
| IP-only lookups | On every plan (100,000 a month on Free); Tor exits and cloud ranges only | ✓ IP Intelligence API; batches of up to 1,000 on Pro and above |
| Free plan | ✓ 10,000 visitor checks a month, production use, no card | $5 of usage a month, 1 request/second, one Sandbox environment |
| Paid plans | Starter €29/month (50,000), Growth €99/month (250,000), Scale €299/month (1,000,000); Enterprise from €990/month | Pro $200/mo; Enterprise from $4,000/mo |
Castle.io pricing (September 2026)
Castle publishes its prices on castle.io/pricing. Free and Pro are a monthly API budget: a successful Risk or Filter request costs $0.005, each valid IP returned by a lookup costs $0.001 (so a full 1,000-address batch costs up to $1), and the plan fee buys that much usage. Enterprise is custom, priced by monthly tracked users or by volume. Unused budget expires at the end of each billing cycle, and you can cancel at any time.
Free: 10,000 visitor checks a month, up to 1,000 an hour. Every signal included, production use allowed, no card.
Paid: Starter €29/month (50,000 a month), Growth €99/month (250,000), Scale €299/month (1,000,000), Enterprise from €990/month with an SLA and a signed DPA. Every plan runs the same checks; prices exclude VAT, and yearly billing gets two months free.
When a month’s allowance is used up you get HTTP 429 with Retry-After until the 1st. There are no overage charges; you upgrade instead.
Approved public-interest organisations: the cap comes off.
Free: $5 of usage a month (1,000 Risk/Filter requests or 5,000 IP lookups), no overage, 1 request per second, 3-day retention, 3 seats, no batch IP lookup, and one environment, which Castle’s Cloudflare docs name as the Sandbox. Castle calls the budget “for evaluating Castle” and says to upgrade to Pro before production.
Pro, $200/mo: $200 of usage (40,000 Risk/Filter requests or 200,000 IP lookups), then pay as you go at the same rates. 5 requests per second, 7-day retention, 5 seats, 2 environments, batch IP lookup, chat and email support, no SLA, no contractual minimums.
Enterprise, from $4,000/mo: priced by monthly tracked users or by volume. No rate limits, up to 18 months of retention, no cap on seats or environments, the Querying (Events) API, full IP database downloads, integration support, a dedicated Slack channel and an SLA.
In practice, protecting real users on Castle starts at Pro, $200 a month. Castle’s sandbox docs explain why the Free environment is not for production: a sandbox accepts mock tokens that let the client set the returned action, and Castle says it “must never protect real users”.
What a month of risk checks costs at list prices. The Maskbreak column is the smallest plan that covers the volume (prices exclude VAT). The Castle column is our arithmetic from the published rates on Pro, not a quote; Enterprise terms are negotiated, so large volumes may price differently.
| Risk checks a month | Maskbreak | Castle (list rates) |
|---|---|---|
| 1,000 | Free | $0 on Free (an evaluation plan) |
| 40,000 | €29/month (Starter, 50,000) | $200 (the Pro budget) |
| 100,000 | €99/month (Growth, 250,000) | about $500 ($200 + 60,000 × $0.005) |
| 500,000 | €299/month (Scale, 1,000,000) | about $2,500 |
| 1,000,000 | €299/month (Scale, 1,000,000); see /pricing | about $5,000 |
Two costs the table leaves out. First, history: Free and Pro keep 3 and 7 days of data, so a fraud team that investigates last month’s incidents inside Castle is really shopping for Enterprise. Second, IP lookups are not the same product on both sides. Castle’s IP Intelligence API reports recently seen tunnels behind any address you send, with the operator when known; Maskbreak’s bare-IP lookup comes with every plan (100,000 a month on Free) but covers only Tor exits and published cloud ranges, and its VPN and proxy verdicts need a live visit.
One fake signup, scored by both
A common account-farm setup: one fake (antidetect) browser profile per account, each profile routed through a residential proxy so the address looks like a home broadband line. The check runs on the signup form, before the account exists.
Castle sees it in the Filter API call on a $registration attempt. If Castle has seen the address on a residential proxy provider’s network in the last seven days, residential_proxy_access fires and ip.tunnels gives the proxy type and, when known, the operator. Device parameters the profile invented may raise spoofed_device; the signals reference has no signal named for antidetect browsers. Castle’s default policies then act on the resulting scores, and a Policy you add can deny, challenge, or put the device on a list for someone to review.
Maskbreak returns one decision with the reasons attached. When the address is a known proxy and the browser check names a fake browser, the default policy blocks. Example response, selected fields:
{
"decision": "block",
"risk_score": 100,
"reasons": ["proxy_detected", "antidetect_browser"],
"network": {
"vpn": false,
"proxy": true,
"tor": false,
"service": "<operator name when known>"
},
"device": {
"antidetect": true,
"automation": false,
"tampering_score": 0.9
}
}
Swap the proxy for a consumer VPN on a clean browser and the answer drops to review, not block, because plenty of real people sign up through a VPN. Example response, selected fields:
{
"decision": "review",
"risk_score": 35,
"reasons": ["vpn_detected"],
"network": {
"vpn": true,
"proxy": false,
"datacenter": false,
"tor": false,
"residential": true,
"service": "<operator name when known>"
}
}
Three caveats apply to both vendors. First, no address check can promise to recognise every residential exit. Castle’s residential_proxy_access needs the address to have turned up on a provider’s network in the last seven days (its signals reference says proxy_ip, which also weighs timezone and timing anomalies, does not cover residential proxies), and Maskbreak publishes no detection rate at all.
Second, a rotating pool changes the address on every attempt, but not the machine. That is where the device side helps. Send your accountId and Maskbreak’s device block counts how many of your accounts the device has been linked to (linked_accounts); past one, the reason multi_account_device appears. Castle’s equivalent is multiple_accounts_per_device. The multi-accounting playbook covers what to do with it.
Third, missing browser evidence is not a clean result: if the token never arrived, hold the signup rather than wave it through. The fake signup playbook covers what to do with each answer; for background, read our residential proxy detection guide and what an antidetect browser is.
Where Castle is the better choice, and what it costs you
- One vendor across the account lifecycle: the Filter API for anonymous registration, login and password-reset attempts, the Risk API for signed-in users, with separate Bot, Account Takeover and Account Abuse scores.
- A hosted rules engine built for fraud analysts. Policies trigger on event type, scores, signals and lists, can run as Log Only first, and can be backtested on historical data before they go live.
- Case tooling: lists of users, devices, IPs, transaction IDs or custom attributes with automatic expiry, webhooks on policy matches and list changes, and Slack alerts.
- Detailed tunnel data: VPN, residential, datacenter or ISP proxy, relays such as iCloud Private Relay and Cloudflare WARP, and Tor, with the operator when known and when it was last seen, also sold on its own as an IP Intelligence API.
- Email intelligence well past disposable domains: fraudulent, unreachable, invalid, low-quality, generated and aliased addresses.
- Native mobile coverage: iOS, Android, Flutter and React Native SDKs, rooted and emulated device signals, and phone-call detection (Android SDK 3.1.3+, iOS SDK 4.0.0+).
- Defaults are score-based. Castle ships default policies (deny at 90–100, challenge at 60–100), and fitting them to your product means someone owns Policies, lists and backtests. That suits a fraud team that wants control; a small web team should budget someone’s time for it.
- No signal named for antidetect browsers in the signals reference (checked 24 September 2026). Castle covers the ground with spoofed_device and tamper detection, and its Head of Research publishes antidetect browser analyses.
- The Free plan is an evaluation budget: $5 of usage, 1 request per second, 3-day retention and one Sandbox environment, with Castle’s own advice to upgrade before production.
- Short history below Enterprise, 7 days on Pro. The Querying (Events) API and full IP database downloads are Enterprise-only.
- Usage cost is linear at list price: by our arithmetic, about $5,000 a month for 1M Risk requests on Pro. Enterprise, from $4,000 a month, is negotiated.
- The no-code Cloudflare Worker blocks only in sync mode, which Castle says adds about 100 ms plus network time to US East; async mode adds no latency but cannot block. The Cloudflare integration takes no user IDs in either mode, so per-user scoring still needs the Risk API.
What neither product does for you
Castle returns challenge; it does not run the CAPTCHA or send the one-time code. Its docs advise against CAPTCHAs in favour of contextual steps, such as restricting sensitive actions or trusting a device for a while after email or SMS verification, and a separate guide shows how to trigger your own CAPTCHA on a challenge. Maskbreak’s review is the same kind of instruction: hold the signup, ask for a code, or queue it for a person on your side.
Both let you start quietly. Castle Policies can run as Log Only; Maskbreak’s recommended first integration is watch mode, which logs every decision and always lets the visitor through; you switch to enforce once the Events log looks right (the staged rollout guide walks through it). Maskbreak does not replace authentication, MFA, KYC or payment-fraud tooling, and it has no manual review team, no chargeback guarantee, no cross-customer identity network and no email or phone reputation beyond the disposable-domain signal. For logins, pair either one with the controls in account takeover prevention that holds up and the account takeover playbook.
Castle or Maskbreak: which one to choose
- You want one vendor across the account lifecycle: anonymous traffic before sign-in, then takeover scoring on every login, impossible-travel checks and abuse scoring for signed-in users.
- Your fraud team wants to write, test and backtest multi-condition policies in a dashboard, with lists and Slack alerts built in, rather than a per-signal allow, review or block switch.
- You ship native iOS or Android apps (or Flutter and React Native) and want rooted-device, emulator and phone-call signals.
- You need email intelligence beyond disposable domains, or IP data in bulk: batch lookups of up to 1,000 addresses, dataset downloads on Enterprise.
- You need months of searchable history and an SLA, and an Enterprise budget from $4,000 a month fits.
- You want the default verdict to follow named signals rather than score thresholds: a proxy or fake browser blocks, a VPN on its own goes to review, and every flag comes with a reason code. Watch mode logs it all before you enforce.
- Fake (antidetect) browsers are part of your problem and you want a reason code, antidetect_browser, that says so.
- You protect web forms (signup, login, checkout, trial start) and want VPN-only visitors held for review, not refused.
- You want to run in production on the Free plan: 10,000 visitor checks a month, every signal included, no card, and paid plans from €29 a month when you grow.
- You run a public-interest service and want the cap removed: apply here.
See Maskbreak’s answer on your own signup form
Free plan: 10,000 visitor checks a month, every signal included, no card and no sales call; paid plans from €29 a month. Start in watch mode and read the reasons before you block anyone.
Castle and Maskbreak: common questions
How much does Castle cost?
As of September 2026, castle.io/pricing lists three plans. Free is $0 with $5 of API usage a month (1,000 Risk or Filter requests, or 5,000 IP lookups), no overage, 1 request per second, 3-day retention and no batch IP lookup; Castle calls it a budget for evaluating Castle and says to upgrade to Pro before production. Pro is $200 a month including $200 of usage (40,000 Risk or Filter requests), then $0.005 per request and $0.001 per IP returned, with 7-day retention. Enterprise starts at $4,000 a month, priced by monthly tracked users or by volume. By our arithmetic at list rates, 1 million Risk requests a month on Pro comes to about $5,000.
What is the Castle request token?
It is the value Castle.js creates in the browser with createRequestToken(). It carries the device and behavioural signals Castle.js collected, expires after 120 seconds, and has to be created fresh for every backend request and sent in the request body, not a header. Your server forwards it to Castle’s Filter API before sign-in or to its Risk API after sign-in. Castle’s docs describe Castle.js 3.0, although on 24 September 2026 the public npm registry still listed 2.8.5 as the latest @castleio/castle-js. Maskbreak works the same way in outline: its browser snippet collects a network token and a device event ID, and your server sends both to POST /v1/evaluate.
Does Castle use device fingerprinting?
Yes. Castle fingerprints devices on the web through Castle.js, whose signals travel in the request token, and in its iOS, Android, Flutter and React Native SDKs. Its device signals include spoofed_device, headless_browser, emulated_device and rooted_device. Castle describes its fingerprinting as up to 99.5% accurate with a 0.001% collision rate; those are Castle’s own figures and we have not tested them. Maskbreak’s device check returns a visitor ID, a tampering score and flags for fake browsers, automation, emulators and virtual machines. Maskbreak publishes no accuracy figure, because none has been measured.
Does Castle detect VPNs and residential proxies?
Yes. Castle’s proxy_ip signal already covered datacenter proxies, VPNs and other known proxy ranges, and in 2026 it added two named signals: residential_proxy_access on 28 May (the address was seen on a residential proxy provider’s network in the last 7 days) and vpn_access on 18 June. Its ip.tunnels data gives the tunnel and proxy type and the operator when known, and it also has tor_ip and datacenter_ip. On a live visit, Maskbreak reports VPN, proxy, Tor and cloud-server signals: a VPN on its own returns review with the service named when known, while a proxy or Tor exit returns block by default. It does not report proxy type, relays or when a tunnel was last seen, and its bare-IP lookup covers only Tor exits and published cloud ranges, so it has no equivalent of Castle’s IP Intelligence API.
Is Maskbreak a free alternative to Castle?
For checking visitors on web forms at modest volumes, yes. Maskbreak’s Free plan includes 10,000 visitor checks a month, with every signal included, no card, and production use allowed; paid plans start at €29 a month for 50,000. It is not a like-for-like replacement for everything Castle does: Maskbreak has no Policies-style rules engine with backtesting, no per-user account-takeover scoring, no native mobile SDKs, no email intelligence beyond disposable domains and no bulk IP data product. If you rely on those, Castle is the better fit, or you can run both.
Does Castle block bots by itself?
Not in the usual setup. Castle returns an action (allow, challenge or deny) from its Policies, which start from Castle’s score-based defaults, and your application enforces it; Castle does not run CAPTCHAs or send one-time codes for you. The exception is Castle for Cloudflare, a managed Worker that can block at the edge in sync mode (with an empty 403 by default), which Castle says adds about 100 ms plus network time to US East; async mode adds no latency but cannot block. Maskbreak works the same way: it returns allow, review or block, and your server code or a Cloudflare Worker acts on it.