SpiderFoot

June 2, 2026 · View on GitHub

License Python Version Docker GraphQL CI status codecov Discord

SpiderFoot — OSINT Automation Platform

SpiderFoot is an open-source intelligence (OSINT) automation platform. It integrates with 309+ data sources to gather intelligence on IP addresses, domain names, hostnames, network subnets, ASNs, email addresses, phone numbers, usernames, Bitcoin addresses, and more. Written in Python 3 and MIT-licensed.


Table of Contents


Architecture

graph TB
    subgraph External
        Browser[Browser / Client]
    end

    subgraph Docker["Docker Compose Stack (23 containers)"]
        TRAEFIK[Traefik v3 :443<br/>Reverse Proxy + TLS]
        DSPROXY[Docker Socket Proxy<br/>Secure API Access]

        subgraph Application
            FRONTEND[sf-frontend-ui :80<br/>React SPA + Nginx]
            API[sf-api :8001<br/>FastAPI + GraphQL]
        end

        subgraph Workers["Task Processing"]
            CELERY_W[sf-celery-worker<br/>Celery Task Workers]
            CELERY_B[sf-celery-beat<br/>Periodic Scheduler]
            FLOWER[sf-flower :5555<br/>Celery Monitoring]
        end

        subgraph Analysis["Analysis Services"]
            AGENTS[sf-agents :8100<br/>7 AI Agents]
            TIKA[Apache Tika :9998<br/>Document Parsing]
        end

        subgraph LLM["LLM Gateway"]
            LITELLM[LiteLLM :4000<br/>Multi-Provider Proxy]
        end

        subgraph Data
            PG[(PostgreSQL :5432<br/>Primary Database)]
            REDIS[(Redis :6379<br/>EventBus / Cache)]
            QDRANT[(Qdrant :6333<br/>Vector Search)]
            MINIO[(MinIO :9000<br/>Object Storage)]
        end

        subgraph Observability["Observability Stack"]
            VECTOR[Vector.dev :8686<br/>Telemetry Pipeline]
            LOKI[Loki :3100<br/>Log Aggregation]
            GRAFANA[Grafana :3000<br/>Dashboards]
            PROMETHEUS[Prometheus :9090<br/>Metrics]
            JAEGER[Jaeger :16686<br/>Distributed Tracing]
        end

        subgraph Maintenance
            PGBACKUP[pg-backup<br/>Cron Sidecar]
            MINIOINIT[minio-init<br/>Bucket Bootstrap]
        end
    end

    Browser --> TRAEFIK
    TRAEFIK --> FRONTEND
    TRAEFIK --> API
    TRAEFIK --> AGENTS
    TRAEFIK --> GRAFANA
    TRAEFIK --> FLOWER
    TRAEFIK --> MINIO
    TRAEFIK -.-> DSPROXY
    FRONTEND --> API
    API --> PG
    API --> REDIS
    API --> QDRANT
    API --> MINIO
    API --> LITELLM
    API --> TIKA
    AGENTS --> LITELLM
    AGENTS --> REDIS
    CELERY_W --> PG
    CELERY_W --> REDIS
    CELERY_B --> REDIS
    VECTOR --> LOKI
    VECTOR --> MINIO
    VECTOR --> JAEGER
    PROMETHEUS --> VECTOR
    GRAFANA --> LOKI
    GRAFANA --> PROMETHEUS
    GRAFANA --> PG
    PGBACKUP --> PG
    PGBACKUP --> MINIO
    MINIOINIT --> MINIO

Quick Start

Already running SpiderFoot? See UPGRADING.md for the v6.1.0 adoption guide — it's an in-place, no-breaking-changes upgrade, and the guide lists the behavioural corrections (IP/scope classification, URL dedup, fixed API endpoints) to expect.

git clone https://github.com/poppopjmp/spiderfoot.git
cd spiderfoot

# Copy and configure environment
cp .env.example .env
# Edit .env — change passwords, uncomment profile sections as needed

# Core only (5 services: postgres, redis, api, worker, frontend)
docker compose -f docker-compose.yml up --build -d

# Full stack (all services except SSO)
docker compose -f docker-compose.yml --profile full up --build -d

Core (no profile)http://localhost:3000:

URLService
http://localhost:3000React SPA
http://localhost:3000/api/docsSwagger / OpenAPI

Full stack (--profile full)https://localhost via Traefik:

