Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

370 Commits

Repository files navigation

CrawlerScope

CrawlerScope banner

CIGitHub PagesLicenseDatasetPrefixesVersion

CrawlerScope collects operator-published crawler, fetcher, monitoring, scanner, and preview-bot network ranges, normalizes them into deployable CIDR data, and publishes a static dashboard plus machine-readable artifacts for infrastructure and security teams.

Live dashboard:ipanalytics.github.io/CrawlerScope
Current dataset:data/current/crawlers.json


Overview

CrawlerScope is a small, auditable data pipeline for bot network intelligence. It tracks published source health, separates authoritative IP feeds from documented user-agent-only identities, and emits artifacts suitable for WAF rules, reverse proxies, allowlists, deny controls, analytics enrichment, and incident triage.

The project intentionally keeps source definitions in data, not code. Collector behavior lives in scripts/update.py; operator sources live in config/sources.json.

Current Dataset

Generated at 2026-05-26T12:01:22Z.

MetricCount
Services43
Healthy sources43
Authoritative IP lists32
CIDR prefixes7,180
IPv4 prefixes6,705
IPv6 prefixes475
AI crawler/fetcher prefixes1,653
CategoryServices
AI crawlers13
Search crawlers9
Monitoring probes5
Social previews4
Fetchers3
SEO crawlers3
Ad verification2
Security scanners2
Archive1
Analytics crawlers1
Tracked services
ServiceCategorySource typePrefixes
Google common crawlerssearchofficial_json69
Google special crawlerssearchofficial_json46
Google user-triggered fetchersfetcherofficial_json223
Bingbotsearchofficial_json28
DuckDuckBotsearchofficial_json334
DuckAssistBotaiofficial_json334
Applebotsearchofficial_json12
MojeekBotsearchofficial_json1
Naver Yetisearchofficial_json36
YandexBotsearchknown_static13
Baiduspidersearchknown_static2
GPTBotaiofficial_json17
OAI-SearchBotaiofficial_json32
ChatGPT-Useraiofficial_json214
OAI-AdsBotaidocumented_user_agent0
PerplexityBotaiofficial_json8
Perplexity-Useraiofficial_json4
ClaudeBot / Claude-SearchBotaidocumented_user_agent0
Amazonbotaiofficial_embedded_json524
Amzn-SearchBotaiofficial_embedded_json512
Amzn-Userfetcherofficial_embedded_json1,023
Meta-ExternalAgent / Meta-WebIndexeraiknown_static4
Bytespideraidocumented_user_agent0
MistralAI-Useraiofficial_json4
AhrefsBotseoofficial_json51
Lumar crawlerseoofficial_json66
SemrushBotseodocumented_user_agent0
Censys scannerssecurity-scannerknown_static2
Shodan scannerssecurity-scannerknown_static9
Datadog Syntheticsmonitoringofficial_json113
IAS crawlerad-verificationofficial_json14
TTD-Content crawlerad-verificationofficial_text2,615
UptimeRobotmonitoringofficial_text217
Pingdom probesmonitoringofficial_text158
StatusCake probesmonitoringofficial_json296
Better Stack probesmonitoringofficial_text34
Common Crawl CCBotarchiveofficial_json6
Flipboard crawlersocialofficial_text136
Parse.ly crawleranalyticsofficial_json10
Pinterestbotsocialdocumented_user_agent0
LinkedInBotsocialdocumented_user_agent0
Telegram link previewsocialofficial_text11
RSS API feed parserfetcherofficial_text2

Architecture

CrawlerScope runs as a scheduled GitHub Actions collector and publishes static artifacts.

flowchart LR
A["config/sources.json"] --> B["scripts/update.py"]
B --> C["Fetch operator sources"]
C --> D["Normalize and collapse CIDR prefixes"]
D --> E["data/current/crawlers.json"]
D --> F["data/current/robots-ai.txt"]
D --> G["data/current/nginx-ai-map.conf"]
D --> H["data/snapshots/*.json"]
E --> I["Static dashboard"]
H --> J["GitHub Release artifacts"]
Loading

Source types:

TypeMeaning
official_jsonOperator-published machine-readable JSON feed
official_textOperator-published plain-text CIDR/IP feed
official_embedded_jsonOperator page with machine-readable ranges embedded in HTML
documented_user_agentDocumented bot identity without a stable public IP list
known_staticUseful static seed list, not treated as complete authority

Features

  • Operator-published source collection with source health tracking.
  • IPv4/IPv6 normalization, CIDR coercion, and prefix collapsing.
  • Static dashboard with category, operator, source, service, and search filters.
  • Filtered exports for JSON, CSV, CIDR lists, robots.txt, and Nginx user-agent maps.
  • Snapshot retention and historical summary tracking.
  • GitHub Pages publication and automatic dataset releases.
  • Config-driven source inventory in config/sources.json.

