Skip to main content

cyberscorecard

SMB cybersecurity governance scorecard — CIS Controls v8 assessment, risk findings, maturity scoring, and actionable remediation roadmap for small businesses.

4 in 5 SMBs have been breached. Average breach cost: $3.31M. There are only 35,000 CISOs for 359M businesses globally. cyberscorecard gives every Python developer the tools to build CISO-grade governance into any platform.

PyPI version Python 3.8+

Installation

pip install cyberscorecard

Quick Start

from cyberscorecard import SecurityAssessor, ControlStatus

assessor = SecurityAssessor()  # Pre-loaded with CIS Controls v8 IG1

# Self-assessment: provide status for each control
responses = {
    "CIS-5.2": ControlStatus.IMPLEMENTED,       # Unique passwords
    "CIS-6.3": ControlStatus.PARTIAL,            # MFA — partially deployed
    "CIS-8.2": ControlStatus.IMPLEMENTED,        # Automated backups
    "CIS-3.3": ControlStatus.NOT_IMPLEMENTED,    # Data access control
    "CIS-5.4": ControlStatus.NOT_IMPLEMENTED,    # Admin privilege separation
}

scorecard = assessor.assess(
    org_id="ACME-001",
    org_name="Acme Corp",
    control_responses=responses,
)

print(f"Overall score: {scorecard.overall_score}/100")
print(f"Maturity: {scorecard.maturity.value}")
print(f"Critical findings: {len(scorecard.critical_findings())}")
print(scorecard.summary())

Maturity Levels

Level Score Description
Initial 0–20 Ad hoc, reactive — no formal processes
Developing 20–40 Some controls in place, inconsistently applied
Defined 40–65 Documented and repeatable processes
Managed 65–85 Measured and controlled
Optimized 85–100 Continuous improvement culture

Security Domains

10 domains are assessed and scored individually:

access_control, data_protection, network_security, endpoint_security, incident_response, vulnerability_management, backup_recovery, security_awareness, third_party_risk, compliance

CIS Controls v8 IG1 Baseline

Pre-loaded controls include:

  • CIS-1.1: Enterprise Asset Inventory
  • CIS-3.3: Data Access Control Lists
  • CIS-5.2: Unique Passwords
  • CIS-5.4: Admin Privilege Separation
  • CIS-6.3: MFA for External Applications
  • CIS-7.1: Vulnerability Management Process
  • CIS-8.2: Automated Backups
  • CIS-9.4: Network Service Restriction
  • CIS-14.1: Security Awareness Program
  • CIS-17.1: Incident Response Owner

Each control includes severity, remediation steps, and framework tags.

Advanced Features

Pipeline

from cyberscorecard import AssessmentPipeline

pipeline = (
    AssessmentPipeline()
    .filter(lambda f: f.severity.value in ["critical", "high"], name="critical_high_only")
    .map(lambda findings: sorted(findings, key=lambda f: f.severity.value), name="sort_by_severity")
    .with_retry(count=2)
)

prioritized = pipeline.run(scorecard.findings)
print(pipeline.audit_log())

Caching

from cyberscorecard import ScorecardCache

cache = ScorecardCache(max_size=100, ttl_seconds=86400)

@cache.memoize
def run_assessment(org_id):
    return assessor.assess(org_id, org_name, responses)

cache.save("scorecard_cache.pkl")
print(cache.stats())

Score Trend & Regression Tracking

from cyberscorecard import ScoreTrend, RegressionTracker

trend = ScoreTrend(window=6)
tracker = RegressionTracker()

for quarterly_scorecard in history:
    trend.record(quarterly_scorecard.overall_score)
    tracker.record(quarterly_scorecard)

print(trend.trend())       # "improving"
print(trend.volatility())  # 3.2
print(tracker.latest_regression())  # None if no regression

Export Reports

from cyberscorecard import ScorecardExporter

print(ScorecardExporter.to_json(scorecard))
print(ScorecardExporter.to_csv(scorecard))
print(ScorecardExporter.to_markdown(scorecard))

