Skip to main content

BotScope

BotScope

Python-first observability for an Internet-wide census of automated traffic.

BotScope is an Internet-wide bot traffic census: the Global Observatory federates public crawler/IP panels, crawl catalogs, and optional CDN estimates into a worldwide automation picture — alongside a local analyzer and native Qt desktop Observatory for authorized logs, sessions, and live capture.

CI PyPI PyPI - Python Version Python 3.10+ License Platform Qt / PySide6 Code style: Ruff Tests Status

Install from PyPI: pip install botscope · GUI: pip install "botscope[gui]"

Network contribution is OFF by default. BotScope does not perform unauthorized scanning. Zero-config for your own logs: no account, no cloud profile, and no API key required to classify local traffic.


Screenshots

Observatory dashboard with DEMO DATA banner, KPIs, composition ring, and Traffic Pulse

Observatory — KPI cards, composition ring, Traffic Pulse, and category breakdown on the bundled synthetic demo corpus (DEMO DATA banner visible).

Global Observatory Internet-wide census
Global — Internet-wide census from zero-auth public sources; Cloudflare Radar optional
Events table with query filter
Events — virtualized table, query language, Classification Inspector
Bot Library known vs observed
Bot Library — known signatures vs observed-in-dataset markers
Sources registry table
Sources — registry status for public feeds and optional providers

Settings preferences panel

Settings — local theme, privacy, and optional Cloudflare Radar token for CDN estimates (field shown empty; no account required).


Video demo

Animated tour of the main Observatory pages (demo data):

BotScope GUI tour animated GIF

Screenshot strip · Recording script / MP4 placeholder

To capture a short screen recording yourself (launch → Demo → KPIs → Global → Events), follow the steps in docs/assets/demo/README.md and drop botscope-demo.mp4 (or .webm) beside the GIF.


What BotScope is

BotScope is an Internet-wide census of automated traffic, with a local measurement workstation for traffic you are authorized to analyze:

  • Build a worldwide automation census in Global Observatory from federated zero-auth public sources (crawler IP ranges, Common Crawl catalog, and similar) plus optional Cloudflare Radar CDN estimates
  • Classify requests from combined/common access logs (and optional PCAP / live paths)
  • Separate OBSERVED totals from CLASSIFIED shares, with provenance badges
  • Keep an honest UNKNOWN outcome instead of forcing certainty
  • Explore both global census views and local sessions in a native desktop Observatory (Qt / PySide6 — not a website)

What BotScope is not

  • Not limited to a single site or sensor — Global Observatory is the Internet-wide census surface
  • Not a claim that one local log alone equals the whole Internet (local shares stay labeled local; the census comes from federated global sources)
  • Not a cloud SaaS — analysis and preferences stay on your machine by default
  • Not a substitute for authorization: only analyze systems and traffic you own or have permission to measure

The product’s primary global story is the Internet-wide census. Local Observatory KPIs remain dataset-scoped so you can compare your sensors against that census without conflating the two.


Features

Area What you get
Observatory KPIs Automated / human-likely / unknown shares, request & byte totals, quality hint, observation window
Composition ring Visual breakdown of classified traffic with actor callouts
Traffic Pulse Short trend readout for the loaded dataset view
Global Observatory Internet-wide automation census from zero-auth public sources (e.g. Common Crawl, Google/Bing crawler ranges); optional Cloudflare Radar for CDN estimates
Bot Library Known signature packs vs bots actually observed in the current dataset
Dataset Health Multi-dimension quality scorecard for the loaded session
Events Virtualized event browser, quick search, shared safe query language
Compare Session-to-session deltas and classifier-vs-labels panels (no causal claims)
Provenance OBSERVED vs CLASSIFIED vs INFERRED — numbers keep their lineage
Exports Multi-format reports (Markdown, HTML, JSON, CSV) and research export helpers
Live capture Authorized log-tail and optional local-interface sniff; measured rates only
CLI + Python API Headless analyze / query / report / doctor alongside the GUI
Privacy transforms Optional IP hashing/truncation and query redaction on ingest

Full matrix: FEATURES.md. Machine-readable registry: botscope features.


Quickstart

Requires Python 3.10+. Install from PyPI:

pip install "botscope[gui]"

Core (CLI / library only):

pip install botscope

From source (contributors):

git clone https://github.com/theworker02/botscope.git
cd botscope
python -m venv .venv
# Windows: .venv\Scripts\activate
# macOS/Linux: source .venv/bin/activate
pip install -e ".[gui,dev]"

Environment check and synthetic demo:

botscope doctor
botscope demo --output demo_analysis.bscope
botscope open demo_analysis.bscope

Desktop Observatory:

botscope gui
# or simply: botscope

In the GUI: Demo loads the bundled synthetic corpus (shows a DEMO DATA banner). Open analyzes an authorized access log. Drag-and-drop of logs, PCAPs, or .bscope sessions is supported.

Analyze a log from the CLI:

botscope analyze path/to/access.log --output analysis.bscope
botscope report analysis.bscope --format markdown --output report.md

Python API:

from botscope import Analyzer

result = Analyzer().analyze("access.log")
print(result.automation_fraction)
print(result.stats.by_category)