URLService
https://localhostReact SPA (via Traefik)
https://localhost/api/docsSwagger / OpenAPI
https://localhost/api/graphqlGraphiQL IDE
https://localhost/grafana/Grafana Dashboards
https://localhost/flower/Celery Flower Monitoring
https://localhost/minio/MinIO Console
https://localhost/traefik/Traefik Dashboard

Option 2 — Development (without Docker)

pip install -r requirements.txt
# Start PostgreSQL and Redis separately, then:
uvicorn sfapi:app --host 127.0.0.1 --port 8001

Note: Monolith mode (sf.py) was removed in v6.0.0. SpiderFoot now requires the microservices stack (Docker Compose or Kubernetes).


Docker Compose Profiles

Services are organized into profiles — activate only what you need:

ProfileServicesDescription
(core)postgres, redis, api, celery-worker, frontendAlways starts — minimal working set
scancelery-worker-activeActive recon tools (nmap, nuclei, httpx, …)
proxytraefik, docker-socket-proxyReverse proxy + TLS termination
storageminio, minio-init, qdrant, tika, pg-backupObject storage, vector DB, document parsing
monitorvector, loki, grafana, prometheus, jaegerFull observability stack
aiagents, litellmAI analysis agents + LLM gateway
schedulercelery-beat, flowerPeriodic tasks + Celery monitoring
ssokeycloakOIDC / SAML identity provider
fullall of the above except SSOComplete deployment
# Mix and match profiles
docker compose -f docker-compose.yml --profile proxy --profile storage up -d

# Full stack + SSO
docker compose -f docker-compose.yml --profile full --profile sso up -d

Deployment Modes

ModeCommandDescription
Docker Coredocker compose -f docker-compose.yml up -d5 core services (PostgreSQL, Redis, API, Worker, Frontend)
Docker Fulldocker compose -f docker-compose.yml --profile full up -d23+ services with observability, AI, and storage
Kuberneteshelm install sf helm/Horizontal scaling with Helm chart

Services

The Docker Compose deployment uses two networks (sf-frontend, sf-backend) and organizes services by profile:

Core Services (always running)

ServiceImagePortPurpose
sf-postgrespostgres:15-alpine5432Primary relational data store
sf-redisredis:7-alpine6379EventBus pub/sub, caching, Celery broker
sf-apispiderfoot-micro8001FastAPI REST + GraphQL API, scan orchestration
sf-celery-workerspiderfoot-microCelery distributed task workers
sf-frontend-uispiderfoot-frontend3000React SPA served by Nginx

Profile Services

ServiceProfileImagePortPurpose
sf-celery-worker-activescanspiderfoot-activeActive scanning (33+ recon tools)
sf-traefikproxytraefik:v3443Reverse proxy, auto-TLS, routing
sf-docker-proxyproxytecnativa/docker-socket-proxySecure Docker API access
sf-miniostorageminio/minio9000S3-compatible object storage
sf-minio-initstorageminio/mcOne-shot bucket creation
sf-qdrantstorageqdrant/qdrant6333Vector similarity search
sf-tikastorageapache/tika9998Document parsing (PDF, DOCX, etc.)
sf-pg-backupstoragepostgres:15-alpineCron sidecar: pg_dump → MinIO
sf-vectormonitortimberio/vector8686Telemetry pipeline
sf-lokimonitorgrafana/loki3100Log aggregation
sf-grafanamonitorgrafana/grafana3000Dashboards & alerting
sf-prometheusmonitorprom/prometheus9090Metrics collection
sf-jaegermonitorjaegertracing/jaeger16686Distributed tracing
sf-agentsaispiderfoot-micro81007 AI-powered analysis agents
sf-litellmaighcr.io/berriai/litellm4000Unified LLM proxy
sf-celery-beatschedulerspiderfoot-microPeriodic task scheduler
sf-flowerschedulerspiderfoot-micro5555Celery monitoring dashboard
sf-keycloakssokeycloak9080OIDC / SAML identity provider

Docker Volumes

VolumeMounted ByPurpose
postgres-datasf-postgresDatabase files
redis-datasf-redisRDB/AOF persistence
qdrant-datasf-qdrantVector index storage
minio-datasf-minioObject storage files
vector-datasf-vectorBuffer / checkpoints
grafana-datasf-grafanaDashboard state
prometheus-datasf-prometheusMetrics TSDB
traefik-logssf-traefikAccess logs

MinIO Buckets