Quick Start

Run the collector and serve the dashboard locally:

python3 scripts/update.py
python3 -m http.server 8080

Open:

http://127.0.0.1:8080/public/

When serving from public/, the app reads data from ../data/current. For GitHub Pages deployment, the workflow copies public/ and data/ into the Pages artifact.

Installation

CrawlerScope has no runtime dependency outside the Python standard library for data collection.

git clone https://github.com/ipanalytics/CrawlerScope.git
cd CrawlerScope
python3 scripts/update.py

Optional environment controls:

export CRAWLER_SCOPE_USER_AGENT="CrawlerScope/0.1 (+https://example.org/contact)"export CRAWLER_SCOPE_SNAPSHOT_RETENTION=168
export CRAWLER_SCOPE_HISTORY_RETENTION=720
python3 scripts/update.py

Usage Examples

Export all current CIDRs:

jq -r '.services[].prefixes | .ipv4[], .ipv6[]' data/current/crawlers.json

Export AI crawler CIDRs:

jq -r '.services[] | select(.category == "ai") | .prefixes | .ipv4[], .ipv6[]' data/current/crawlers.json

List sources that are documented but do not publish IP ranges:

jq -r '.services[] | select(.sourceType == "documented_user_agent") | [.id, .service, .sourceUrl] | @tsv' data/current/crawlers.json

Generate an Nginx include from the current dataset:

cp data/current/nginx-ai-map.conf /etc/nginx/conf.d/crawler-scope-ai-map.conf
nginx -t

Outputs

PathDescription
data/current/crawlers.jsonFull normalized dataset
data/current/robots-ai.txtGenerated AI crawler robots.txt block
data/current/nginx-ai-map.confNginx map for AI crawler user-agents
data/history/summary.csvHistorical summary rows
data/snapshots/*.jsonTimestamped dataset snapshots
config/sources.jsonSource inventory and classification config

Data Format

Each service record includes source metadata, user-agent patterns, reverse-DNS hints, health status, prefix counts, and split IPv4/IPv6 arrays.

{
"id": "openai-gptbot",
"service": "GPTBot",
"operator": "OpenAI",
"category": "ai",
"sourceType": "official_json",
"sourceOk": true,
"ipListAuthoritative": true,
"userAgentPatterns": ["GPTBot"],
"counts": {
"prefixes": 17,
"ipv4": 17,
"ipv6": 0
},
"prefixes": {
"ipv4": ["20.42.10.176/28"],
"ipv6": []
}
}

Operational Notes

  • Treat sourceOk=false as a collection failure for that run. The collector falls back to the previous cached prefixes when available.
  • IP ranges identify published infrastructure, not intent. Use user-agent, reverse DNS, request behavior, and application context where enforcement risk matters.
  • Static and documented-only sources are included because they are operationally useful, but authoritative flags remain separate.
  • Release artifacts are generated by GitHub Actions after collection and attached to timestamped dataset releases.

Project Scope

CrawlerScope tracks public crawler, fetcher, monitoring, scanner, analytics, and preview-bot infrastructure that is useful for request classification and network policy. It prioritizes primary operator-published sources. Aggregator repositories may be reviewed for discovery, but their URLs are not used as dataset sources.

Use Cases

  • WAF allow/deny policy design for crawler traffic.
  • Search and AI crawler visibility audits.
  • Security logging enrichment and bot attribution.
  • Monitoring probe allowlisting.
  • Fraud/risk triage for automated traffic.
  • Change tracking for published crawler infrastructure.

Limitations

  • Some operators publish user-agent documentation but no stable IP feed.
  • Cloud-hosted crawlers may share network space with unrelated workloads.
  • CIDR lists can change without notice; scheduled collection reduces but does not remove that latency.

Directory Structure

.
├── config/
│ └── sources.json
├── data/
│ ├── current/
│ ├── history/
│ └── snapshots/
├── public/
│ ├── assets/
│ └── index.html
├── scripts/
│ └── update.py
└── .github/
└── workflows/

Deployment

The included workflow runs every six hours and can be triggered manually:

on:
schedule:
- cron: "23 */6 * * *"workflow_dispatch:

The workflow:

  1. Runs scripts/update.py.
  2. Commits updated data/ and config/ changes.
  3. Publishes a timestamped GitHub Release with dataset artifacts.
  4. Deploys the static dashboard to GitHub Pages.

License

CrawlerScope is released under the MIT License.

Disclaimer

CrawlerScope publishes normalized data from public operator sources. Review upstream terms and validate enforcement logic before using the dataset in production controls.

Releases

Packages

Contributors

Languages