Syntactic patterns of HTTP user-agents used by bots / robots / crawlers / scrapers / spiders. pull-request welcome ⭐
Go
1,408
469 commits
updated Sep 29, 2026
This repository contains a list of of HTTP user-agents used by robots, crawlers, and spiders as in single JSON file.
Each pattern is a regular expression. It should work out-of-the-box wih your favorite regex library.
💼 Using crawler-user-agents in a commercial product? This package is free to use, but it takes real time to maintain and expand. If it's providing value (and it probably is), please consider sponsoring at the commercial tier.
It keeps the project alive and actively maintained. Your company can afford it. 🙏
Download the crawler-user-agents.json file from this repository directly.
crawler-user-agents is deployed on npmjs.com: https://www.npmjs.com/package/crawler-user-agents
To use it using npm or yarn:
npm install --save crawler-user-agents
# OR
yarn add crawler-user-agents
In Node.js, you can require the package to get an array of crawler user agents.
const crawlers = require('crawler-user-agents');
console.log(crawlers);
Install with pip install crawler-user-agents
Then:
import crawleruseragents
if crawleruseragents.is_crawler("Googlebot/"):
# do something
or:
import crawleruseragents
indices = crawleruseragents.matching_crawlers("bingbot/2.0")
print("crawlers' indices:", indices)
print(
"crawler's URL:",
crawleruseragents.CRAWLER_USER_AGENTS_DATA[indices[0]]["url"]
)
Note that matching_crawlers is much slower than is_crawler, if the given User-Agent does indeed match any crawlers.
Go: use this package,
it provides global variable Crawlers (it is synchronized with crawler-user-agents.json),
functions IsCrawler and MatchingCrawlers.
Example of Go program:
package main
import (
"fmt"
"github.com/monperrus/crawler-user-agents"
)
func main() {
userAgent := "Mozilla/5.0 (compatible; Discordbot/2.0; +https://discordapp.com)"
isCrawler := agents.IsCrawler(userAgent)
fmt.Println("isCrawler:", isCrawler)
indices := agents.MatchingCrawlers(userAgent)
fmt.Println("crawlers' indices:", indices)
fmt.Println("crawler's URL:", agents.Crawlers[indices[0]].URL)
}
Output:
isCrawler: true
crawlers' indices: [237]
crawler' URL: https://discordapp.com
I do welcome additions contributed as pull requests.
The pull requests should:
Example:
{
"pattern": "rogerbot",
"addition_date": "2014/02/28",
"url": "http://moz.com/help/pro/what-is-rogerbot-",
"instances" : ["rogerbot/2.3 example UA"],
"tags": ["seo"]
}
The list is under a MIT License. The versions prior to Nov 7, 2016 were under a CC-SA license.
There are a few wrapper libraries that use this data to detect bots:
Other systems for spotting robots, crawlers, and spiders that you may want to consider are:
Overall
Maintained
Code review
Latest release
Releases this year
857 followers · starred Aug 2026
2,764 followers · starred Aug 2025
415 followers · starred Nov 2023
64 followers · starred Sep 2018
Syntactic patterns of HTTP user-agents used by bots / robots / crawlers / scrapers / spiders. pull-request welcome ⭐
Go
1,408
469 commits
updated Sep 29, 2026
This repository contains a list of of HTTP user-agents used by robots, crawlers, and spiders as in single JSON file.
Each pattern is a regular expression. It should work out-of-the-box wih your favorite regex library.
💼 Using crawler-user-agents in a commercial product? This package is free to use, but it takes real time to maintain and expand. If it's providing value (and it probably is), please consider sponsoring at the commercial tier.
It keeps the project alive and actively maintained. Your company can afford it. 🙏
Download the crawler-user-agents.json file from this repository directly.
crawler-user-agents is deployed on npmjs.com: https://www.npmjs.com/package/crawler-user-agents
To use it using npm or yarn:
npm install --save crawler-user-agents
# OR
yarn add crawler-user-agents
In Node.js, you can require the package to get an array of crawler user agents.
const crawlers = require('crawler-user-agents');
console.log(crawlers);
Install with pip install crawler-user-agents
Then:
import crawleruseragents
if crawleruseragents.is_crawler("Googlebot/"):
# do something
or:
import crawleruseragents
indices = crawleruseragents.matching_crawlers("bingbot/2.0")
print("crawlers' indices:", indices)
print(
"crawler's URL:",
crawleruseragents.CRAWLER_USER_AGENTS_DATA[indices[0]]["url"]
)
Note that matching_crawlers is much slower than is_crawler, if the given User-Agent does indeed match any crawlers.
Go: use this package,
it provides global variable Crawlers (it is synchronized with crawler-user-agents.json),
functions IsCrawler and MatchingCrawlers.
Example of Go program:
package main
import (
"fmt"
"github.com/monperrus/crawler-user-agents"
)
func main() {
userAgent := "Mozilla/5.0 (compatible; Discordbot/2.0; +https://discordapp.com)"
isCrawler := agents.IsCrawler(userAgent)
fmt.Println("isCrawler:", isCrawler)
indices := agents.MatchingCrawlers(userAgent)
fmt.Println("crawlers' indices:", indices)
fmt.Println("crawler's URL:", agents.Crawlers[indices[0]].URL)
}
Output:
isCrawler: true
crawlers' indices: [237]
crawler' URL: https://discordapp.com
I do welcome additions contributed as pull requests.
The pull requests should:
Example:
{
"pattern": "rogerbot",
"addition_date": "2014/02/28",
"url": "http://moz.com/help/pro/what-is-rogerbot-",
"instances" : ["rogerbot/2.3 example UA"],
"tags": ["seo"]
}
The list is under a MIT License. The versions prior to Nov 7, 2016 were under a CC-SA license.
There are a few wrapper libraries that use this data to detect bots:
Other systems for spotting robots, crawlers, and spiders that you may want to consider are:
Overall
Maintained
Code review
Latest release
Releases this year
857 followers · starred Aug 2026
2,764 followers · starred Aug 2025
415 followers · starred Nov 2023
64 followers · starred Sep 2018