BucketContents
sf-logsVector.dev log archive
sf-reportsGenerated scan reports (HTML, PDF, JSON, CSV)
sf-pg-backupsPostgreSQL daily pg_dump files
sf-qdrant-snapshotsQdrant vector DB snapshots
sf-dataGeneral application artefacts
sf-loki-dataLoki chunk/index storage
sf-loki-rulerLoki ruler data

Security Hardening

SpiderFoot v6.0.1 builds upon the comprehensive security hardening initiative of v6.0.0, introducing extreme high-throughput stability and immutable runtime environments:

Immutable Infrastructure (v6.0.1)

  • Read-Only Containers: All core containers (api, celery-worker) are deployed with read_only: true and cap_drop: ALL, dropping all root capabilities.
  • Ephemeral Storage: Volatile data like Celery worker execution spaces use isolated tmpfs mounts, ensuring zero persistent compromise footprint.
  • Load Optimization: Tuned FastAPI middleware (RateLimitMiddleware) and expanded worker concurrency enable the stack to effortlessly process heavy concurrent polling with zero 429 Too Many Requests errors.

Authentication & Authorization

  • JWT authentication on all 39 API routers with Depends(require_auth)
  • WebSocket & SSE auth validation — token verified before upgrade
  • CSP / X-Frame-Options / X-Content-Type-Options headers via FastAPI middleware
  • SSO callback URL origin validation (block open-redirect)
  • CORS restricted to explicit allowed origins

Input Validation & Injection Prevention

  • DOMPurify sanitization on every API response rendered in the UI
  • SQL parameterization audit across all database queries
  • Jinja2 SandboxedEnvironment replacing native Template
  • SafeId validation for all user-supplied identifiers (UUID format)
  • API error responses scrubbed of internal stack traces and system paths

Docker Hardening

  • 13/23 services hardened with security_opt: [no-new-privileges:true]
  • read_only: true + tmpfs mounts for ephemeral writes
  • cap_drop: [ALL] with minimal cap_add where required
  • Docker Socket Proxy limits (POST=0, NETWORKS=0, VOLUMES=0)

Frontend Security

  • AbortSignal on all 84+ API methods (cancel on unmount)
  • XSS-safe MarkdownRenderer with DOMPurify + marked
  • Code splitting — 11/14 pages lazy-loaded (reduced initial bundle)
  • Content Security Policy enforced at Nginx and API level

CLI (Go)

SpiderFoot ships with a cross-platform Go CLI (cli/) that compiles to a single static binary for Linux, macOS, and Windows. Built with Cobra and Viper.

cd cli && go build -o sf .

# Health check
sf health --server http://localhost:8001

# Scan management
sf scan list
sf scan start --target example.com --name "Recon"
sf scan get <scan-id>
sf scan stop <scan-id>

# Export
sf export json <scan-id>
sf export stix <scan-id>

# Schedules
sf schedule list
sf schedule create --name "Daily" --target example.com --interval 24

# Modules
sf modules --filter passive -o json

Cross-compile for all platforms:

cd cli && make all
# Produces: build/sf-linux-amd64, sf-darwin-arm64, sf-windows-amd64.exe, ...

Configuration via flags, SF_* environment variables, or ~/.spiderfoot.yaml. See cli/README.md for full documentation.


Monitoring & Observability

SpiderFoot includes a complete observability stack, with Vector.dev serving as the unified telemetry pipeline (replacing both Promtail and OpenTelemetry Collector).

ComponentPurposeAccess
GrafanaDashboards, alerting, log/metric explorationhttp://localhost:3000
LokiLog aggregation (backed by MinIO S3 storage)via Grafana
PrometheusMetrics collection from all serviceshttp://localhost:9090
JaegerDistributed tracing (OTLP via Vector.dev)http://localhost:16686
Vector.devLog/metrics/traces pipelineInternal

Pre-built Dashboards

Five Grafana dashboards are auto-provisioned: Platform Overview (19 panels), Scan Operations (22 panels), Celery Task Queue (16 panels), Infrastructure (22 panels), and Service Logs (17 panels).


Active Scan Worker

SpiderFoot includes a dedicated active scan worker — a separate Celery container that ships 33+ external reconnaissance tools for comprehensive target assessment. The active worker handles all scan tasks on a dedicated scan queue, keeping general tasks isolated.

Architecture

┌─────────────────────────────────────┐
│         Redis (broker)              │
└──────┬──────────────────┬───────────┘
       │                  │
       ▼                  ▼
