Top AI Repos โ open-source AI, indexed and scored
Top AI Repos tracks AI repositories on GitHub and answers two different questions about each one: is it moving right now, and would you bet a product on it.
Top AI Repos tracks AI repositories on GitHub and answers two different questions about each one: is it moving right now, and would you bet a product on it.
๐ท CrawlerDetect is a PHP class for detecting bots/crawlers/spiders via the user agent
| Date | Stars |
|---|---|
| 2026-07-31 | 2373 |
| 2026-08-06 | 2373 |
Today
โ stars today
This week
โ stars this week
This month
โ stars this month
Momentum
35.0
growth rate 0.00%/day
<p align="center">
<a href="https://crawlerdetect.io/" target="_blank">
<img src="https://crawlerdetect.io/og-image.png" width="100%" alt="CrawlerDetect" />
</a>
</p>
<p align="center">
<a href="https://crawlerdetect.io/" target="_blank"><strong>crawlerdetect.io</strong></a>
</p>
<p align="center">
<a href="https://github.com/JayBizzle/Crawler-Detect/actions"><img alt="Build Status" src="https://img.shields.io/github/actions/workflow/status/JayBizzle/Crawler-Detect/test.yml?branch=master&style=flat-square"></a>
<a href="https://packagist.org/packages/jaybizzle/crawler-detect"><img alt="Downloads" src="https://img.shields.io/packagist/dm/JayBizzle/Crawler-Detect.svg?style=flat-square" /></a>
<a href="https://packagist.org/packages/jaybizzle/crawler-detect"><img alt="Latest Version" src="https://img.shields.io/packagist/v/jaybizzle/Crawler-Detect.svg?style=flat-square" /></a>
<a href="https://coveralls.io/github/JayBizzle/Crawler-Detect"><img alt="Coverage" src="https://img.shields.io/coveralls/JayBizzle/Crawler-Detect/master.svg?style=flat-square" /></a>
<a href="https://github.com/JayBizzle/Crawler-Detect/blob/master/LICENSE"><img alt="License" src="https://img.shields.io/badge/license-MIT-ff69b4.svg?style=flat-square" /></a>
</p>
## About
**CrawlerDetect** is a PHP library for detecting bots, crawlers and spiders via the `User-Agent` and `HTTP_FROM` headers. It currently recognises thousands of user agents and is updated regularly.
## Installation
```bash
composer require jaybizzle/crawler-detect
```
## Usage
```php
use Jaybizzle\CrawlerDetect\CrawlerDetect;
$CrawlerDetect = new CrawlerDetect;
// Check the user agent of the current visitor
if ($CrawlerDetect->isCrawler()) {
// true if a crawler user agent was detected
}
// Pass a user agent as a string
if ($CrawlerDetect->isCrawler('Mozilla/5.0 (compatible; Sosospider/2.0; +http://help.soso.com/webspider.htm)')) {
// true if a crawler user agent was detected
}
// Output the name of the bot that matched (if any)
echo $CrawlerDetect->getMatches();
```
### Passing headers from a request object
With no arguments, CrawlerDetect reads `$_SERVER`. If your headers come from somewhere else โ a PSR-7 request, Symfony's `HeaderBag`, Swoole, or a Lambda event โ pass them in directly. Both real header names (`User-Agent`) and PHP's SAPI names (`HTTP_USER_AGENT`) are understood, and values may be strings or arrays of strings.
```php
// PSR-7 (Slim, Mezzio, Laminas, League)
$CrawlerDetect = new CrawlerDetect($request->getHeaders());
// Symfony HttpFoundation
$CrawlerDetect = new CrawlerDetect($request->headers->all());
// Swoole
$CrawlerDetect = new CrawlerDetect($request->header);
if ($CrawlerDetect->isCrawler()) {
// ...
}
```
Prefer this over `isCrawler($request->getHeaderLine('User-Agent'))`. Some crawlers โ Googlebot in particular โ send a genuine browser `User-Agent` and identify themselves in another header such as `From` or `Sec-CH-UA`. Passing the full set lets CrawlerDetect check all of them; passing a single string can only ever check one.
## Contributing
If you find a bot, spider or crawler that CrawlerDetect fails to detect, please open a pull request that:
- adds the regex pattern to the `$data` array in `src/Fixtures/Crawlers.php`
- adds the failing user agent string to `tests/data/user_agent/crawlers.txt`
The `raw/Crawlers.json` and `raw/Crawlers.txt` files are regenerated automatically by `export.php` after merge โ no need to touch them.
If you're not able to submit a PR, open an issue with the user agent string and we'll take it from there.
## Ports & Integrations
CrawlerDetect has been ported to a number of other languages and frameworks. If you maintain a port not listed here, please open a PR.
| Platform | Project |
| --- | --- |
| Laravel | [Laravel-Crawler-Detect](https://github.com/JayBizzle/Laravel-Crawler-Detect) |
| Symfony 2 / 3 / 4 | [CrawlerDetectBundle](https://github.com/nicolasmure/CrawlerDetectBundlExcerpt of 4,744 characters
Read on GitHubWould you bet a product on this? Bounded 0โ100 and slow moving.
matched fp:fc3100b9aacb7c1d, topic:crawler