{"id":14965713,"url":"https://github.com/fingerprintjs/botd","last_synced_at":"2025-05-13T22:07:13.586Z","repository":{"id":37208046,"uuid":"346424381","full_name":"fingerprintjs/BotD","owner":"fingerprintjs","description":"Bot detection library that runs in the browser. Detects automation tools and frameworks. No server required, runs 100% on the client. MIT license, no usage restrictions.","archived":false,"fork":false,"pushed_at":"2025-02-18T14:11:30.000Z","size":1703,"stargazers_count":1206,"open_issues_count":4,"forks_count":83,"subscribers_count":26,"default_branch":"main","last_synced_at":"2025-05-08T03:59:26.135Z","etag":null,"topics":["automation","bot-detection","bots","headless-chrome","playwright","puppeteer","selenium"],"latest_commit_sha":null,"homepage":"https://fingerprintjs.github.io/BotD/main/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fingerprintjs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"contributing.md","funding":null,"license":"LICENSE","code_of_conduct":"code_of_conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-03-10T16:41:46.000Z","updated_at":"2025-05-07T06:26:57.000Z","dependencies_parsed_at":"2023-10-02T11:42:23.098Z","dependency_job_id":"c53eb954-0e79-4315-81af-49d9bfd50228","html_url":"https://github.com/fingerprintjs/BotD","commit_stats":{"total_commits":538,"total_committers":20,"mean_commits":26.9,"dds":0.5892193308550187,"last_synced_commit":"c5404ec5c89eb19cbe08d7428df0177fdab7909e"},"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fingerprintjs%2FBotD","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fingerprintjs%2FBotD/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fingerprintjs%2FBotD/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fingerprintjs%2FBotD/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fingerprintjs","download_url":"https://codeload.github.com/fingerprintjs/BotD/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254036823,"owners_count":22003654,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","bot-detection","bots","headless-chrome","playwright","puppeteer","selenium"],"created_at":"2024-09-24T13:35:09.419Z","updated_at":"2025-05-13T22:07:08.538Z","avatar_url":"https://github.com/fingerprintjs.png","language":"TypeScript","readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://fingerprint.com\"\u003e\n    \u003cpicture\u003e\n      \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/fingerprintjs/botd/dev/resources/logo_light.svg\" /\u003e\n      \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/fingerprintjs/botd/dev/resources/logo_dark.svg\" /\u003e\n      \u003cimg src=\"https://raw.githubusercontent.com/fingerprintjs/botd/dev/resources/logo_dark.svg\" alt=\"FingerprintJS logo\" width=\"312px\" /\u003e\n    \u003c/picture\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@fingerprintjs/botd\"\u003e\n    \u003cimg src=\"https://img.shields.io/npm/v/@fingerprintjs/botd.svg\" alt=\"Current NPM version\"\u003e\n  \u003c/a\u003e\n   \u003ca href=\"https://opensource.org/licenses/MIT\"\u003e\n    \u003cimg src=\"https://img.shields.io/:license-mit-blue.svg?style=flat\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://discord.gg/39EpE2neBg\"\u003e\n    \u003cimg src=\"https://img.shields.io/discord/852099967190433792?style=logo\u0026label=Discord\u0026logo=Discord\u0026logoColor=white\" alt=\"Discord server\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/fingerprintjs/BotD/blob/main/docs/api.md\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/-Documentation-green\" alt=\"BotD documentation\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n## BotD\n\nBotD is an open source library that we created to make it easy for  every developer to detect basic bots in their web apps. \n\nIt is available under a permissive MIT license and will always be free for developers and commercial use.\n\nFor more demanding applications we created a professional API-based bot detection software that is called [Fingerprint Pro Bot Detection](https://fingerprint.com/products/bot-detection/).\n\n[⚡ View Our Demo](https://fingerprintjs.github.io/BotD).\n\n## Quick start\n\n### CDN\n\n```html\n\u003cscript\u003e\n    // Initialize an agent at application startup, once per page/app.\n    const botdPromise = import('https://openfpcdn.io/botd/v1').then((Botd) =\u003e Botd.load())\n    // Get detection results when you need them.\n    botdPromise\n        .then((botd) =\u003e botd.detect())\n        .then((result) =\u003e console.log(result))\n        .catch((error) =\u003e console.error(error))\n\u003c/script\u003e\n```\n\n[Run this code](https://stackblitz.com/edit/botd-cdn-tkdie9?devtoolsheight=100\u0026file=index.html)\n\n### NPM\n\n```bash\nnpm i @fingerprintjs/botd\n# or\nyarn add @fingerprintjs/botd\n```\n\n```js\nimport { load } from '@fingerprintjs/botd'\n\n// Initialize an agent at application startup, once per page/app.\nconst botdPromise = load()\n// Get detection results when you need them.\nbotdPromise\n    .then((botd) =\u003e botd.detect())\n    .then((result) =\u003e console.log(result))\n    .catch((error) =\u003e console.error(error))\n```\n\n[Run this code](https://stackblitz.com/edit/botd-cdn-jwtcvu?devtoolsheight=100\u0026file=index.js)\n\n📕 [Full documentation](docs/api.md)\n\n## 🤖 Upgrade to Fingerprint Pro Bot Detection to detect sophisticated bots with confidence.\n\n[Fingerprint Pro Bot Detection](https://fingerprint.com/products/bot-detection/) is a professional bot detection service that processes all information server-side and transmits it securely to your servers using server-to-server APIs.\n\nFingerprint Pro Bot Detection provides both browser and server-side APIs that make the process of bot detection fast and secure. When using the Pro Bot Detection, use the browser JavaScript SDK to obtain the requestID value and then verify this value using our server API.\n\nThe Pro product combines vast amounts of auxiliary data that bots leak (cursor movements, network overrides, browser changes and more) to be able to reliably deduplicate real users from automated software, resulting in the detection of popular automation tools, their derivatives and plugins.\n\nA big advantage of the Pro detection is that it's able to distinguish good bots from bad ones that allow you to block malicious traffic without blocking search engine crawlers, monitoring workers, etc.\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://fingerprint.com/products/bot-detection/\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/fingerprintjs/botd/dev/resources/pro_botd_screenshot.png\" alt=\"Pro BotD screenshot\" width=\"700px\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\nFull product comparison:\n\n\u003ctable\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth align=\"center\"\u003eOpen Source\u003c/th\u003e\n      \u003cth align=\"center\"\u003ePro\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\u003ctd colspan=\"3\"\u003e\u003ch4\u003eCore Features\u003c/h4\u003e\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e100% open source\u003c/td\u003e\u003ctd align=\"center\"\u003eyes\u003c/td\u003e\u003ctd align=\"center\"\u003eno\u003csup\u003e1\u003c/sup\u003e\u003c/td\u003e\u003c/tr\u003e\n    \u003c!-- \u003ctr\u003e\u003ctd\u003eAccuracy\u003c/td\u003e\u003ctd align=\"center\"\u003eup to 60%\u003c/td\u003e\u003ctd align=\"center\"\u003e\u003cb\u003e99.5%\u003c/b\u003e\u003c/td\u003e\u003c/tr\u003e --\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003cb\u003eSearch engine detection\u003c/b\u003e\u003cbr/\u003e\u003ci\u003eworks in all modern browsers - see our full list of \u003ca href=\"https://dev.fingerprint.com/docs/browser-support/\" target=\"_blank\"\u003ebrowsers supported\u003c/a\u003e\u003c/i\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e–\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eAutomation web services detection\u003c/td\u003e\u003ctd align=\"center\"\u003e–\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eAutomation browser extensions detection\u003c/td\u003e\u003ctd align=\"center\"\u003e–\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd colspan=\"3\"\u003e\u003ch4\u003eDetectable automation tools \u0026 frameworks\u003c/h4\u003e\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eHeadless Browsers (\u003ca href=\"https://www.google.com/chrome\"\u003eChrome\u003c/a\u003e, \u003ca href=\"https://www.mozilla.org/en-US/firefox/new/\"\u003eFirefox\u003c/a\u003e)\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003cb\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium\"\u003eseleniumHQ/selenium\u003c/a\u003e\u003c/b\u003e\u003cbr/\u003e\u003ci\u003eumbrella project encapsulating a variety of tools and libraries enabling web browser automation\u003c/i\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003cb\u003e\u003ca href=\"https://github.com/microsoft/playwright\"\u003emicrosoft/playwright\u003c/a\u003e\u003c/b\u003e\u003cbr/\u003e\u003ci\u003eNode.js library to automate Chromium, Firefox and WebKit with a single API\u003c/i\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003cb\u003e\u003ca href=\"https://github.com/ariya/phantomjs\"\u003eariya/phantomjs\u003c/a\u003e\u003c/b\u003e\u003cbr/\u003e\u003ci\u003eheadless WebKit scriptable with JavaScript\u003c/i\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003cb\u003e\u003ca href=\"https://github.com/segmentio/nightmare\"\u003esegmentio/nightmare\u003c/a\u003e\u003c/b\u003e\u003cbr/\u003e\u003ci\u003ehigh-level browser automation library\u003c/i\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003cb\u003e\u003ca href=\"https://github.com/electron/electron\"\u003eelectron/electron\u003c/a\u003e\u003c/b\u003e\u003cbr/\u003e\u003ci\u003eframework lets you write cross-platform desktop applications using JavaScript, HTML and CSS\u003c/i\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003cb\u003e\u003ca href=\"https://github.com/laurentj/slimerjs\"\u003elaurentj/slimerjs\u003c/a\u003e\u003c/b\u003e\u003cbr/\u003e\u003ci\u003escriptable browser\u003c/i\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003c/tr\u003e\n    \u003c!-- --\u003e\n    \u003ctr\u003e\u003ctd colspan=\"3\"\u003e\u003ch4\u003eDetectable stealth plugins\u003c/h4\u003e\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003cb\u003e\u003ca href=\"https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth\"\u003eberstend/puppeteer-extra/packages/puppeteer-extra-plugin-stealth\u003c/a\u003e\u003c/b\u003e\u003cbr/\u003e\u003ci\u003eplugin for puppeteer-extra to prevent detection.\u003c/i\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e-\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003cb\u003e\u003ca href=\"https://github.com/microlinkhq/browserless\"\u003emicrolinkhq/browserless\u003c/a\u003e\u003c/b\u003e\u003cbr/\u003e\u003ci\u003eefficient driver for controlling headless browsers built on top of \u003ca href=\"https://github.com/puppeteer/puppeteer\"\u003epuppeteer\u003c/a\u003e developed for scenarios where performance matters\u003c/i\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e-\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003cb\u003e\u003ca href=\"https://github.com/ultrafunkamsterdam/undetected-chromedriver\"\u003eultrafunkamsterdam/undetected-chromedriver\u003c/a\u003e\u003c/b\u003e\u003cbr/\u003e\u003ci\u003eoptimized Selenium Chromedriver patch which does not trigger anti-bot services\u003c/i\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e-\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003cb\u003e\u003ca href=\"https://github.com/MeiK2333/pyppeteer_stealth\"\u003eMeiK2333/pyppeteer_stealth\u003c/a\u003e\u003c/b\u003e\u003cbr/\u003e\u003ci\u003estealth plugin for \u003ca href=\"https://github.com/miyakogi/pyppeteer\"\u003epyppeteer\u003c/a\u003e\u003c/i\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e-\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003c/tr\u003e\n    \u003c!-- \u003ctr\u003e\u003ctd\u003e\u003ca href=\"______\"\u003e______\u003c/a\u003e\u003cbr/\u003e\u003ci\u003e____________\u003c/i\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003c/tr\u003e --\u003e\n    \u003c!-- --\u003e\n    \u003ctr\u003e\u003ctd colspan=\"3\"\u003e\u003ch4\u003eAdditional Features\u003c/h4\u003e\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003cb\u003eServer-side accuracy increase\u003c/b\u003e\u003cbr/\u003e\u003ci\u003ebased on additional server-side data, such as TLS crypto support, ipv4/v6 data and others\u003c/i\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e–\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003cb\u003eQuery API\u003c/b\u003e\u003cbr/\u003e\u003ci\u003ebuild flexible workflows\u003c/i\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e–\u003c/td\u003e\u003ctd align=\"center\"\u003e✓\u003c/td\u003e\u003c/tr\u003e\n    \u003c!-- --\u003e\n    \u003ctr\u003e\u003ctd colspan=\"3\"\u003e\u003ch4\u003eOperations\u003c/h4\u003e\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003cb\u003eData security\u003c/b\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003eYour infrastructure\u003c/td\u003e\u003ctd align=\"center\"\u003eEncrypted at rest\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003cb\u003eStorage\u003c/b\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003eYour infrastructure\u003c/td\u003e\u003ctd align=\"center\"\u003eUnlimited up to 1 yr\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003cb\u003eRegions\u003c/b\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003eYour infrastructure\u003c/td\u003e\u003ctd align=\"center\"\u003eHosting in US, EU and Mumbai\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003cb\u003eCompliance\u003c/b\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003eYour infrastructure\u003c/td\u003e\u003ctd align=\"center\"\u003eGDPR, CCPA compliant\u003csup\u003e2\u003c/sup\u003e\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003cb\u003eSLA\u003c/b\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003eNo SLA\u003c/td\u003e\u003ctd align=\"center\"\u003e99.9% Uptime\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003cb\u003eSupport\u003c/b\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003eGitHub community\u003c/td\u003e\u003ctd align=\"center\"\u003eSupport team via email, chat, and call-back within 1 business day\u003c/td\u003e\u003c/tr\u003e\n   \n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003csub\u003e1. Pro uses the open source BotD library as well as proprietary technology for increased accuracy and result stability.\u003c/sub\u003e\n\n\u003csub\u003e2. Fingerprint Pro is GDPR and CCPA compliant as the data processor. You still need to be compliant as the data controller and use the bot detection for fraud prevention under legitimate interest or ask for user consent.\u003c/sub\u003e\n\nPro result example:\n\n```js\n{\n    \"bot\": {\n        \"result\": \"bad\"\n        \"type\": \"selenium\"\n    }\n}\n```\n\n🍿 [Live demo](https://fingerprint.com/products/bot-detection/)\n\n📕 [Fingerprint Pro documentation](https://dev.fingerprint.com)\n\n## Migrating from \u003ccode\u003ev0\u003c/code\u003e\n\n-   [Migration guide](docs/migrating_v0_v1.md)\n-   [V0 documentation](https://github.com/fingerprintjs/BotD/tree/v0)\n\n## Supported browsers\n\nThe library supports all popular browsers.\nSee more details and learn how to run the library in old browsers in the [browser support guide](docs/browser_support.md).\n\n## Where to get support\n\nThanks to our [series B funding](https://fingerprint.com/blog/series-b/), we are happy to provide technical support for our open-source BotD library. We recommend using GitHub [Issues](https://github.com/fingerprintjs/BotD/issues) to submit bugs or [Discussions](https://github.com/fingerprintjs/BotD/discussions) to ask questions.\nUsing issues and discussions publicly will help the open-source community and other users with similar issues.\nHowever, if you require private support, please email us at [oss-support@fingerprint.com](mailto:oss-support@fingerprint.com).\n\n## Contributing\n\nSee the [Contribution guidelines](contributing.md) to learn how to contribute to the project or run the project locally.\nPlease read it carefully before making a pull request.\n\n## Other products by Fingerprint on GitHub!\n\n-   [FingerprintJS -- browser fingerprinting library that queries browser attributes and computes a hashed visitor identifier from them](https://github.com/fingerprintjs/fingerprintjs)\n-   [Fingerprint Android -- Android identification and fingerprinting in native apps](https://github.com/fingerprintjs/fingerprintjs-android)\n\n### License\n\n[MIT](LICENSE)\n\n\u003cp align=\"center\"\u003e\n© 2023 FingerprintJS, Inc\n\u003c/p\u003e\n","funding_links":[],"categories":["Index"],"sub_categories":["Security"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffingerprintjs%2Fbotd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffingerprintjs%2Fbotd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffingerprintjs%2Fbotd/lists"}