┌──────────────┐   ┌───────────────────────┐
│ celery-worker│   │ celery-worker-active   │
│ (general)    │   │ (scanning)             │
│              │   │                        │
│ queues:      │   │ queue: scan            │
│ default,     │   │                        │
│ report,      │   │ 33+ recon tools:       │
│ export,      │   │ httpx, subfinder,      │
│ agents,      │   │ amass, gobuster, dnsx, │
│ monitor      │   │ naabu, masscan, katana,│
│              │   │ nikto, nuclei, nmap,   │
│              │   │ and 22 more...         │
└──────────────┘   └───────────────────────┘

Tools Included

The active worker builds on top of the base image (which includes nmap, nuclei, testssl.sh, whatweb, dnstwist, CMSeeK, retire.js, trufflehog, wafw00f, nbtscan, onesixtyone, snallygaster) and adds:

CategoryTools
DNS & Subdomainshttpx, subfinder, amass, dnsx, massdns, gobuster
Web Crawlingkatana, gospider, hakrawler, gau, waybackurls
Web Fuzzingffuf, arjun
Port Scanningnaabu, masscan
Vulnerabilitynikto, dalfox
SSL/TLStlsx, sslyze, sslscan
Secrets/JSgitleaks, linkfinder
Screenshotsgowitness (with Chromium)
Wordlists8 curated SecLists + DNS resolvers

Build

# Build everything (base + active worker)
docker compose -f docker-compose.yml up --build -d

# Or build just the active worker
docker build -f docker/Dockerfile.active-scanner -t spiderfoot-active:latest .

See Active Scan Worker Guide for full details.


Scan Profiles

SpiderFoot ships with 11 predefined scan profiles for common use cases. Profiles control which modules are enabled, option overrides, and execution constraints.

ProfileDescriptionKey Modules
quick-reconFast passive scan, no API keysPassive modules only
full-footprintComprehensive active footprintingAll non-Tor modules
passive-onlyZero direct target interactionStrictly passive
vuln-assessmentVulnerability & exposure focusVuln scanners, reputation
tools-onlyAll external recon tools36 tool modules (requires active worker)
social-mediaSocial media presence discoverySocial & secondary networks
dark-webTor hidden service searchTor-enabled modules
infrastructureDNS, ports, hosting, SSL mappingDNS, infrastructure
api-poweredPremium API data sources onlyAPI-key modules
minimalBare minimum for validationDNS resolve, spider
investigateDeep targeted investigationInvestigation modules

Tools-Only Profile

The tools-only profile runs all 36 external tool modules against a target — both pre-installed base tools (13 sfp_tool_* modules), active worker tools (20 sfp_tool_* modules), and the pre-existing tool integrations (sfp_httpx, sfp_subfinder, sfp_nuclei). It includes sfp_dnsresolve and sfp_spider as core helpers to feed discovered data into the tool pipeline.

# Start a tools-only scan via API
curl -X POST http://localhost/api/scans \
  -H "Content-Type: application/json" \
  -d '{"target": "example.com", "type": "DOMAIN_NAME", "profile": "tools-only"}'

Profiles are managed via spiderfoot.scan.scan_profile.ProfileManager — see Developer Guide.


AI Agents

Seven LLM-powered agents automatically analyze high-risk findings and produce structured intelligence. They subscribe to Redis event bus topics and process events asynchronously.

AgentTrigger EventsOutput
FindingValidatorMALICIOUS_*, VULNERABILITY_*Verdict (confirmed/likely_false_positive), confidence, remediation
CredentialAnalyzerLEAKED_CREDENTIALS, API_KEY_*Severity, active status, affected services
TextSummarizerRAW_*, TARGET_WEB_CONTENTSummary, entities, sentiment, relevance score
ReportGeneratorSCAN_COMPLETEExecutive summary, threat assessment, recommendations
DocumentAnalyzerDOCUMENT_UPLOAD, USER_DOCUMENTEntities, IOCs, classification, scan targets
ThreatIntelAnalyzerMALICIOUS_*, CVE_*, DARKNET_*MITRE ATT&CK mapping, threat actor attribution

API: http://localhost/agents/ — see Architecture Guide for endpoints.


Document Enrichment

Upload documents (PDF, DOCX, XLSX, HTML, RTF, plain text) for automated entity and IOC extraction.

