{"adoption": {"forks": 137, "observed_at": "2026-08-28T04:03:29.795011+00:00", "stars": 1078}, "canonical_url": "https://ross.abutalabs.com/products/aptrs", "card": {"archived": false, "artifact_type": "application", "description": "Automated pentest reporting with custom templates, project tracking, customer dashboard and client management tools. Streamline your security workflows effortlessly!", "domain": ["security", "penetration-testing", "self-hosted"], "enriched": true, "function": ["workflow-automation", "pdf", "developer-tools"], "health_score": 83, "homepage": "https://aptrs.com", "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["APTRS/APTRS"], "name": "APTRS/APTRS", "platform": ["windows", "self-hosted"], "pushed_at": "2026-03-31T02:42:09+00:00", "repo": "APTRS/APTRS", "stars": 1078, "tags": ["pentest-reporting", "vulnerability-tracking", "django", "security-automation", "client-management", "reporting", "automation", "linux", "macos", "docker", "web-server"], "topics": ["penetration-testing", "pentest-report", "pentesting", "infosec", "pentest", "security", "security-automation"], "urls": [], "use_cases": ["generate pentest reports as pdf and excel automatically", "track vulnerabilities across penetration testing projects", "manage pentest clients and projects in one dashboard", "create custom report templates for security assessments", "replace manual word-based pentest reporting", "self-host a pentest reporting platform for a security team"], "what_it_is": "APTRS (Automated Penetration Testing Reporting System) is a Python/Django and TypeScript web application that automates generation of PDF and Excel penetration testing reports from custom templates. It also provides project tracking, vulnerability management, and customer/client management dashboards for security teams.", "when_to_avoid": ["you need continuous vulnerability scanning rather than reporting for manual pentests", "you want a lightweight CLI report generator instead of a full web application", "your team requires integration with a specific commercial GRC platform"], "when_to_choose": ["you are a penetration tester or security firm spending too much time writing reports manually", "you need a self-hosted tool to track findings and generate client-ready PDF/Excel reports", "you want project and customer management bundled with report generation"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/aptrs", "repo": "APTRS/APTRS", "role": "main", "score": 72}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.795011+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:53:07.270279+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1cfa099013dec108253b127da48b449672f38660637379a6480f86dc4329a759", "fetched_at": "2026-08-28T04:03:29.795011+00:00", "kind": "readme", "missing": false, "url": "https://github.com/APTRS/APTRS"}, {"content_hash": "36c6c3c2e4f9f7e35fb7fea86ea9bfd1cf7fe7061016698b1a017ae1cc7f4a36", "fetched_at": "2026-08-29T12:54:06.497739+00:00", "kind": "homepage", "missing": false, "url": "https://aptrs.com"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.795011+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:53:07.270279+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1cfa099013dec108253b127da48b449672f38660637379a6480f86dc4329a759", "fetched_at": "2026-08-28T04:03:29.795011+00:00", "kind": "readme", "missing": false, "url": "https://github.com/APTRS/APTRS"}, {"content_hash": "36c6c3c2e4f9f7e35fb7fea86ea9bfd1cf7fe7061016698b1a017ae1cc7f4a36", "fetched_at": "2026-08-29T12:54:06.497739+00:00", "kind": "homepage", "missing": false, "url": "https://aptrs.com"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:53:07.270279+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1cfa099013dec108253b127da48b449672f38660637379a6480f86dc4329a759", "fetched_at": "2026-08-28T04:03:29.795011+00:00", "kind": "readme", "missing": false, "url": "https://github.com/APTRS/APTRS"}, {"content_hash": "36c6c3c2e4f9f7e35fb7fea86ea9bfd1cf7fe7061016698b1a017ae1cc7f4a36", "fetched_at": "2026-08-29T12:54:06.497739+00:00", "kind": "homepage", "missing": false, "url": "https://aptrs.com"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.795011+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.795011+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.795011+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:53:07.270279+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1cfa099013dec108253b127da48b449672f38660637379a6480f86dc4329a759", "fetched_at": "2026-08-28T04:03:29.795011+00:00", "kind": "readme", "missing": false, "url": "https://github.com/APTRS/APTRS"}, {"content_hash": "36c6c3c2e4f9f7e35fb7fea86ea9bfd1cf7fe7061016698b1a017ae1cc7f4a36", "fetched_at": "2026-08-29T12:54:06.497739+00:00", "kind": "homepage", "missing": false, "url": "https://aptrs.com"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.795011+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.795011+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:53:07.270279+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1cfa099013dec108253b127da48b449672f38660637379a6480f86dc4329a759", "fetched_at": "2026-08-28T04:03:29.795011+00:00", "kind": "readme", "missing": false, "url": "https://github.com/APTRS/APTRS"}, {"content_hash": "36c6c3c2e4f9f7e35fb7fea86ea9bfd1cf7fe7061016698b1a017ae1cc7f4a36", "fetched_at": "2026-08-29T12:54:06.497739+00:00", "kind": "homepage", "missing": false, "url": "https://aptrs.com"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.795011+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.795011+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.795011+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:53:07.270279+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1cfa099013dec108253b127da48b449672f38660637379a6480f86dc4329a759", "fetched_at": "2026-08-28T04:03:29.795011+00:00", "kind": "readme", "missing": false, "url": "https://github.com/APTRS/APTRS"}, {"content_hash": "36c6c3c2e4f9f7e35fb7fea86ea9bfd1cf7fe7061016698b1a017ae1cc7f4a36", "fetched_at": "2026-08-29T12:54:06.497739+00:00", "kind": "homepage", "missing": false, "url": "https://aptrs.com"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.795011+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.795011+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:53:07.270279+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1cfa099013dec108253b127da48b449672f38660637379a6480f86dc4329a759", "fetched_at": "2026-08-28T04:03:29.795011+00:00", "kind": "readme", "missing": false, "url": "https://github.com/APTRS/APTRS"}, {"content_hash": "36c6c3c2e4f9f7e35fb7fea86ea9bfd1cf7fe7061016698b1a017ae1cc7f4a36", "fetched_at": "2026-08-29T12:54:06.497739+00:00", "kind": "homepage", "missing": false, "url": "https://aptrs.com"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:53:07.270279+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1cfa099013dec108253b127da48b449672f38660637379a6480f86dc4329a759", "fetched_at": "2026-08-28T04:03:29.795011+00:00", "kind": "readme", "missing": false, "url": "https://github.com/APTRS/APTRS"}, {"content_hash": "36c6c3c2e4f9f7e35fb7fea86ea9bfd1cf7fe7061016698b1a017ae1cc7f4a36", "fetched_at": "2026-08-29T12:54:06.497739+00:00", "kind": "homepage", "missing": false, "url": "https://aptrs.com"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:53:07.270279+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1cfa099013dec108253b127da48b449672f38660637379a6480f86dc4329a759", "fetched_at": "2026-08-28T04:03:29.795011+00:00", "kind": "readme", "missing": false, "url": "https://github.com/APTRS/APTRS"}, {"content_hash": "36c6c3c2e4f9f7e35fb7fea86ea9bfd1cf7fe7061016698b1a017ae1cc7f4a36", "fetched_at": "2026-08-29T12:54:06.497739+00:00", "kind": "homepage", "missing": false, "url": "https://aptrs.com"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:53:07.270279+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1cfa099013dec108253b127da48b449672f38660637379a6480f86dc4329a759", "fetched_at": "2026-08-28T04:03:29.795011+00:00", "kind": "readme", "missing": false, "url": "https://github.com/APTRS/APTRS"}, {"content_hash": "36c6c3c2e4f9f7e35fb7fea86ea9bfd1cf7fe7061016698b1a017ae1cc7f4a36", "fetched_at": "2026-08-29T12:54:06.497739+00:00", "kind": "homepage", "missing": false, "url": "https://aptrs.com"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 75, "longevity": 100, "rhythm": 53}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1405, "days_push": 155, "days_rel": 155, "gap_med": 145, "n_releases_24m": 4}, "score": 72, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}