Fingerprint and FingerprintJS alternatives
Fingerprint is identification-first: a visitor ID for web, iOS and Android, plus Smart Signals for VPNs, proxies, bots and tampered browsers. Pick by your reason to switch: an allow, review or block answer without writing rules (Maskbreak), a browser ID you host (FingerprintJS), or signup and login policies with published prices (Castle). Looking for fingerprint.to? That is an unrelated people-search site; see the FAQ. Last reviewed: September 2026.
Fingerprint vs FingerprintJS: which one are you replacing?
Fingerprint (fingerprint.com, legally FingerprintJS, Inc.) sells Fingerprint Identification, the product once called FingerprintJS Pro. Its JavaScript agent, or its iOS and Android SDKs, send evidence to Fingerprint, which returns a visitor ID; by Fingerprint’s own account the ID holds across incognito sessions. Your server then reads Smart Signals through the Server API or a webhook. The Smart Signals reference documents VPN detection, residential and data-center proxy detection, Tor exit nodes, bot detection, browser tampering that includes antidetect browsers, incognito mode, virtual machines, velocity, and a Suspect Score: a weighted average of the other signals, with weights you can set. Calling it “just an identifier” is out of date.
Two newer pieces matter in a comparison. A Rules Engine, in open beta, turns your rulesets into “Block with response” or “Allow with headers”. Through the Server API your own code enforces that action; a Flow worker on a Cloudflare-proxied site, also in beta, can enforce it for you. And AI agent detection verifies agents that sign their requests with Web Bot Auth and reports the provider.
FingerprintJS is the open-source library the company grew out of in 2012. It has been MIT-licensed again since v5.0.0 (October 2025); v4 was under the Business Source License, which allowed production use only with a commercial licence. It runs entirely in the browser and has no Smart Signals, and its README says its accuracy is “significantly lower than in the commercial version” and that its fingerprints are “vulnerable to spoofing and reverse engineering”. Moving from one to the other is a change of job, not a package rename.
What to look for in a replacement
- Output: a visitor ID your code interprets, or an allow, review or block decision your code routes on
- Plan: which signals your tier returns. Fingerprint’s own pages disagree about its Free plan
- Platforms: Fingerprint has native iOS and Android SDKs; Maskbreak checks browser visits only
- History: visitor IDs, device history and account links do not carry over from one vendor to another
- Missing evidence: what your app does when the browser check never arrives. Hold the action; silence is not a clean result
- Allowance shape: Fingerprint counts calls per month; Maskbreak counts visitor checks per calendar month, with an hourly cap (1,000 an hour on Free, up to 50,000 on Scale). Measure your busiest hour as well as your month
Three options for different use cases
Your page loads Maskbreak’s browser script at the form you want to protect. Your server forwards the values it returns to POST /v1/evaluate and gets back a decision, a risk_score from 0 to 100, the reasons, a network block and, when Maskbreak’s device check completes, a device block. The default policy decides without any rules from you: a VPN alone is flagged for review, while proxies, Tor, automation, emulators and fake browsers are blocked. You can change the action per signal on the console’s Rules tab. network.service names the VPN or proxy operator when known, and if your backend sends its own accountId, the response counts how many of your accounts have used that device. What it does not do: identify devices inside a native mobile app, verify signed AI agents, or import your Fingerprint visitor IDs and history. The production bare-IP lookup covers only Tor exits and cloud-server ranges; VPN and proxy verdicts need the live visit. Start with the quickstart, or run the live check on the homepage in your own browser first.
If a returning-browser ID was all you used Fingerprint for, the FingerprintJS library gives you one with no vendor account: add it to your pages, compute the ID in the browser and store it with your sessions. Since v5.0.0 it is MIT-licensed, so commercial production use no longer needs a licence, and v5.2.0 shipped in April 2026. The costs are listed in its own README: lower accuracy than the hosted product, an ID the visitor can spoof because it is computed on their machine, and no VPN, proxy, bot or tampering signals. Treat the ID as a hint about who is back, never as evidence your server has verified. Fingerprint’s MIT-licensed BotD adds a client-side bot check with the same caveat.
Castle (castle.io) works on the account side. Castle.js creates a request token in the browser; your server sends it to the Filter API for anonymous signup, login and password-reset attempts, or to the Risk API once the user is signed in. Back come bot, account-takeover and account-abuse scores with named signals such as headless_browser, spoofed_device, vpn_access and residential_proxy_access, plus an action: Castle’s default policies deny scores from 90 and challenge from 60, and Policies you edit change that. It has iOS, Android, Flutter and React Native SDKs and, since August 2026, a standalone IP Intelligence API. Its signals reference names no signal for antidetect browsers; spoofed_device and tamper checks cover part of that ground. Read the Castle vs Maskbreak comparison for the detail.
Fingerprint vs Maskbreak, question by question
Both run an invisible check in the browser and read the result on your server, and both flag VPNs, proxies, Tor, bots and tampered browsers. The difference is what comes back and who turns it into an action. Fingerprint’s cells come from its public docs and pricing page, read on 24 September 2026.
| Question | Maskbreak | Fingerprint |
|---|---|---|
| What your server gets back | decision, risk_score, reasons | Visitor ID, Smart Signals, Suspect Score |
| Who turns it into an action | A default policy; change it per signal on the Rules tab | Your code, or rulesets in the Rules Engine (beta) |
| A VPN and nothing else | review by default | VPN flag, the methods that fired and a confidence |
| Names the VPN or proxy service | network.service, when known | Proxy provider in its documented examples; no VPN provider field documented |
| Fake (antidetect) browser | antidetect_browser; blocked by default | Covered by Browser Tamper Detection |
| Signed AI agents | Not named; automation is flagged | Verified through Web Bot Auth, provider named |
| Native iOS and Android apps | No; browser visits only | Native SDKs for both |
| Free allowance | 10,000 visitor checks a month on the Free plan, up to 1,000 an hour | Up to 1,000 web and iOS calls a month; 500,000 Android |
What a Maskbreak answer looks like at signup
A script drives a headless browser through your signup form from a rented cloud server. The address alone stays allow, because offices and cloud desktops use cloud servers too; the browser check sees the automation framework, and the default policy blocks. Example response, selected fields:
{
"decision": "block",
"risk_score": 70,
"reasons": ["datacenter_asn", "automation_detected"],
"network": {
"vpn": false,
"proxy": false,
"datacenter": true,
"tor": false,
"residential": false,
"service": null
},
"device": {
"automation": true,
"antidetect": false,
"emulator": false,
"tampering_score": 0
}
}
Now a real browser on a home broadband line, signing up for the third time. Fingerprint can count this too: its velocity signals report how many distinct linked IDs (the identifier your code attaches, such as an account ID) a visitor ID has carried over the last 5 minutes, hour and 24 hours. The difference is the window. When your backend adds its own accountId (a pseudonymous user ID, never an email), Maskbreak counts how many of your accounts have used that device in the last 90 days, inside your own account only, with your IDs linked as keyed hashes. Example response, selected fields:
{
"decision": "allow",
"risk_score": 0,
"reasons": ["multi_account_device"],
"network": {
"vpn": false,
"proxy": false,
"datacenter": false,
"tor": false,
"residential": true,
"service": null
},
"device": {
"visitor_id": "<stable ID for this browser>",
"linked_accounts": 3,
"multi_account": true
}
}
The default leaves that at allow, because families share laptops. For a free trial or a signup bonus, act on it in your own code: route an allow that lists multi_account_device the way you route a review, or set your own threshold on device.linked_accounts. A Review rule for multi-accounting on the Rules tab does the first of those for you, and it never lowers a block: a proxy, bot, fake browser or emulator on the same visit still blocks. The multi-accounting playbook covers what to do with each answer.
Fingerprint pricing in September 2026, next to Maskbreak’s
Free plan: up to 1,000 web and iOS API calls a month and 500,000 Android calls, plus a 14-day Pro Plus trial. Pro Plus starts at $99 a month for 20,000 calls, then $4 per 1,000 more. Enterprise is priced on request and adds more Smart Signals, a 99.9% SLA and 90 days of data retention (30 days on the other plans). Server API reads are not billed.
Free plan: 10,000 visitor checks a month, up to 1,000 an hour, every signal included, no card and no sales call. Starter is €29 a month for 50,000 checks, Growth €99 for 250,000 and Scale €299 for 1,000,000; Enterprise starts at €990 a month with an SLA and a signed DPA. Every plan runs the same checks, yearly billing gives two months free, and prices exclude VAT. Approved public-interest organisations can have the cap removed.
Both allowances are monthly, but bursts are capped differently, so compare them at your busiest hour too. Fingerprint counts calls per month and applies a default limit of 5 requests a second on every plan. Maskbreak counts visitor checks per calendar month, with an hourly cap: 1,000 an hour on Free, 5,000 on Starter, 20,000 on Growth and 50,000 on Scale. The Free cap is comfortable for steady traffic and tight during a launch that brings several thousand signups in one hour. Past either limit Maskbreak answers 429 with Retry-After and adds no overage charge, so decide in advance whether your form waits, queues or lets the visitor through. And check the plan before you compare features: Fingerprint’s Smart Signals reference and pricing table show VPN, proxy and tampering signals on Free, while its billing guide says Smart Signals need Pro Plus or Enterprise.
Stopping bots without losing real signups
Every hosted option on this page checks the visit invisibly, so none of them costs you a conversion by showing a puzzle. Conversions are lost in the policy instead. Block on evidence a real customer seldom produces, and send the rest to a cheaper step such as an email code. This is how Maskbreak’s defaults split them:
- A VPN on its own:
review, since plenty of honest people use one - Apple’s iCloud Private Relay or a browser in a virtual machine, on its own:
review, withprivacy_relayorvirtual_machinelisted - A cloud-server address with an ordinary browser:
allow, withdatacenter_asnlisted - Private browsing:
allow, withprivate_browsinglisted - A device another of your accounts has used:
allow, withmulti_account_devicelisted - A disposable email domain, when you send
email: raised from allow toreview
- An automation framework driving the browser (
automation_detected) - A fake (antidetect) browser or other browser tampering (
antidetect_browser) - An emulator (
emulator_detected) - A detected proxy, residential ones included (
proxy_detected) - A Tor exit (
tor_exit_node)
Two habits protect conversion more than any threshold. Start in watch mode: log every decision, let every visitor through, and compare a week of Events with what your support inbox already knows before you enforce anything. And decide what a missing result means: if the browser evidence never arrived, step up or hold, rather than treating silence as clean. Our guides to bot detection without CAPTCHAs and a staged fraud-detection rollout walk through both.
Other Fingerprint competitors: open-source libraries and hosted services
Two kinds of tool compete with Fingerprint: libraries you run yourself, and hosted services that send your server an answer. Prices below were read on the vendors’ pages in September 2026.
- FingerprintJS v5 (MIT): a browser identifier, no Smart Signals
- BotD (MIT): Fingerprint’s own client-side bot check
- ThumbmarkJS (MIT): a browser fingerprint library with an optional hosted API
- ClientJS (Apache-2.0): a device-information library; no push to GitHub since January 2023
- CreepJS (MIT): a fingerprinting research demo, not a production service
- ThumbmarkJS API: its pricing page lists a free API tier of 1,000 calls a month and Pro at €15 a month for 15,000; check which plan includes its bot and VPN checks
- SEON Device Intelligence: web, iOS, Android, React Native and Flutter SDKs inside a wider fraud and AML platform; Starter is $699 a month for 2,500 fraud checks (SEON alternatives)
- Castle: account-abuse scores and Policies, Pro at $200 a month (card 03 above)
- Fingerprint itself: if only the decision step is missing, try its beta Rules Engine before you migrate
One rule covers the whole left column: an identifier computed on the visitor’s own machine is only as honest as that machine. Use it to recognise a returning browser, and take fraud evidence from a check your server verifies.
How to test Maskbreak next to Fingerprint before you switch
Run both on the same form for a week before you remove anything. Send Maskbreak only the values its own SDK returns: a visitor ID or event ID from another service is not a Maskbreak token or event ID, and the two are not interchangeable.
- Create a Maskbreak account and keep its live key in your server environment. The browser script does not need that secret.
- Load Maskbreak’s browser SDK and call
window.Sentinel.collect()at the action you want to check: signup, login, checkout or a bonus claim. - Send the values
collect()returns to your backend with the form, exactly as the quickstart shows. Your backend callsPOST /v1/evaluatewithAuthorization: Bearer YOUR_LIVE_KEY. - Stay in watch mode: keep your existing Fingerprint integration running unchanged, log
decisionandreasonsbeside Fingerprint’s signals for the same visit, and let every visitor through. The integration guide starts this way. - Before you enforce, decide what
reviewmeans in your app (an email code, a manual queue, a smaller first payout) and what happens when thedeviceblock is missing ordegradedis true. - Reject
test,sandboxorsampleresults in production, and keep your existing authentication in front of every protected action.
Fingerprint likewise recommends verifying identification evidence on the server and defending against replay. Whichever service you choose, a browser-supplied verdict is not authorization. Our controlled test cases let you check both before you change enforcement.
See what Maskbreak says about your own signups
Free plan: 10,000 visitor checks a month, no card. Paid plans from €29 a month. Start in watch mode, so nothing is blocked until you have read the log.
Frequently Asked Questions
What is the best Fingerprint alternative?
It depends on the part of Fingerprint you would replace. For an allow, review or block answer on each browser visit, with named reasons and no rules to write first, Maskbreak. For a browser identifier you host yourself, the MIT-licensed FingerprintJS library. For login and signup abuse policies with published prices and mobile SDKs, Castle. If Fingerprint already gives you the right signals and only the decision step is missing, its beta Rules Engine may close that gap without a migration.
Is there a free FingerprintJS alternative?
FingerprintJS itself is free again: since v5.0.0 (October 2025) the library is MIT-licensed, so commercial production use no longer needs a licence; v4.x was under the Business Source License. ThumbmarkJS is another MIT library, and ClientJS (Apache-2.0) has had no push to GitHub since January 2023. These libraries compute an identifier in the browser; VPN, proxy and bot checks come from hosted services. Maskbreak is one: its Free plan includes 10,000 visitor checks a month with no credit card, and paid plans start at €29 a month.
Is fingerprint.to the same as Fingerprint?
No. fingerprint.to is a public-data search engine run by Fingerprint Technologies LLC, a Wyoming company. It looks up a username, email address or phone number across more than 700 platforms and sells search tokens (Pro is $30 a month for 500). Fingerprint at fingerprint.com is FingerprintJS, Inc., a device identification company, and nothing on fingerprint.to’s pages connects the two. Maskbreak is not a fingerprint.to alternative either: it checks visits to your own website. fingerprint.to’s own comparison post sets it against OSINT Industries.
Does Fingerprint detect VPNs, proxies and antidetect browsers?
Yes. Fingerprint’s Smart Signals reference documents browser VPN detection, residential and data-center proxy detection, Tor exit nodes through IP blocklist matching, bot detection, and browser tampering detection that includes antidetect browsers. Its pages disagree on which of these the Free plan returns: the Smart Signals reference and the pricing table list several, while the billing guide says Smart Signals need Pro Plus or Enterprise. Check your plan. The open-source FingerprintJS library has none of these signals.
How is Maskbreak different from Fingerprint?
Fingerprint is identification-first: a visitor ID plus signals that your code, or its beta Rules Engine, turns into an action. Maskbreak returns the action: allow, review or block, with a risk score and named reasons, under a default policy you can change per signal. Maskbreak names the VPN service when known (Fingerprint documents a proxy provider name but no VPN provider field), and its default policy sends a VPN on its own to review. Fingerprint covers native iOS and Android apps and verifies signed AI agents; Maskbreak checks browser visits only. Visitor IDs and history do not carry over between them.
Is there a Fingerprint alternative for device identification without tracking?
Any device identifier recognises a browser, so ask who holds the data and how far it is linked. Self-hosting the MIT FingerprintJS library keeps the identifier inside your own systems. Maskbreak links devices to accounts only within your own account, links your account IDs only as keyed hashes and never across customers; its times_seen counter, though, is shared history across the service, so it is not a no-tracking option. Whether you need consent depends on where you operate and why; our blog post on whether device fingerprinting is legal covers the EU and UK questions.