Pipeline

  1. Convert — Document → plain text (pypdf, python-docx, openpyxl, etc.)
  2. Extract — Regex-based entity extraction (IPs, domains, hashes, CVEs, crypto addresses, etc.)
  3. Store — Original + extracted content → MinIO sf-enrichment bucket
  4. Analyze — Forward to DocumentAnalyzer agent for LLM-powered intelligence

API: POST http://localhost/enrichment/upload (100MB limit)


User-Defined Input

Supply your own documents, IOCs, reports, and context to augment automated OSINT collection.

EndpointDescription
POST /input/documentUpload document → enrichment → agent analysis
POST /input/iocsSubmit IOC list (IPs, domains, hashes) with dedup
POST /input/reportStructured report → entity extraction → analysis
POST /input/contextSet scope, exclusions, threat model for a scan
POST /input/targetsBatch target list for multi-scan

LLM Gateway

LiteLLM provides a unified OpenAI-compatible API for all LLM interactions, supporting OpenAI, Anthropic, and self-hosted Ollama models.

AliasModelUse Case
defaultgpt-4o-miniMost agent tasks
fastgpt-3.5-turboLow-cost, fast tasks
smartgpt-4oComplex reports & threat intel
localollama/llama3Self-hosted, no API key

Configure API keys in .env — see docker/env.example for all options.


GraphQL API

The GraphQL API is served by Strawberry at /api/graphql with a built-in GraphiQL IDE. It supports queries, mutations, and real-time subscriptions via WebSocket.

Queries

FieldDescription
scan(scanId)Fetch a single scan by ID
scans(pagination, statusFilter)Paginated scan listing
scanEvents(scanId, filter, pagination)Filtered & paginated events
eventSummary(scanId)Aggregated event type counts
scanCorrelations(scanId)Correlation findings for a scan
scanLogs(scanId, logType, limit)Scan execution logs
scanStatistics(scanId)Dashboard-ready aggregate stats
scanGraph(scanId, maxNodes)Event relationship graph for visualization
eventTypesAll available event type definitions
workspacesList workspaces
searchEvents(query, scanIds, eventTypes)Cross-scan text search
semanticSearch(query, collection, limit, scoreThreshold, scanId)Qdrant vector similarity search
vectorCollectionsList Qdrant collections and stats

Mutations

MutationDescription
startScan(input: ScanCreateInput!)Create and start a new OSINT scan
stopScan(scanId!)Abort a running scan
deleteScan(scanId!)Delete a scan and all related data
setFalsePositive(input: FalsePositiveInput!)Mark/unmark results as false positive
rerunScan(scanId!)Clone and restart a completed scan

Subscriptions (WebSocket)

SubscriptionDescription
scanProgress(scanId, interval)Real-time scan status changes
scanEventsLive(scanId, interval)Stream new events as they are discovered

Connect via ws://localhost/api/graphql using the graphql-transport-ws protocol.

Example Queries

# Fetch scan with dashboard statistics
query {
  scan(scanId: "abc-123") {
    name
    target
    status
    durationSeconds
    isRunning
  }
  scanStatistics(scanId: "abc-123") {
    totalEvents
    uniqueEventTypes
    totalCorrelations
    riskDistribution { level count percentage }
    topModules { module count }
  }
}

# Semantic vector search across OSINT events
query {
  semanticSearch(query: "phishing domain", limit: 10, scoreThreshold: 0.7) {
    hits { id score eventType data scanId risk }
    totalFound
    queryTimeMs
  }
}

# Start a new scan
mutation {
  startScan(input: { name: "Recon scan", target: "example.com" }) {
    success
    message
    scanId
    scan { status }
  }
}

# Subscribe to live scan progress
subscription {
  scanProgress(scanId: "abc-123") {
    status
    durationSeconds
    isRunning
  }
}

REST API

Full OpenAPI / Swagger documentation is available at /api/docs when the API service is running.

Key Endpoints

MethodEndpointDescription
GET/api/scansList all scans
POST/api/scansCreate and start a new scan
GET/api/scans/{id}Get scan details
POST/api/scans/{id}/stopStop a running scan
DELETE/api/scans/{id}Delete a scan
GET/api/scans/{id}/resultsScan result events
GET/api/scans/{id}/correlationsCorrelation findings
GET/api/scans/{id}/export/{format}Export (CSV/JSON/STIX/SARIF)
GET/api/healthService health check
GET/api/modulesList available modules
GET/api/storage/bucketsList MinIO buckets

Example