More detail: docs/guides/QUICKSTART.md · docs/guides/INSTALLATION.md


CLI overview

botscope with no subcommand launches the Observatory. Use --no-gui to print help without opening a window.

Command Purpose
doctor Environment / policy diagnostics
demo Analyze bundled synthetic corpus (always labeled DEMO)
analyze Analyze an authorized log or PCAP
open Summarize an existing .bscope session
query Filter events with the shared query language
report / export Emit reports from a session
gui Launch the native desktop Observatory
compare / compare-classifiers Session and classifier comparisons
quality / provenance Scorecard and provenance summaries
live-tail / capture Authorized live log-tail / local sniff helpers
federation Collect Global Observatory public-source snapshot
citation Software citation helpers (no invented DOI)
features Capability registry
quickstart Print the fastest path to a first result

Run botscope --help or botscope <command> --help for options. Tutorials live under docs/tutorials/.


Architecture (summary)

Access log / PCAP / live sensor
        │
        ▼
   Ingest + privacy transforms
        │
        ▼
   Classify (rules, identity, optional ML)
        │
        ├──► .bscope session store (events, aggregates, workspace)
        ├──► CLI reports / export / research packs
        └──► Observatory GUI (KPIs, Events, Global census, Live, …)
                 │
                 └──► Global federation → Internet-wide census
                      (zero-auth public sources; Cloudflare Radar if you supply a token)
  • Internet-wide census: Global Observatory is the census product — federated public panels and optional CDN estimates.
  • Local-first: sessions and preferences stay on disk unless you explicitly enable network contribution.
  • Provenance-aware: OBSERVED counts are never relabeled as CLASSIFIED shares; local KPIs stay distinct from the global census.
  • Methodology notes: docs/research/METHODOLOGY.md · docs/research/GLOBAL_ESTIMATION.md.

Deeper maps: docs/architecture/REPOSITORY_MAP.md · diagrams in docs/architecture/diagrams/ · GUI guide docs/GUI.md


Documentation

Doc Description
docs/README.md Documentation index
docs/guides/QUICKSTART.md Fastest path to a first analysis
docs/guides/INSTALLATION.md Install, extras, verify
docs/GUI.md Observatory desktop application
docs/QUERY.md Safe query language (CLI + GUI + Python)
docs/CAPTURE.md Authorized capture notes
docs/PRIVACY.md Privacy transforms and boundaries
docs/GLOSSARY.md Terms (OBSERVED, CLASSIFIED, …)
docs/research/METHODOLOGY.md Measurement methodology
docs/research/LIMITATIONS.md What BotScope will not claim
docs/sources/SOURCE_RESEARCH.md Public source inventory
FEATURES.md Feature matrix vs repository reality
CHANGELOG.md Release notes
examples/ Runnable scripts

Asset inventory (logos, screenshots, demo): docs/assets/README.md


Optional extras

Extra Purpose
gui PySide6 + pyqtgraph desktop Observatory
capture scapy (authorized live interface sniff)
network httpx / cryptography for opt-in network client
ml numpy / scikit-learn classifier hooks
analytics duckdb / pyarrow
dev pytest, ruff, mypy
all everything above
pip install -e ".[gui,network,dev]"

Cloudflare Radar is optional. Leave Settings blank for normal local-log workflows; add your Radar Read token only if you want CDN bot/human estimates in Global Observatory. See docs/sources/CLOUDFLARE_RADAR.md.


Principles

  1. Treat Global Observatory as an Internet-wide census, built from federated sources with provenance
  2. Prefer UNKNOWN over forced certainty
  3. Separate OBSERVED counts from CLASSIFIED shares — and local KPIs from the global census
  4. Privacy transforms and local-first storage by default
  5. Network contribution remains OFF unless explicitly enabled

Contributing

Development setup, style (Ruff), and PR guidelines: CONTRIBUTING.md.
Code of conduct: CODE_OF_CONDUCT.md.
Security reports: SECURITY.md (do not file public issues for vulnerabilities).
Support pointers: SUPPORT.md.

pip install -e ".[dev]"
pytest
ruff check src tests scripts

License

Apache License 2.0 — see LICENSE.

Citation helpers: botscope citation and CITATION.cff.

Release files for botscope 2.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for botscope 2.0.0
File Size Uploaded
botscope-2.0.0.tar.gz 1.5 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for botscope 2.0.0
File Interpreter ABI Platform
botscope-2.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.8 MB

Release files / botscope-2.0.0.tar.gz

Download URL botscope-2.0.0.tar.gz
Size 1.5 MB
Tags Source
SHA-256 checksum
How to use checksums
819406037a834bc014f29fea03ca222e7d4f36f9b700b09bba66d85a255041f1
BLAKE2b-256 checksum
How to use checksums
53994689d19c1d5ccbe272208e5e59df113990e309f4178a121851ea6f4f3e00
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / botscope-2.0.0-py3-none-any.whl

Download URL botscope-2.0.0-py3-none-any.whl
Size 263.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
78300f89ad2dbc723d4c06a7215e6cb05a44afeb8d3cd9e23fdceb5744c30cdd
BLAKE2b-256 checksum
How to use checksums
fdf2695bf57a69f147a796480d95ea6a71049f466e97c0b16725f361255d876b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

2.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page