Diff Between Assessments

from cyberscorecard import diff_scorecards

diff = diff_scorecards(last_quarter, this_quarter)
print(diff.summary())  # {'added': 0, 'removed': 2, 'modified': 3, 'score_change': 12.5}
print(diff.to_json())

Batch Assessment (Multi-Tenant)

from cyberscorecard import batch_assess, abatch_assess

# Sync — assess multiple orgs
scorecards = batch_assess(
    org_ids=["ORG-1", "ORG-2", "ORG-3"],
    assess_fn=lambda org_id: assessor.assess(org_id, org_names[org_id], responses_map[org_id]),
    max_workers=4,
)

# Async
scorecards = await abatch_assess(org_ids, assess_fn, max_concurrency=8)

Validation

from cyberscorecard import ControlValidator, ControlRule

validator = ControlValidator()
validator.add_rule(ControlRule("evidence_required", True, "All implemented controls need evidence"))
validator.add_rule(ControlRule("required_framework", "CIS Controls v8"))

errors = validator.validate_batch(scorecard.controls)

Streaming

from cyberscorecard import stream_findings, findings_to_ndjson

for finding in stream_findings(scorecard.findings):
    send_to_dashboard(finding)

for line in findings_to_ndjson(scorecard.findings):
    output.write(line)

Audit Log

from cyberscorecard import AuditLog

log = AuditLog()
log.record("assessed", "ACME-001", detail="score=72.4")
log.record("finding_resolved", "ACME-001", detail="CIS-3.3")

Changelog

v1.2.2 (2026-04-10)

  • Added Contributing and Author sections to README

v1.2.1 (2026-04-10)

  • Added Changelog section to README for release traceability

v1.2.0

  • Added ZeroTrustScorecard — zero-trust posture assessment across identity, device, network, and data layers
  • Added IncidentResponsePlaybookGenerator — auto-generate CIS-aligned IR playbooks from scorecard findings
  • Expanded SEO keywords for PyPI discoverability

v1.0.1

  • Advanced features: pipeline, caching, validation, diff/trend, streaming, audit log

v1.0.0

  • Initial release: CIS Controls v8 assessment, risk scoring, maturity scoring, remediation roadmap

License

MIT

Contributing

Contributions are welcome! Here's how to get started:

  1. Fork the repository on GitHub
  2. Create a feature branch: git checkout -b feature/your-feature
  3. Make your changes and add tests
  4. Run the test suite: pytest tests/ -v
  5. Submit a pull request

Please open an issue first for major changes to discuss the approach.

Author

Mahesh Makvana — GitHub · PyPI

MIT License

Metadata

Release files for cyberscorecard 1.2.2

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

Source distribution (sdist)

Source distribution for cyberscorecard 1.2.2
File Size Uploaded Provenance Actions
cyberscorecard-1.2.2.tar.gz 30.1 kB Without provenance Details for cyberscorecard-1.2.2.tar.gz

Built distribution (wheel)

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

Total release size: 57.0 kB

Release files / cyberscorecard-1.2.2.tar.gz

Download URL cyberscorecard-1.2.2.tar.gz
Size 30.1 kB
Tags Source
SHA-256 checksum
How to use checksums
ac1073db6d40f1bcd18480532f712f985909515e1563c5aa35a17a89c6f5f7a4
BLAKE2b-256 checksum
How to use checksums
467409cad03459ad420c0997cc23da8e3cc8e121436e0544905df322cb1f607c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.9

Release files / cyberscorecard-1.2.2-py3-none-any.whl

Download URL cyberscorecard-1.2.2-py3-none-any.whl
Size 26.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
993e718bb5bf49fb7e54790d784efa9e4b0616d8f0ff9fe1fdf164a0b5643946
BLAKE2b-256 checksum
How to use checksums
5e242647e5ba512130a48b52f38002c21e7b82f03bc60f97faf5203cd83545d9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.9

Security for cyberscorecard 1.2.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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