# Start a scan
curl -X POST http://localhost/api/scans \
  -H "Content-Type: application/json" \
  -d '{"target": "example.com", "type": "DOMAIN_NAME", "modules": ["sfp_dnsresolve"]}'

# Get scan results
curl http://localhost/api/scans/{scan_id}/results

Vector Search (Qdrant)

SpiderFoot uses Qdrant for semantic vector search and OSINT event correlation.

How It Works

  1. Embedding — Scan events are embedded into 384-dimensional vectors using all-MiniLM-L6-v2 (configurable).
  2. Indexing — Vectors are stored in Qdrant collections prefixed with sf_.
  3. Search — Natural language queries are embedded and matched against stored events using cosine similarity.
  4. Correlation — The Vector Correlation Engine supports 5 strategies: SIMILARITY, CROSS_SCAN, TEMPORAL, INFRASTRUCTURE, MULTI_HOP.

Configuration

Environment VariableDefaultDescription
SF_QDRANT_HOSTsf-qdrantQdrant server hostname
SF_QDRANT_PORT6333Qdrant REST API port
SF_QDRANT_PREFIXsf_Collection name prefix
SF_EMBEDDING_PROVIDERmockmock, sentence_transformer, openai, huggingface
SF_EMBEDDING_MODELall-MiniLM-L6-v2Embedding model name
SF_EMBEDDING_DIMENSIONS384Vector dimensionality

Object Storage (MinIO)

MinIO provides S3-compatible object storage for logs, reports, backups, and vector snapshots.

Storage API

MethodEndpointDescription
GET/api/storage/bucketsList all buckets
GET/api/storage/buckets/{name}List objects in a bucket
GET/api/storage/buckets/{name}/{key}Download an object
POST/api/storage/buckets/{name}Upload an object
DELETE/api/storage/buckets/{name}/{key}Delete an object

Configuration

Environment VariableDefaultDescription
SF_MINIO_ENDPOINTsf-minio:9000MinIO server
SF_MINIO_ACCESS_KEYminioadminAccess key
SF_MINIO_SECRET_KEYminioadminSecret key
SF_MINIO_SECUREfalseUse TLS

Configuration

All services are configured via environment variables (see docker/env.example):

VariablePurposeDefault
SF_DEPLOYMENT_MODEmonolith or microservicesmonolith
SF_DATABASE_URLPostgreSQL connection stringRequired
SF_REDIS_URLRedis URL for EventBus/CacheNone
SF_EVENTBUS_BACKENDmemory, redis, or natsmemory
SF_VECTOR_ENDPOINTVector.dev HTTP endpointNone
SF_LOG_FORMATjson or texttext
SF_QDRANT_HOSTQdrant hostnamesf-qdrant
SF_MINIO_ENDPOINTMinIO endpointsf-minio:9000
SF_EMBEDDING_PROVIDEREmbedding backendmock
SF_LLM_API_BASELiteLLM proxy URLhttp://litellm:4000
SF_LLM_DEFAULT_MODELDefault LLM modeldefault
OPENAI_API_KEYOpenAI API key (for LiteLLM)None
ANTHROPIC_API_KEYAnthropic API key (for LiteLLM)None
OLLAMA_API_BASEOllama server URLhttp://host.docker.internal:11434
OTEL_ENDPOINTOTLP endpoint for tracinghttp://vector:4317
GF_SECURITY_ADMIN_PASSWORDGrafana admin passwordspiderfoot

Documentation

DocumentDescription
Installation GuideSystem requirements and setup
Quick StartGet scanning in minutes
User GuideCore concepts and usage
API ReferenceREST + GraphQL API docs
Architecture GuideMicroservices design
Docker DeploymentContainer deployment guide
Module GuideUnderstanding and writing modules
Module MigrationMigrating to ModernPlugin
Active Scan Worker33+ external tool integration
Correlation RulesYAML correlation engine reference
Security GuideAuthentication, hardening, audit
Developer GuideContributing and code structure
FAQFrequently asked questions
TroubleshootingCommon issues and solutions

Modules

SpiderFoot has 309 modules, most of which do not require API keys. Modules feed each other in a publisher/subscriber model for maximum data extraction.

Module Categories

CategoryExamplesCount
DNS & InfrastructureDNS resolver, zone transfer, brute-force~20
Social MediaTwitter, Instagram, Reddit, Telegram, TikTok~15
Threat IntelligenceShodan, VirusTotal, AlienVault, GreyNoise~30
Search EnginesGoogle, Bing, DuckDuckGo, Baidu~10
Data BreachesHaveIBeenPwned, LeakCheck, Dehashed, Hudson Rock~11
Crypto & BlockchainBitcoin, Ethereum, Tron, BNB~8
Reputation / BlacklistsSpamhaus, SURBL, PhishTank, DNSBL~30
Internal AnalysisExtractors, validators, identifiers~25
External Tools36 tools: httpx, amass, nmap, nuclei, nikto, gobuster, etc.~36
Cloud StorageS3, Azure Blob, Google Cloud, DigitalOcean~5

For the full module list, see documentation/modules.md.


Correlation Engine

SpiderFoot includes a YAML-configurable rule engine with 95 pre-defined correlation rules.

# View all rules
ls correlations/*.yaml

# Template for writing new rules
cat correlations/template.yaml

Rule categories: vulnerability severity, exposure detection, cross-scan outliers, stale hosts, infrastructure analysis, blockchain risk aggregation.

See correlations/README.md for the full reference.


Web UI

SpiderFoot ships with a modern React SPA built with TypeScript, Vite, and Tailwind CSS. The UI features a dark theme with cyan accents, responsive layout, and real-time scan updates via WebSocket subscriptions.

Login

Secure JWT-based authentication with SSO support (OIDC/SAML).

Login

Dashboard

The main dashboard provides at-a-glance statistics — active scans, total events, risk distribution, and recent activity.

Dashboard

New Scan

Configure and launch OSINT scans against domains, IPs, email addresses, usernames, and more. Select module categories, set scan options, and start with a single click.

New Scan

Scans List

View all scans with status, target, event counts, and duration. Filter, search, and manage scans from one place.

Scans List

Scan Detail — Summary

Each scan has a detailed view with tabbed navigation. The Summary tab shows key metrics, risk distribution, top modules, and event type breakdown.

Scan Detail - Summary

Scan Detail — Browse

Browse all discovered data elements with filtering by event type, risk level, and source module. Expand rows to see full detail and provenance chain.

Scan Detail - Browse

Scan Detail — Graph

Interactive force-directed graph visualization of entity relationships. Explore how discovered domains, IPs, emails, and other entities connect to each other.

Scan Detail - Graph

Scan Detail — GeoMap

World map view plotting the geographic locations of discovered IP addresses, with country-level aggregation and risk coloring.

Scan Detail - GeoMap

Scan Detail — Correlations

Automated correlation findings from the YAML rule engine. Each finding includes severity, description, matched evidence, and remediation guidance.

Scan Detail - Correlations

Scan Detail — AI Report

LLM-generated Cyber Threat Intelligence (CTI) report with executive summary, key findings, risk assessment, recommendations, and technical details — produced by the AI report generator using scan data.

Scan Detail - AI Report

Workspaces

Organize scans into workspaces for multi-target campaigns. Each workspace groups related scans, tracks notes, and provides workspace-level analytics and AI-generated reports.

Workspaces

Settings

Configure global application settings, module API keys, notification preferences, and scan defaults.

Settings

Agents

Monitor and manage the 7 AI-powered analysis agents. View agent status, processed event counts, and recent analysis results.

Agents

Emotional Design Features

The UI applies emotional design principles for a richer developer experience:

  • Tooltip — accessible, portal-based, viewport-clamped tooltips with aria-describedby
  • Real-time Progress — SSE-powered scan progress bar with per-module breakdown
  • Celebration Banner — animated success state when a scan completes
  • Notification Center — bell icon with unread badge, notification panel (Zustand store, max 50 items)
  • Command PaletteCtrl+K / ⌘K fuzzy search across pages and recent scans with keyboard navigation
  • Schedules Page — full CRUD for recurring scan schedules (create, edit, toggle, delete, manual trigger)
  • STIX 2.1 Export — one-click export of scan data as a STIX bundle

Frontend Testing

The React frontend includes 300 tests across 27 test files, powered by Vitest 3 and Testing Library:

SuiteTestsCoverage
UI Components47Button, Badge, StatusBadge, ProgressBar, CardSkeleton, EmptyState, ConfirmDialog, Toast, Tabs, ModalShell, PageHeader, RiskPills
API Layer45All endpoint methods, error handling, auth headers, AbortSignal
Auth36Login, logout, token refresh, SSO flows, role guards
Login Page21Form validation, submission, SSO redirects, error states
Layout18Navigation items, sidebar, responsive, NotificationCenter, CommandPalette
Markdown Renderer16 + 14DOMPurify sanitization, XSS prevention, rendering
Emotional Design13Tooltip lifecycle, notification store CRUD, cap enforcement
Sanitize7DOMPurify integration, script stripping, attribute cleaning
ErrorBoundary8Crash recovery, fallback UI, error logging
Schedules4Page rendering, empty state, data display, create modal
Safe Storage4localStorage quota handling
Scan Tabs5GraphTab, BrowseTab, LogTab, GeoMapTab smoke tests
CommandPalette7Keyboard shortcuts, search, filtering, ARIA
cd frontend && npx vitest run    # Run all tests
cd frontend && npx vitest --ui   # Interactive UI mode

Use Cases

Offensive Security (Red Team / Pen Test)

  • Target reconnaissance and attack surface mapping
  • Sub-domain discovery and hijack detection
  • Credential exposure discovery
  • Technology stack fingerprinting

Defensive Security (Blue Team)

  • Asset inventory and shadow IT detection
  • Data breach monitoring
  • Brand protection and phishing detection
  • Threat intelligence enrichment

Scan Targets

IP addresses · domains · subdomains · hostnames · CIDR subnets · ASNs · email addresses · phone numbers · usernames · person names · Bitcoin/Ethereum addresses


Development

Project Structure

spiderfoot/
├── api/                  # FastAPI application (39 routers)
│   ├── graphql/          # Strawberry GraphQL (queries, mutations, subscriptions)
│   ├── routers/          # REST endpoint routers
│   ├── schemas.py        # Pydantic v2 contracts
│   └── versioning.py     # /api/v1/ prefix
├── agents/               # AI analysis agents (7 LLM-powered)
├── enrichment/           # Document enrichment pipeline
├── user_input/           # User-defined input ingestion
├── config/               # App configuration
├── db/                   # Database layer (repositories, migrations)
├── events/               # Event types, relay, dedup
├── plugins/              # Module loading and registry
├── security/             # Auth, CSRF, middleware
├── services/             # External integrations (embedding, cache, DNS)
├── observability/        # Logging, metrics, health, tracing
├── reporting/            # Report generation and export
├── cli/commands/         # Python CLI commands (25 commands)
└── vector_correlation.py # Vector correlation engine
cli/                      # Go CLI (cross-platform, Cobra-based)
├── cmd/                  # Commands: scan, modules, export, schedule, health, config
├── internal/client/      # HTTP client with auth, TLS
├── internal/output/      # Table, JSON, CSV formatters
├── Makefile              # Cross-compilation (6 targets)
└── go.mod                # Go module definition
frontend/                 # React SPA (TypeScript + Vite + Tailwind)
├── src/components/       # UI components (20+ primitives, Layout, NotificationCenter, CommandPalette)
├── src/pages/            # 14 pages (Dashboard, Scans, ScanDetail, Schedules, ...)
├── src/hooks/            # Custom hooks (useScanProgress SSE)
├── src/lib/              # API client, auth, notifications store
├── src/__tests__/        # 300 tests — Vitest + Testing Library
└── vite.config.ts        # Build config
infra/                    # Infrastructure configs
├── grafana/              # Dashboards + datasource provisioning
├── loki/                 # Loki local config (MinIO S3 backend)
├── litellm/              # LiteLLM model config
└── prometheus/           # Scrape targets config
modules/                  # 309 OSINT modules
correlations/             # 95 YAML correlation rules
documentation/            # Comprehensive docs
scripts/                  # Utility and maintenance scripts
docker/                   # Docker build files + nginx config
helm/                     # Kubernetes Helm chart

Running Tests

# Backend tests
pip install -r requirements.txt
pytest --tb=short -q

# Frontend tests (300 tests, 27 files)
cd frontend && npx vitest run

# Go CLI tests
cd cli && go test ./...

Version Management

cat VERSION                            # Check current version

The single source of truth for the version is the VERSION file (read at build time by the Go CLI via -ldflags and surfaced by the API/frontend).


Community

Join the Discord server for help, feature requests, or general OSINT discussion.

Maintainer: Poppopjmp van1sh@van1shland.io


License

SpiderFoot is licensed under the MIT License.


Actively developed since 2012 — 309 modules, 39 API routers, 94 correlation rules, 23-service Docker deployment, Go CLI, 300 frontend tests, comprehensive security hardening (9.0+ score), AI agents, vector search, and full observability.